Rsync 安装及不同版本性能测试
一、rsync用途
二、 rsync的安装、配置及相关参数
三、 rsync3.0.9的优势
四、 同步测试
1、 服务器3.0.9,客户端2.6.8和3.0.9同步测试
2、 服务器2.6.8,客户端2.6.8和3.0.9同步测试
3、 一组服务器客户端均为2.6.8,一组服务器客户均端为3.0.9同步测试
本文目的:测试采用hash算法的3.0版本的rsync优势强在哪里 
一、rsync用途
rsync:remote sync,远程同步工具。是一个快速增量文件传输工具,
rsync 优点是速度快、安全、高效。
扩充:sersync,在rsync基础上更好的同步软件
 
二、rsync安装
主服务器、客户端都需要安装rsync。,
①    服务端的安装,采用tar包模式安装,将rsync文件拷贝到home目录下。安装步骤:
cd /home
tar zxvf rsync-2.6.8.tar.gz
cd rsync-2.6.8
./configure         (不加prefix路径时,默认安装路径是/usr/bin)                 
make
make install
默认安装路径是/usr/bin
修改安装路径的配置方法:
./configure --prefix=/usr/local/rsync
 
②    vi /etc/xinetd.d/rsync(有无此文件同步不受影响 )
service rsync
{
        disable = yes
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure += USERID
}
③端口号确认
vi /etc/services rsync
rsync            873/tcp                         # rsync
rsync            873/udp                         # rsync
④vi /home/rsync.passwd( 名字随便写,和配置文件一致即可,格式:一行一个用户,“:”后面为密码,需对应创建用户名,密码)(不是必须的文件,创建目的是不输入密码同步)
goodboy:123456
修改密码权限为600,不为600会报错
chmod 600 /home/rsync.passwd
 
⑤启动
/usr/bin/rsync --daemon
若安装路径进行过修改,如改为/usr/local/rsync
则启动为/usr/local/rsync/bin/rsync –daemon
或者 /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf
 
echo "/usr/bin/rsync --daemon">>/etc/rc.local
echo "/usr/local/rsync/bin/rsync --daemon">>/etc/rc.local
附注:
/usr/bin/rsync --version 查看安装版本
/usr/bin/rsync --help 查看帮助
 
⑥修改配置文件vi /etc/rsyncd.conf   
注意配置文件是rsyncd.conf,不是rsync.conf。先定义全局变量,再定义局部变量
uid = root                                          
gid = root
max connections = 200
timeout = 600
use chroot = no
read only = no
port = 873
hosts allow=.38/255.255.255.0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[rsync_test]                     //局部变量。定义同步的路径(客户端用这个关键字链接)
path=/usr/local/rsync        //需要同步的路径
secrets file=/home/rsync.passwd    //密码保存文件,需和上面的密码文件路径一致
 
⑦同步参数
常用参数-avz ,--progress,--delete
 
-v, --verbose 详细模式输出
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
--delete 删除那些DST中SRC没有的文件
--force 强制删除目录,即使不为空
-timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
 
 
例:
同步.36home下的文件,显示整个同步过程,若客户端有服务端没有的文件,则删除此文件。
rsync -avz --progress --delete goodboy@YOURIP:/home /home
⑧涉及权限的文件,会权限不足,会提示报错,访问被拒绝
rsync: send_files failed to open "/proc/2/mem": Permission denied (13)
 
 
 
三、 rsync2.6.8和rsync3.0.9的同步对比
3.0.0的RSYNC 之前的版本是在传输前,生成一个文件列表,这个文件列表是存在于内存中,一个文件信息大约要占用100个字节单位的内存,
 
3.0.0和之后的版本是在内存中也建立列表,但是是以增量递归模式建立区块文件,只有该区块的列表在传输时,才会被调用到内存中。
 
 
四、同步测试
涉及服务器:
.6, 版本 2.6.8
.34,版本 2.6.8
.36,版本 3.0.9
.35,版本 2.6.8
.38,版本 3.0.9
 
