rsync+inotify文件实时同步
一个CMS内容发布系统,后端采用负载均衡集群部署方案,由一个负载调度节点、2个服务节点和一个内容发布节点构成,内容发布节点负责将用户发布的数据生成静态页面,同时将静态网页传输至2个服务节点,而负载调度节点负责将用户请求根据负载算法调度到相应的服务节点上,实现用户访问。用户要求在前端访问到的网页数据始终是最新的、一致的。
VMWare环境下使用一台CentOS6.0主机,一台作为内容发布节点,存储网页更新的数据。另外两台CentOS6.0主机作为服务节点,存储的是从内容发布节点同步的数据。负载调度不考虑。如下图所示:

说明如下:
操作系统 :
CentOS 6.5
源服务器:
192.168.66.15
目标服务器:
192.168.66.20 192.168.66.13
目的:
把源服务器上/web/www目录,实时同步到目标服务器的/web1/www以及/web2/www目录下。
操作如下所示:
一,服务节点1配置:
1,关闭SELINUX,关闭防火墙。
vim /etc/selinux/config
SELINUX=disabled
setenforce 0
#立即生效
service iptables stop
# 关闭防火墙
2,安装Rsync服务端软件
yum install rsync xinetd
vi /etc/xinetd.d/rsync
#编辑配置文件,设置开机启动rsync
disable = no
/etc/init.d/xinetd start
#启动(CentOS中是以xinetd来管理Rsync服务的)
3. 创建/etc/rsyncd.conf文件,并编辑(文末链接更加详细)
vim /etc/rsyncd.conf
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web1]
path = /web1/www/
#rsync服务端数据目录路径
comment = web1 file
#模块名称
ignore errors
read only = no
write only = no
hosts allow = 192.168.66.15
#这里就是源服务器端的IP
hosts deny = *
list = false
uid = root
gid = root
auth users = web1user
secrets file = /etc/web1.pass
#用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
4. 建立密码文件即用户认证文件
vim /etc/web1.pass
内容:web1user:123456
5. 修改文件权限
chmod 600 /etc/web1.pass
chmod 600 /etc/rsyncd.conf
6,启动rsync(重启)
service xinetd restart
7,建立同步文件夹
mkdir /web1/www
二,服务节点2配置:
1,关闭SELINUX,关闭防火墙。
vim /etc/selinux/config
SELINUX=disabled
setenforce 0
#立即生效
service iptables stop
# 关闭防火墙
2,安装Rsync服务端软件
yum install rsync xinetd
vi /etc/xinetd.d/rsync
#编辑配置文件,设置开机启动rsync
disable = no
/etc/init.d/xinetd start
#启动(CentOS中是以xinetd来管理Rsync服务的)
3. 创建/etc/rsyncd.conf文件,并编辑(文末链接更加详细)
vim /etc/rsyncd.conf
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web2]
path = /web2/www/
#rsync服务端数据目录路径
comment = web2 file
#模块名称
ignore errors
read only = no
write only = no
hosts allow = 192.168.66.15
#这里就是源服务器端的IP
hosts deny = *
list = false
uid = root
gid = root
auth users = web2user
secrets file = /etc/web2.pass
#用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
4. 建立密码文件即用户认证文件
vim /etc/web2.pass
内容:web2user:123456
5. 修改文件权限
chmod 600 /etc/web2.pass
chmod 600 /etc/rsyncd.conf
6,启动rsync(重启)
service xinetd restart
7,建立同步文件夹
mkdir /web2/www
三,内容发布节点配置:
1,关闭SELINUX,关闭防火墙。
vim /etc/selinux/config
SELINUX=disabled
setenforce 0
#立即生效
service iptables stop
# 关闭防火墙
2,安装Rsync服务端软件
whereis rsync
#查看系统是否已安装rsync,出现下面的提示,说明已经安装
yum install rsync xinetd
vi /etc/xinetd.d/rsync
#编辑配置文件,设置开机启动rsync
disable = no
/etc/init.d/xinetd start
#启动(CentOS中是以xinetd来管理Rsync服务的)
3,安装 inotify-tools(rpm安装)
我们可以去下面这个连接下载最新的yum源,如下:
http://dl.fedoraproject.org/pub/epel/6/x86_64/
下载epel-release-6-8.noarch.rpm软件包并安装,如下:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum –y install inotify-tools
rpm -ql inotify-tools
安装完成后,会产生下面两个命令
[root@localhost test]# ls /usr/bin/inotify*
/usr/bin/inotifywait /usr/bin/inotifywatch
4. 建立认证密码文件
vim /etc/server.pass
内容:123456
5. 修改密码文件权限
chmod 600 /etc/server.pass
6. 创建并编辑脚本文件:/web/www/rsyncinotify.sh
#!/bin/bash
host1=192.168.66.20
host2=192.168.66.13
src=/web/www/
dst1=web1
dst2=web2
user1=web1user
user2=web2user
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
| while read files
do
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$host1::$dst1
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user2@$host2::$dst2
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
done
7. 修改sh文件权限
chmod 755 /web/www/rsyncinotify.sh
至此配置完毕
四,测试:
1. 运行内容发布节点脚本
sh web/www/rsyncinotify.sh
(运行的时候,脚本是处在运行的状态)

2,此时去/web/www目录下新建文件,此时就会自动同步到其他的两台服务器上面。

3,此时查看,脚本已经开始运行了!!!!!如下图,这就是在同步!!!可以去服务器下的目录去查看!

4. 开启服务节点rsync守护进程
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
参考文档:
Linux下Rsync+Inotify-tools实现数据实时同步
rsync+inotify实现实时同步