inotify+rsync配置实例详解

发布时间:2020-04-10编辑:脚本学堂
本文介绍下,在linux中用inotify,rsync实现文件同步的例子,有需要的朋友,参考下吧。

案例描述:
1,后端采用负载均衡集群部署方案,由一个负载调度节点,3个服务节点及一个内容发布节点构成。
2,内容发布节点负责将用户发布的数据生成静态页面,同时将静态页面传输给3个服务节点,而负载调度节点负责将用户请求根据负载算法调度到相应的服务节点上,实现用户访问。
3,用户要求在前端访问到的网页数据始终是最新的。
 
解决方案:
为了保证用户访问到的数据的一致性和实时性,必须保证3个服务节点上的数据与内容发布节点上的数据始终是一致的,这就需要通过文件同步工具来实现,这里可以采用rsync。同时又要保证数据是实时性的,这就需要inotify,即利用inotify监视内容发布节点文件的变化,如果文件有变动,那么就启动rsync,将文件实时同步到3个服务节点上。

系统环境:
centos

linux操作系统的内核版本与节点信息              
 

节点名称 内核版本 用途 IP地址 网页数据路径
Web1 2.6.18 服务节点1  192.168.12.131 /web1/wwwroot
Web2 2.6.18 服务节点2 192.168.12.132 /web2/wwwroot
Web3 2.6.18 服务节点3 192.168.12.133 /web3/wwwroot
server 2.6.18 内容发布节点 192.168.12.134 /web/wwwroot

步骤一、安装rsync与inotify-tools
 
Inotify-tools是用来监控文件系统变化的工具,所以必须安装在内容发布节点上,服务节点上无需安装。另外需要在web1,web2,web3和server节点上安装rsync。
此案中,内容发布节点充当了rsync客户端的角色,而3个服务节点充当了rsync服务端的角色,整个数据同步的过程其实就是一个从客户端向服务器端发送数据的过程。

步骤二、在3个服务节点上配置rsync
 
参考配置如下:
 
Web1节点的rsyncd.conf配置如下:
 

复制代码 代码示例:
;uid = nobody
;gid = nobody
;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/wwwroot/
;comment = web1 file
;ignore errors
;read only = no
;write only = no
;hosts allow = 192.168.12.134
;hosts deny = *
;list = false
;uid = root
;gid = root
;auth users = web1user
;secrets file = /etc/web1.pass
 

 
Web2节点和web3节点的配置类似,做相应改动即可。
 
在配置完3台服务节点的rsync.conf文件后,一次启动rsync守护进程。并将rsync服务加入到自启动文件中。
 

# echo “/usr/local/bin/rsync --daemon” >>/etc/rc.local
 

 
步骤三、配置内容发布节点
配置内容发布节点的主要工作是将生成的静态网页实时同步到集群中3个服务节点上,这个过程可以通过一个shell/ target=_blank class=infotextkey>shell脚本来完成。
 
脚本内容如下:
 

复制代码 代码示例:
#!/bin/bash
;host1=192.168.12.231
;host2=192.168.12.232
;host3=192.168.12.233
;src=/web/wwwroot/
;dst1=web1
;dst2=web2
;dst3=web3
;user1=web1user
;user2=web2user
;user3=web3user
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y  %H:%M'  --format ' %T  %w%f%e'
-e modify,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
/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user3@$host3::$dst3
echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
done
 

 
注:
--timefmt  指定时间的输出格式
--format   指定变化文件的详细信息。
 
特殊情况:
向inotify监控的目录中写入一个很大的文件,当写入这个大文件需要一段时间,inotify会持续不断的输出该文件被更新的信息,这样就会持续不断的触发rsync执行同步操作,占用大量的资源。
针对这种情况,最理想的做法是等待文件写完后再触发rsync同步。可以修改inotify的监控事件,即“-e close_write,delete,create,attrib”.
给脚本加执行权限,并放到后台执行:
 

#chmod 755 /web/wwwroot/inotifyrsync.sh
#//web/wwwroot/inotifysync.sh &

并将脚本加入系统自启动文件中。
 

#echo "/web/wwwroot/inotifyrsync.sh  &" >>/etc/rc.local

步骤四、测试rsync+inotify实时同步功能。

您可能感兴趣的文章:
rsync与inotify实现数据同步的实例分享
单向实时同步文件rsync+inotify-tools的配置教程
rsync+inotify 文件实时同步的配置详解
rsync+inotify 文件同步配置实例
inotify-tools+rsync实时同步文件的配置方法
使用rsync与inotify实现网站程序的主从同步
Inotify自动监控文件并同步到服务器的shell脚本
使用rsync与inotify实时同步备份数据
使用inotify+csync2实现文件的双向同步
使用inotifywait实现目录监控