0x01 关于lsyncd
inotify的优秀替代品,基于lua,不过,它也依然使用 linux 2.6.13以后内核的inotify触发机制 配置简单灵活,在同步海量小文件时,性能表现优异,废话不多讲,咱们直奔主题 ...
环境准备:
RsyncServer ip: 192.168.5.4 RsyncClient26 ip: 192.168.5.7
0x02 在需要进行实时同步的 rsync 客户端机器上[ 这里是RsyncClient26 ]>编译安装lsyncd,如下
# yum install lua lua-devel asciidoc cmake -y # wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/lsyncd/lsyncd-2.1.5.tar.gz # tar xf lsyncd-2.1.5.tar.gz # cd lsyncd-2.1.5/ # ./configure --prefix=/usr/local/lsyncd-2.1.5 && make && make install # echo $? && cd # ln -s /usr/local/lsyncd-2.1.5/ /usr/local/lsyncd/ # cd /usr/local/lsyncd/bin/ && ./lsyncd
0x02 关于 lsyncd.conf 配置文件的详细配置及配置项简要说明
settings 部分,其实就是关于lsyncd工具自身的一些选项设置:
logfile : 指定lsyncd工具本身运行所产生的日志文件存放位置 statusFile : 定义lsyncd监控目录状态文件的存放位置 statusInterval : 隔多少秒记录一次被监控目录的状态 nodaemon=true : 默认是不启用守护模式的 inotifyMode : 指定要监控的事件,如,CloseWrite,Modify,CloseWrite or Modify maxProcesses : 指定同步时进程的最大个数 maxDelays : 当事件被命中累计多少次后才进行一次同步
sync 部分主要用来定义同步时的一些设置,可以同时同步多个目录,只需要在该代码块中事先定义好多个sync即可
default.rsync : 指定lsyncd运行模式,另外,还有default.direct,default.rsyncssh模式,个人建议缺省 source : 指定要监控的目录,务必全部用绝对路径 target : 要同步到的目标目录,一般为rsync服务端模块下指定的目录 init : 为false时表示只同步lsyncd进程启动以后发生改动事件的文件,否则,反之,默认为true delay : 当命中的事件累计到多少时再触发同步 exclude : 通过此选项排除掉不需要同步的文件,可用它自己的正则进行匹配 delete : 和rsync 的 --delete 作用一样,先清空再同步
下面是关于 rsync 工具自身的一些设置选项
compress : 压缩后再同步 bwlimit : 限速同步,当你不想占满带宽时 archive : 归档模式同步 perms : 保留文件原有属性同步
0x03 开始实战配置 lsyncd.conf
# mkdir -p /usr/local/lsyncd-2.1.5/{var,etc} # vi /usr/local/lsyncd/etc/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 or Modify", maxProcesses = 10, statusInterval = 10, nodaemon = true, maxDelays = 20 } sync { default.rsync, source = "/bakdata/", target = "rsync_backup@192.168.5.4::webbak", delete="true", exclude = { "dir*" }, delay = 10, init = false, rsync = { bwlimit=200, binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, perms = true, password_file = "/etc/rsync.password" } }
0x04 加载自定义配置文件,启动lsyncd
# /usr/local/lsyncd/bin/lsyncd -log all /usr/local/lsyncd/etc/lsyncd.conf &>/dev/null & # echo "/usr/local/lsyncd/bin/lsyncd -log all /usr/local/lsyncd/etc/lsyncd.conf &>/dev/null &" >> /etc/rc.local # ps -le | grep lsyncd 先看下lsyncd进程有没有正常起来 # mkdir /bakdata/lsyncd{1..58} 接着,尝试在要同步的目录下批量创建文件,看能不能按指定的时间正常延迟同步
0x05 从日志中仔细观察同步过程
# tail -f /usr/local/lsyncd/var/lsyncd.log
0x06 观察监控目录中的事件命中状态
# cat /usr/local/lsyncd/var/lsyncd.status
小结:
其实,lsyncd还支持当监控到某个指定事件时就执行什么样的命令,待自己详读官方文档后再做单独说明,由于是通过时间延迟和累计事件命中次数来触发同步,在设计上要优于inotify,更多内容,如果有兴趣大家可自行参考其官方文档,待续…