注意:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端向rsync客户端同步数据。当需要添加inotify实现实时同步数据时,我们就需要从rsync客户端向各rsync服务端同步数据,这样rsync客户端就变成了master,而rsync服务端就变成了slave。
原理:当test的本地目录,也就是需要同步的目录发生变化时,比如有文件改名、更新、删除、权限变化,此时就使用inotify命令查找这些变化,进行相应的轮询工作
源服务器 192.168.1.43
目标服务器 192.168.1.248
实现源服务器192.168.1.43 /root/zj/test文件夹文件实时同步到目标服务器192.168.1.248 的/data/test/目录下
查看rsync是否安装rpm -qa|grep rsync;一般情况系统自带了。
在目标服务器192.168.1.248上配置
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[test] 模版名称
path = /data/test/ 同步的路径
ignore errors
read only = no
list = no
auth users = backup
secrets file = /etc/rsyncd.pwd
vi /etc/rsyncd.pwd
backup:123456
设置权限
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsyncd.pwd
启动rsync
/usr/bin/rsync --daemon
在源服务器上安装inotify
./configure --prefix=/opt/inotify
make && make install
在源服务器192.168.1.43编写触发同步脚本
vi /data/rsync.sh
#!/bin/sh
SRC=/root/zj/test/
DST=backup@192.168.1.248::test 这里的test 需要与rsyncd.conf中配置的模版名称一样
INWT=/root/zj/inotify/bin/inotifywait
RSYNC=/usr/bin/rsync
$INWT -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f %e' -e create,move,delete,modify $SRC | while read file ; do
$RSYNC -vzrtopg --progress --delete --password-file=/home/rsyncd.pwd $SRC $DST
echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
done
赋权
chmod +x rsync.sh
vi /home/rsyncd.pwd
123456
赋权
chmod 600 /home/rsyncd.pwd
nohup /data/rsync.sh & 后台运行
设置开机启动
echo "/data/rsync.sh &" >> /etc/rc.local
最后测试文件是否同步,在192.168.1.43 /root/zj/test下创建文件,看192.168.1.248/data/test是否同步过来
阅读(1857) | 评论(0) | 转发(0) |