Linux下Rsync+Inotify 配置全解

以前一直用unison进行双向同步,今天突然想用一个源对所有其它服务器进行同步,并保持高度一致,自然就想到了rsync+inotify,google搜索一通,发现大家发的技术文档大致都差不多,不动手不知道,一动手还问题不少,现把步骤写下来,以便其它同学少走歪路,也提醒自已。

Rsync+inotify的工作原理是,源机器上的inotify实时监控主机上的某目录,如果发现有增删改的操作就把相应文件使用rsync推送到相应客户机上。

1 、安装rsync,inotify


Yum install rsync  inotify-tools –y

2、配置需要同步的机器,即被推送接受同步文件的机器(客户机)
uid = std01
gid = std01
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
[web]
path = /data/www/
ignore errors
read only = no
list = no
hosts allow = 192.168.42.0/255.255.255.0
auth users = www
secrets file = /etc/www.pwd

这里有个重要的问题大家都没有提,就是uid,gid,这里用户和组必须与path目录的用户与组保持一致,否则会出错各种权限错误。源机器推送过来的各种权限文件都会被改为uid,gid指定的用户和组。

其次是认证文件,echo “www1:123” >  /etc/www1.pwd,这里用户名与密码要都写进去。并改

权限,chmod 600 /etc/www1.pwd

3、源机器配置(服务端)


#!/bin/bash
host1=192.168.42.8
src=/data/www/
des1="web"
user1="www"
/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}@${host1}::${des1} --password-file=/etc/www1.pwd &&
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
#echo "---------------------------------------------------------------------------"
done

源机器主要是一个inotify的监控脚本,这个脚本如同一个守护进程,会一直运行监控着相应目录的增删减动作,一经发现,立即运行rsync进行同步(推送),不要担心源目录下的文件权限与客户机的不一致,只要源机能读取到,推送过去的文件或目录,客户机都会根据rsyncd.conf文件配置的uid,gid进行重置。

====================================================================================================

【附录】rsync+inotify一键安装脚本

一、环境描述
server:192.168.25.200
client:192.168.25.255,192.168.25.202
同步目录:/data/html

server端有任何数据更新,即将同步到client端,实时同步

二、采用方法:rsync+inotify

三、关于inotify原理(略)

四、操作过程


4.1服务端脚本
#!/bin/bash
yum install rsync -y
mkdir -p /data/html #如果要同步的不是此目录,可以根据实际需要添加目录
#wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
#cponfigure inotify
cat >>/home/rsync.sh < #!/bin/bash
src=/data/html/ #同步的源目录
des=www
host="192.168.25.255,192.168.25.202"
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib \$src | while read files
do
for hostip in \$host
do
rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets \$src root@\$hostip::\$des
done
echo "\${files} was rsynced" >>/tmp/rsync.log 2>&1
done
EOF
#confiugre secret
cat >> /etc/rsyncd.secrets < 123456
root:123456
EOF
chmod 0600 /etc/rsyncd.secrets
#setting running onboot
echo "nohup /bin/bash /home/rsync.sh &" >> /etc/rc.local
nohup /bin/bash /home/rsync.sh &


4.2 客户端脚本
#!/bin/bash
yum install rsync -y
mkdir -p /data/html
#configure rsyncd daemon
cat >> /etc/rsyncd.conf < uid = root
gid = root
use chroot = no
max connections = 5
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[www]
path=/data/html/
comment = update
ignore errors
read only = no
list = no
hosts allow = 192.168.25.0/255
auth users = root
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
EOF
#configure secret
cat >> /etc/rsyncd.secrets < 123456
root:123456
EOF
chmod 0600 /etc/rsyncd.secrets
echo "rsync --daemon" >> /etc/rc.local
rsync --daemon


五、测试过程。
略过测试过程,大家可以自己测试同步效果。

另外linux下的四种web数据实时同步更新资讯详见:http://blog.csdn.net/enweitech/article/details/17755563

源机器主要是一个inotify的监控脚本,这个脚本如同一个守护进程,会一直运行监控着相应目录的增删减动作,一经发现,立即运行rsync进行同步(推送),不要担心源目录下的文件权限与客户机的不一致,只要源机能读取到,推送过去的文件或目录,客户机都会根据rsyncd.conf文件配置的uid,gid进行重置。

你可能感兴趣的:(服务器架构,操作系统)