Rsync+Inotify
配置全解
以前一直用
unison
进行双向同步,今天突然想用一个源对所有其它服务器进行同步,并保持高度一致,自然就想到了
rsync+inotify,google
搜索一通,发现大家发的技术文档大致都差不多,就照同是
51cto
上的
king_819
兄的配置开始来了一遍,不动手不知道,一动手还问题不少,现把步骤写下来,以便其它同学少走歪路,也提醒自已。
Rsync+inotify
的工作原理是,源机器上的
inotify
实时监控主机上的某目录,如果发现有增删改的操作就把相应文件使用
rsync
推送
到相应服务器上。
1
、安装
rsync,inotify
Yum install rsync inotify-tools –y
2
、配置需要同步的机器,即被推送接受同步文件的机器
,
这里称为服务器
2.1 目录配置
mkdir /log/access
useradd -s /sbin/nologin logan
chown logan.logan -R /log/access
chmod 777 -R /log/access
2.2 rsync配置项
vim /etc/rsyncd.conf
#global
uid = logan
gid = logan
use chroot = no
max connections = 100
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[logdata]
path = /log/access
ignore errors
read only = no
list = no
hosts allow = 192.168.1.0/255.255.0.0
auth users = logan
secrets file = /etc/rsyncd.pwd
2.3服务端密码文件:
echo "logan:123" > /etc/rsyncd.pwd
chmod 600
/etc/rsyncd.pwd
2.4启动服务:
rsync --daemon /etc/rsyncd.conf
2.5 xinetd启动
vim /etc/xinetd.d/rsync
disable = no
service xinetd restart
注:
这里有个重要的问题大家都没有提,就是
uid,gid,
这里用户和组必须与
path
目录的用户与组保持一致,否则会出错各种权限错误。源机器推送过来的各种权限文件都会被改为
uid,gid
指定的用户和组。
其次是认证文件,
这里用户名与密码要都写进去。并改
权限,
chmod 600 /etc/rsyncd.pwd
2.6 客户端同步
2.6.1
rsync -vzrtopg --delete --progress --progress /root/install.log
[email protected]::logdata --password-file=/etc/rsyncd.pwd
2.6.2变量
rsync_module=logdata
rsync_pass=/etc/rsyncd.pwd
rsync_user=logan
dst_ip=192.168.1.20
rsync -vzrtopg --delete --progress --progress /root/install.log ${rsync_user}@${dst_ip}::${rsync_module}/ --password-file=$rsync_pass
出错解决:
1)rsync: mkstemp ".install.log.PMSV3b" (in logdata) failed: Permission denied
解决:在服务器目录加777权限:chmod 777 access/
3
、inotify源机器配置
#!/bin/bash
dst_ip=192.168.1.20
src=/data/www/
des1="web1"
user1="www1"
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib \
${src} \
| while read file
do
rsync -vzrtopg --delete --progress ${src} ${user1}@${dst_ip}::${des1} --password-file=/etc/rsyncd.pwd &&
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
#echo "---------------------------------------------------------------------------"
done
源机器主要是一个
inotify
的监控脚本,这个脚本如同一个守护进程,会一直运行监控着相应目录的增删减动作,一经发现,立即运行
rsync
进行同步(推送),不要担心源目录下的文件权限与客户机的不一致,只要源机能读取到,推送过去的文件或目录,客户机都会根据
rsyncd.conf
文件配置的
uid,gid
进行重置。
另一例子:
cat rsync.sh
#!/bin/bash
host1=10.12.36.69
src=/data/www/
des1="ftpdata"
user1="ftprsync"
rsync -vzrtopg --delete --progress ${src} ${user1}@${host1}::${des1} --password-file=/etc/www1.pwd
注:rsync可以在远程服务器自动建一个一级目录,如:
rsync -vzar --partial --timeout=15 --stats --progress $i/tmp/3.txt $rsync_user@$dst_ip::${rsync_module}/tmp/ --password-file=$rsync_pass
中{rsync_module}/tmp/的tmp目录可以在远程没有,同步时可以自动建立.但再多一级不可以了,如/tmp/tmp/就会出错.