第一次同步:从 .36(3.0.9版本)服务器上同时同步到.35(2.6.8版本),.38(3.0.9版本)。
同步内容: .36的根目录(/),大小3.7G,数量9万文件
测试目的:采用何种模式同步,同步时间,内存占用率。
测试数据:
PID USER       PR NI VIRT RES SHR S %CPU %MEM    TIME+ COMMAND
36(3.0.9)服务器
29353 goodboy    25   0 144m 41m 868 R 42.0 0.7   2:57.62 rsync                                                                 
29355 goodboy    25   0 76236 9420 872 R 41.6 0.2   2:55.62 rsync   
29353 goodboy    25   0 144m 41m 868 R 75.8 0.7   3:47.06 rsync                                                                 
29355 goodboy    25   0 76236 9420 872 R 75.2 0.2   3:44.62 rsync    
 
35( 2.6.8)客户端:模式为先统计整体内容,再进行同步。
内存占用率为:
19751 root       15   0 75024 11m 496 S 9.0 0.2   0:19.11 rsync
19751 root       15   0 75024 11m 496 S 5.7 0.2   0:24.55 rsync  
从统计看, 2.6.8占用实际内存较多。
38( 3.0.9)客户端:模式为边同步边更新数据大小,最终涉及的同步文件数量在同步完成后得出。
内存占用率为:
9729 root       15   0 142m 4476 592 S 7.7 0.1   0:22.79 rsync
9729 root      15   0 130m 4444 592 S 3.3 0.1   0:30.24 rsync 
同步画面未截图,两客户端同时完成数据同步。
 
第一次同步测试结论:不同版本之间从同一台服务器上同步时,完成时间一致
当服务器为高版本,客户端为低版本时,客户端采用自身的同步方式同步文件。
 
第二次测试
从服务端.6(2.6.8版本)同步到.34(2.6.8版本),.36(3.0.9版本)
 
测试目的:采用何种模式同步,同步时间,及内存占用率。
同步内容:.6的img ,大小5.4G,217074文件
服务器.6(2.6.8)内存占用率
13916 root       16   0 91440 26m 740 R 22.6 5.2   1:12.56 rsync                                                                 
13511 root       15   0 91440 26m 740 S 20.3 5.2   2:03.69 rsync   
客户端.34(2.6.8)采用统计完毕同步文件后,再同步文件。
内存统计
10455 root       15   0 87188 25m 480 S 4.3 0.4   0:25.77 rsync
客户端.36(3.0.9)采用统计完毕同步文件后,再同步文件。
内存统计
4583 root        15   0 85880 20m 500 R 7.0 0.3   0:09.57 rsync
第二次同步测试结论:同时完成同步过程,都采用先统计再同步的方法。
 
第一、第二次同步结论:同步模式采用服务、客户端最低版本所用模式。
 
第三次测试
测试内容:服务器,客户端为相同版本,测试同步效率,完成时间。
同步内容:img 目录, 217074文件 文件大小5.4G。目录、内容完全一致
从 .36同步到.38 (3.0.9之间同步)
从 .34同步到.35 (2.6.8之间同步)
测试结论: .35同步完10万文件时,10.36已完成同步。此次同步未计时
 
第四次测试:删除 .35,.38的同步文件,再次进行同步测试。
测试目的:同步时间,对第三次试验做补充。
.36启动时间 10:52,11:07同步完成
sent 4243965 bytes  received 5102387617 bytes 6714834.43 bytes/sec
total size is 5087631486 speedup is 1.00
 
.35启动时间 10: 52,11:07时刚完成整体内容统计,开始同步。12:10同步完成
sent 4954958 bytes received 4562450944 bytes 998885.93 bytes/sec
total size is 5087631486 speedup is 1.11
 
整体结论
3.0.9效率远胜于 2.6.8,采用以虚拟内存为主,对实际内存使用显著减少。当服务器、客户端为不同版本时,采用低版本的rsync进行同步。
 
附文件数统计
ls -lR|grep "^-"|wc – l
ls -lR|grep "^d"|wc -l