背景说明
- 在某些业务场景下,我们可能需要对位于不同机器上的某个目录进行实时同步。本文主要简要介绍
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操作有关。
赞赏一下
支付宝打赏
微信打赏