(提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)
- bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
- compress 压缩传输默认为true 。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
- perms 默认保留文件权限 。
- 其它rsync的选项
lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响 。
2.3 启动lsyncd使用命令加载配置文件,启动守护进程,自动同步目录操作 。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf
2.4 lsyncd.conf其它模式示例以下配置本人都已经过验证可行,必须根据实际需要裁剪配置:settings {logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",inotifyMode = "CloseWrite",maxProcesses = 8,}-- I. 本地目录同步,direct:cp/rm/mv 。适用:500+万文件,变动不大sync {default.direct,source= "/tmp/src",target= "/tmp/dest",delay = 1maxProcesses = 1}-- II. 本地目录同步,rsync模式:rsyncsync {default.rsync,source= "/tmp/src",target= "/tmp/dest1",excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",rsync= {binary = "/usr/bin/rsync",archive = true,compress = true,bwlimit= 2000}}-- III. 远程目录同步,rsync模式 + rsyncd daemonsync {default.rsync,source= "/tmp/src",target= "syncuser@172.29.88.223::module1",delete="running",exclude = { ".*", ".tmp" },delay = 30,init = false,rsync= {binary = "/usr/bin/rsync",archive = true,compress = true,verbose= true,password_file = "/etc/rsyncd.d/rsync.pwd",_extra= {"--bwlimit=200"}}}-- IV. 远程目录同步,rsync模式 + ssh shellsync {default.rsync,source= "/tmp/src",target= "172.29.88.223:/tmp/dest",-- target= "root@172.29.88.223:/remote/dest",-- 上面target,注意如果是普通用户,必须拥有写权限maxDelays = 5,delay = 30,-- init = true,rsync= {binary = "/usr/bin/rsync",archive = true,compress = true,bwlimit= 2000-- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"-- 如果要指定其它端口,请用上面的rsh}}-- V. 远程目录同步,rsync模式 + rsyncssh,效果与上面相同sync {default.rsyncssh,source= "/tmp/src2",host= "172.29.88.223",targetdir = "/remote/dir",excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",-- maxDelays = 5,delay = 0,-- init = false,rsync= {binary = "/usr/bin/rsync",archive = true,compress = true,verbose= true,_extra = {"--bwlimit=2000"},},ssh= {port=1234}}
上面的内容几乎涵盖了所有同步的模式,其中第III个要求像rsync一样配置rsyncd服务端,见本文开头 。第IV、V配置ssh方式同步,达到的效果相同,但实际同步时你会发现每次同步都会提示输入ssh的密码,可以通过以下方法解决:在远端被同步的服务器上开启ssh无密码登录,请注意用户身份:
user$ ssh-keygen -t rsa一路回车...user$ cd ~/.sshuser$ cat id_rsa.pub >> authorized_keys
把id_rsa私钥拷贝到执行lsyncd的机器上user$ chmod 600 ~/.ssh/id_rsa测试能否无密码登录user$ ssh user@172.29.88.223
3. lsyncd的其它功能lsyncd的功能不仅仅是同步,官方手册 Lsyncd 2.1.x ‖ Layer 2 Config ‖ Advanced onAction 高级功能提到,还可以监控某个目录下的文件,根据触发的事件自己定义要执行的命令,example是监控某个某个目录,只要是有jpg、gif、png格式的文件参数,就把它们转成pdf,然后同步到另一个目录 。正好在我运维的一个项目中有这个需求,现在都是在JAVA代码里转换,还容易出现异常,通过lsyncd可以代替这样的功能 。但,门槛在于要会一点点lua语言(根据官方example还是可以写出来) 。另外偶然想到个问题,同时设置了maxDelays和delay,当监控目录一直没有文件变化了,也会发生同步操作,虽然没有可rsync的文件 。
TO-DO: