rsync+inotify在负载均衡多主机代码同步中的场景应用

应用场景:生成环境中负载均衡,代码分布在多主机上,每次代码更新需要更新多台主机,这样很不方便,考虑到代码文件的大小,这里采用inotify+rsync完全可以满足需求。当然采用nfs或者其他共享存储也是OK的。


原理:inotify用户检测特定文件夹中的文件变化,一旦发生添加,修改,删除等操作,会立即出发rsync将变化同步到设定的主机或者主机组中。


简单的模型图:

rsync+inotify在负载均衡多主机代码同步中的场景应用

这里有一点稍有困惑,这两个软件在源主机和目的主机上该怎么安装配置,谁来充当服务端,谁来充当客户端呢?实际上,正确的理解目的主机为服务端的角色,在这些主机上rsync以进程的方式监听在某个套接字上(默认貌似为873),随时等待源机的同步请求。源机上inotify监控者特定的文件夹,一旦发现文件有变化,立即通过rsync连接目的主机进行传输同步。想明白这一点,一切明了,下面就是配置了。


安装rsync和inotify非常之简单,直接解压tar包,按照下面操作进行即可(注意:源机需要两者同时安装,目的主机只需要安装rcync)

./configure
make
make install

安装完成后rsync默认是没有配置文件的,

手动创建/etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log

[www]
path = /home/web/
read only = no
list = no
auth users = root
secrets file = /etc/rsyncd.pass
hosts allow = *.*.*.*

手动创建/etc/rsyncd.pass

root:123456

启动rsync(这里我在编辑rsync的时候指定了--prefix=/usr/local/rsync)

/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf

至此目的主机即服务端配置完成,多个主机的话做相同配置即可。

源主机配置inotify脚本/bin/backp.sh(这里只设置了一台目的主机)

#!/bin/bash

DESTHOST=*.*.*.*
SRCDIR=/home/web/
DESTHOSTDIR=/home/web/
MODULENAME=www

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib $SRCDIR | while read DATE TIME FILE ACTION
do
    /usr/local/rsync/bin/rsync -avzrtopg --delete --ignore-errors --password-file=/etc/rsyncd.pass $SRCDIR root@${DESTHOST}::$MODULENAME && echo "${FILE} was rsynced" >> /tmp/rsync.log 2>&1
done


源主机配置/etc/rsyncd.pass,和目的主机通信时需要携带,因为两者配置要对应

123456


启动inotify(后台启动,设想后面用supervisor监控启动效果更好)

chmod a+x /bin/backup.sh
/bin/backup.sh &

cd /home/web
touch test.html

此时在目的主机/home/web下会有相同的test.html文件。

你可能感兴趣的:(rsync,inotify)