centos下使用rsync+inotify同步文件,简单明了

这里的配置是采取单向同步,采取 主web机 向 从web机 推送代码,如要双向同步,请自行配置
安装配置 rsync (所有服务器都需安装)

服务器:host1、host2 ···

yum install rsync -y

编辑 rsyncd.conf 配置文件,如果没有则创建一个,host1可以不配置此文件

vim /etc/rsyncd.conf

#rsync通用配置文件,配置的注释不要写在配置后面,否则会有问题

#文件同步后,用户组变为www
uid = www
gid = www
use chroot = 0
#允许ip访问设置,可根据实际需要进行配置
# hosts allow = 192.168.0.1/255.255.255.0 198.162.145.1
hosts allow = *
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b

#方括号中为模块声明
[pic]    
#指定当前模块在rsync服务器上的同步路径,该参数是必须指定的
path = /srv/b2c/public
#注释、说明
comment = pic 
ignore errors
#是否允许客户端上传文件
read only = no
list = yes
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块,如果已设置好公钥连接,下面两项配置可注释
#auth users = www
#保存密码和用户名文件,需要自己生成
#secrets file = /etc/rsyncd.passwd

vim /etc/rsyncd.passwd

#host2文件内容 用户名:密码 多个用户名密码则添加多行

www:123456

#host1文件内容只需要填写host1的密码

123456

#修改密码文件权限为600
chmod 600 /etc/rsyncd.passwd

#host2启动 rsync 服务并设置开机自启

#以守护进程方式启动rsync服务
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

#添加开机自启动
echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

#验证文件是否能够同步

rsync -avzrtpog --delete --progress /data/httpd/ www@host2::pic  --password-file=/etc/rsyncd.passwd(若已配置公钥登录,此password-file参数可以忽略)
安装配置 inotify (只在host1安装)

yum install inotify-tools

配置rsync.sh同步监控脚本

vim /root/rsync.sh

#!/bin/bash
src=/data/httpd/
des=host2
user=www
#多个ip就用空格间断,每个IP用双引号包起来
host="host2"
/usr/bin/inotifywait -mrq --exclude=public/images --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
do
    for hostip in $host
    do
        rsync -avzrtpog --delete --progress --exclude=public/images ${src} ${user}@${hostip}::${des}  --password-file=/etc/rsyncd.passwd
        echo "${file}" >> /tmp/rsync.log 2>&1
    done
done
chmod +x /root/rsync.sh

#运行rsync.sh同步监控脚本和配置守护进程
nohup sh /root/rsync.sh > /dev/null &

#开机自启
echo "nohup sh /root/rsync.sh > /dev/null &" >> /etc/rc.local

#如果inotify报错upper limit on inotify watches reached
vim /etc/sysctl.conf

#增加
fs.inotify.max_user_watches=8192000
#防止句柄数过多报错

#使配置生效
sysctl -p

评论

评论正在提交中...请稍后
评论提交成功...