文章都可以转载、引用,标明转载出处即可。

rsync+inotify 实时文件同步

Linux服务 Mr.c 1746℃ 0评论

上一篇博文中写了rsync 的安装和使用《rsync 服务器搭建》,然而在部署inotify 的时候产生了很大的疑惑,这里使用inotify 主要是为了监控指定目录中文件的变化,出现变动则让对应其他服务器文件同步进行更改。这里是应用于负载均衡的web服务器上进行代码实时同步。

这里需要明确以下信息:
1.指定一台web服务器192.168.31.7 作为数据源服务器,但是这台数据源服务器是作为rsync 的客户机,千万不能混淆了。
2.其他的web服务器需要实时同步31.7 服务器上项目文件的变动,这里就假设两台服务器ip 为192.168.31.10和192.168.31.11 ,这两台需要作为rsync 的服务端。
3.这里是设置单向同步,可以理解为31.7分发文件到另外两台,如果双向同步需要再设置

操作流程:

1. 三台centos 6.5 系统服务器,分别安装好rsync 和xinetd
2.服务器10和11分别配置好rsyncd.conf 和passwd
3.服务器7 配置好passwd
4.在服务器7上创建脚本使用 inotify 监听目录变动,目录发生变动则触发同步文件到10和11上 

一:rsync 客户机(服务器10和11)配置:
 1.安装rsync 和xinetd
上一博文写的是编译安装,实际上是无需编译的,centos系统直接yum安装即可,由于rsync 是依赖于xinetd 超级进程的,所以需要安装xinetd ,而编译安装是为了单独控制进程。

[root@web1 rsync]#yum -y install rsync  xinetd
#xinetd 默认不启动rsync ,所以需要设置一下。
vim /etc/xinetd.d/rsync 修改 disable	= no 
[root@web1 rsync]#iptables -I INPUT -p tcp --dport 873 -j ACCEPT   #默认监听端口为873 ,添加到防火墙放行。
[root@web1 rsync]#service xinetd start   #启动xinetd 
[root@web1 rsync]#netstat -tunlp #查看一下873端口是否已经监听

 2:配置rsyncd.conf 和passwd

[root@web1 rsync]#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict mode = no
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[cnyunwei]
path = /home/wwwroot/rsync
comment = web1 files
ignore errors
read only = no
write noly = no
hosts allow = 192.168.31.7
hosts deny = *
list = false
auth users = cnyunwei
secrets file = /etc/rsync.pass
[root@web1 rsync]#vim /etc/rsync.pass
cnyunwei:cnyunwei123

 3. 设置权限为600

[root@web1 ~]# chmod 600 /etc/rsyncd.conf
[root@web1 ~]# chmod 600 /etc/rsync.pass

两台服务器都按照上面的方法进行设置,接下来配置rsync 客户端(服务器31.7)
二:rsync 客户端(服务器31.7)配置
 1.安装rsync 和xinetd
安装都是相同,只是不需要放行端口,其次需要检查一下inotify 是否安装

[root@aliyun ~]# ll /proc/sys/fs/inotify
总用量 0
-rw-r--r-- 1 root root 0 10月  9 08:11 max_queued_events
-rw-r--r-- 1 root root 0 10月  9 08:11 max_user_instances
-rw-r--r-- 1 root root 0 10月  9 08:11 max_user_watches
出现上面三个文件则证明inotify 是正常安装的(centos 除最小化安装外,都安装了inotify)

 2.创建密码文件,客户端的密码文件只需要填写密码,对应上面/etc/rsync.pass 中定义的密码

[root@aliyun ~]# cat /root/rsync.pass 
cnyunwei123

#设置权限为600
[root@aliyun ~]#chmod 600  /root/rsync.pass

 3.测试能否同步

[root@aliyun ~]#rsync -arP --progress --password-file=/root/rsync.pass /home/rsynctest/ susecui@192.168.31.10::cnyunwei
[root@aliyun ~]#rsync -arP --progress --password-file=/root/rsync.pass /home/rsynctest/ susecui@192.168.31.11::cnyunwei
#如果提示需要输入密码,是由于客户机密码文件没有设置为600权限

 4.创建监听脚本:
由于脚本被博客排版后比较难看,所以请到github中查看《rsyn.sh》
脚本是参考的该博文《真正的inotify+rsync实时同步》 采用的是增量同步方式,默认inotify 会遍历扫描定义的目录,如果目录下文件太多会导致服务器负载异常,浪费资源。
三:运行测试
 1.给脚本附加执行权限,然后运行脚本。
 2.向定义好的目录/home/rsynctest 中创建或者修改文件,再查看服务器10和11对应目录下是否已经变更。
 3.如果需要指定排除不同步的目录等设置可以参考该文档:《inotify+rsync使用详解》
 4.可以使用nohup rsyn.sh & 等方法将脚本设置到后台中执行,另外为了防止意外,建议设置一个crontab 定时计划,间隔一定时间进行一次全量同步。

转载请注明:菜鸟运维 » rsync+inotify 实时文件同步

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址