背景说明
- 在某些业务场景下,我们可能需要对位于不同机器上的某个目录进行实时同步。本文主要简要介绍
debian8
系统下如何使用lsyncd
工具进行同步。同时附上同类型工具sersync
的对比测试情况。
安装lsyncd
- 确保你的apt源可以正常使用,接着执行如下命令。
1 | # apt-get install luarocks |
- 设置配置文件
1 | settings { |
- 启动对应的lsyncd服务。
1 | /etc/init.d/lsyncd start |
- 查看
/usr/local/lsyncd/logs/lsyncd.log
日志文件,判断同步是否正常。
lsyncd与sersync比较
- 这里基于
lsyncd(2.1.5)
和sersync(2.5.4)
进行比较。
特性比较
lsyncd | sersync | |
---|---|---|
监听inotify事件 | Modify CloseWrite(默认) | delete / createFolder(默认)/ createFile closeWrite(默认)/moveFrom(默认)/ moveTo(默认) attrib / modify |
失败重传 | 支持,具体机制未知 | 支持, 默认写在/tmp/rsync_fail_log.sh,每60min重试 |
全局同步 | 启动时同步; 可以在logrotate里每天重启 | 启动时同步, 可以开启crontab功能,默认每600min执行一次 。 |
默认rsync参数 | gpsoltD | artuz |
实时性 | 每经过delay(默认15)秒或maxDelay(默认1000)个事件后触发同步 | 每个事件触发同步 |
日志输出 | 支持 | 不支持 |
合并配置 | 支持 | 不同源目录的同步必须写在不同配置文件 |
性能比较
-
测试目录包含
8215
个子目录,51587
个文件,共4.3G
。 -
源机和目标机均为标配
8
核16G
内存146G
硬盘,内网通过1000M
交换机互联。 -
源机服务开启
sshd
,lsyncd/sersync
。 -
目标机服务开启
sshd
,rsync daemon
。
测试结果
lsyncd | sersync | |
---|---|---|
全局同步(不带z) | 45s | 44s |
全局同步(带z) | 70s | 71s |
解压/cp | 解压约耗时1min(同时开始同步), 继续同步耗时21~23s | 解压约耗时1min(同时开始同步), 继续同步耗时2min 24s~2min 26s |
rm | <60s | >4min, 实际同步完成后仍有同步操作(应该是大量失败重试), 约8min才完全停止同步 |
mv | 约10min后同步, 实际同步耗时约1min 40s | 接近全局同步 |
总结
-
lsyncd
在通常情况下拥有更好的性能,应该与它并非每次触发inotify
就调用rsync
同步有关。因为累积一定事件或经过一定时间后才触发同步,极大减少了rsync
调用次数,从而在业务量较大的情况下表现更好。在大量操作的情况下,sersync
的实际同步次数是lsyncd
的10倍以上。 -
但在大量目录的mv操作中,
lsyncd
的性能明显不如sersync
,估计与其不监听moveFrom
和moveTo
操作有关。
赞赏一下