rsync花费太长时间才能运行

我有一个涉及2台服务器的负载均衡器设置。 这两台服务器相互镜像。 blanacer的主要用途是提供静态文件。 我们称之为服务器A和服务器B.

服务器A将从不同networking上的远程主机检索文件。 那些被检索的远程文件是社区网站的媒体文件,所以rsync需要每隔30分钟运行一次,以使文件保持同步。 其他明智的用户会看到破碎的图像等。服务器A也通过HTTP服务的文件,峰值时间在400MB / S

服务器B将与服务器A上的文件进行rsync同步,为了保持一致性,rsync每30分钟运行一次。 服务器B也通过http服务文件,峰值时间为400MB / S

A和B的负荷已经非常高,平均负荷:8.00,8.10,7.68和更多

如何改进我的设置以减less服务器负载并提高rsync效率?

谢谢

这取决于什么导致这个高处理器利用率。 如果高处理器利用率是由Rsync生成文件校验和引起的,则可以执行一些操作。

你可能根本不需要校验和。 默认情况下,rsync根据修改时间和文件大小决定文件是不同的。 如果添加“ -c ”选项,它将通过比较校验和来确定文件是不同的。 如果不需要校验和,则省略该选项。

如果您确实需要校验和,则在某些情况下校验和caching可能会起作用。 如果您正在同步的文件不会经常更改,则可以在cron作业中每天生成一次校验和,rsync将使用生成的校验和。 对于任何新文件或者与创build校验和时修改时间或大小不同的任何文件,Rsync仍将生成校验和。

这个信息基于rsync 3.0.5,但应该在3.0.6中工作。 你需要重新编译rsync; 校验和caching是一个补丁。 这是我用来编译rsync的:

 rsync_version="3.0.5" scriptroot="Set this to your working directory." mkdir -p $scriptroot/rsync-source/rsync-working cd $scriptroot/rsync-source/rsync-working tar xvzf ../rsync-${rsync_version}.tar.gz tar xvzf ../rsync-patches-${rsync_version}.tar.gz cd $scriptroot/rsync-source/rsync-working/rsync-${rsync_version} patch -p1 < patches/checksum-reading.diff ./configure make 

然后使用rsyncsums生成校验和。 调用rsync时,使用“ --sumfiles=lax ”选项。

你没有说明你正在使用的版本。 如果你在RHEL / CentOS上,很可能你会被困在2.x版本中。 2.x的问题是扫描所有目录并发送文件列表之前,它进行任何传输。 这是不好的,因为如果树足够大,传输实际开始时就有被从caching中移出的风险,导致磁盘活动的两倍。 此外,如果连接是片状的,你将永远不会传输任何东西,因为连接会提前下降。

但是,从版本3.0开始,扫描目录结构。 要在RHEL / Centos上升级到3.x,我只是从http://koji.feodraproject.org下载了一个Fedora(版本10及以下版本,因为格式改变,与RHEL稍有不兼容)SRPM,并发布了一个&#xFF1A;

 rpmbuild --rebuild rsync.xxxx.src.rpm 

您需要在两台机器上安装新的软件包。

许多网站build议-avzuh归档。 经过一些testing后,我发现这是-z(压缩),这使得我永远都不会忘记(即使没有改变,从我的500g便携式硬盘上做备份)。

用-z大约需要1个小时(没有变化),没有需要大约30秒。

无论是负载平衡还是故障恢复/灾难恢复,我都开始尝试使用DRBD ,就像在networking上的RAID-1一样。

使用rsync支持,如果你主要镜像一组静态文件通过rsync这种方式的文件列表rsync不会花最初的时间轮询你的本地文件系统来build立一个文件列表 – 节省了大量的时间。 文件列表非常酷 – 如果在列表中包含一个目录,rsync将dynamic扫描并发送该目录(即,如果所述目录经常容易改变)

您正在使用辅助NIC进行镜像吗?

根据文件更改的频率和文件数量,最好等待修改,然后才发送通知。 如果修改频率较低,文件总数较多,则效果会更好。 在这种情况下,rsync会将磁盘命中stat()所有文件以查看它们是否被更改。

http://inotify-tools.sourceforge.net/有一个简单的例子(见例1),如何用粗糙的方式连接Linux的inotify(文件修改监视器)和rsync&#x3002;

理想情况下,这将被集成到rsync本身(我认为有一些实验版本的地方是什么,但现在找不到它…)

使用-v选项运行rsync,以便您可以看到它正在运行以及运行的时间。 同时logging它的输出,看它什么时候开始以及什么时候结束。

你确定这是导致高负载的rsync? 也许这是别的。 你可以通过disobiling rsync来检查它,或者每60分钟将其更改为rsync,并查看负载是否下降。

使用vmstat来查看你的服务器在做什么。 这是很多的IO? 还是交换? 你可以使用iostat来查看IO的使用情况。 您的服务器是否因为使用了大量的CPU而变得缓慢? 或大量交换? 还是有很多的磁盘IO?

你的内存是什么样的? 有多less使用? Linux使用未使用的RAM作为磁盘的caching。 如果你有更多的内存I / O将'改善'。

你有什么样的磁盘? 你可以得到更多的磁盘或更快的磁盘,并袭击他们。 这会加快性能。