inotify+rsync实现服务器文件实时同步

说明:
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统 中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样 的一个第三方软件。
rsync 是Unix/Linux系统中一款优秀高效的镜像同步和远程数据备份工具,它可以把本地文件拷贝到远程主机,或从远程主机拷贝文件到本地,也可以在本地的两个目录之间进行拷贝,但不支持两个远程主机之间的互相拷贝。
因此通过inotify+rsync可以实现服务器间文件的实时同步。

实现:
将192.168.1.10上的/data/www目录的文件同步复制到192.168.1.20上的/data/bakwww目录中。
rsync-inotify
主服务器上安装rsync+inotify       备服务器rsync以daemon模式运行
跑inotify同步脚本                               最好有个公网IP

主服务器配置 (安装rsync和inotify)
安装rsync (rsync在主服务器上不需要配置文件)
wget https://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync
./configure –prefix=/usr/local/rsync
make && make install

建立密码认证文件
echo “123456” > /usr/local/rsync/rsync.pas
chmod 600 /usr/local/rsync/rsync.pas

安装inotify
wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure –prefix=/usr/local/inotify
make && make install

创建启动脚本
vim /usr/local/inotify/rsync.sh

内容如下:
#!/bin/bash
host_1=192.168.1.20
src=/data/www
dst=web
user=root
/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ -e modify,delete,create,attrib $src | while read file
do
rsync -avzP –delete –password-file=/usr/local/rsync/rsync.pas $src $user@$host_1::$dst > /dev/null
echo “${file} was rsynced”
done
exit 0

启动rsync.sh同步脚本
1./usr/local/inotify/rsync.sh &

备份服务器的配置

安装rsync

wget https://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync
./configure –prefix=/usr/local/rsync
make && make install

建立密码文件

echo “root:123456” > /usr/local/rsync/rsync.pas
2.# chmod 600 /usr/local/rsync/rsync.pas

建立配置文件
1.# vim /usr/local/rsync/rsync.conf

内容如下:
uid = root
gid = root
use chroot = no
max connections = 3
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[web]
path = /data/bakwww
ignore errors
read only = no
list = no
auth users = webuser
secrets file = /usr/local/rsync/rsync.pas

启动rsync
/usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsyncd.conf

添加开机启动rsync守护进程
echo -ne “/usr/local/rsync/bin/rsync –daemon –config=/usr/local/rsync/rsyncd.conf” >> /etc/rc.local

附录:
1.在使用过程中, 发现rsync修改全局配置(配置文件中的全局变量), 是需要重新启动rsync进程的, 而修改某个指定Modual(如web)属性配置的时候, 则不需要重新启动rsync进程而即刻生效。  当某个变量名在全局或者局部变量中都存在, 对该模块来说, 局部变量的值会覆盖全局变量的值。

2.inotify 可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
IN_UNMOUNT,宿主文件系统被 umount
IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
注:上面所说的文件也包括目录。
下载地址:https://github.com/rvoicilas/inotify-tools/wiki/

发表评论

邮箱地址不会被公开。 必填项已用*标注