rsync+inotify实现文件实时同步

发表时间:2015-03-12  分类:Linux  浏览次数:1584

把之前做的文件同步,做记录写到博客记录下。

至于什么是rsync,inotify。这里不再详说。


源机:192.168.72.129 (web1)

备份机:192.168.72.130 (web2)

同步方向: web1--->web2



由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了 2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持 inotify(服务器系统为Centos5.5 x86_64):

uname -r

2.6.18-194.el5


ls -lsart /proc/sys/fs/inotify/


源机,备份机 都需要安装 rsync.

**************************************************************

1,源机(web1)

Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。


(1)安装inotify-tools

tar zxf inotify-tools-3.14.tar.gz 
cd inotify-tools-3.14
./configure -prefix=/usr/local/inotify-tools
make
make install

(2)建立密码认证文件

echo "123456789" >/etc/rsync.pass
#切记要把文件权限改为600 否则会报错
chmod 600 /etc/rsync.pass

(3)创建rsync复制脚本

此项功能主要是将server端的目录里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的备份目录里,下面是通过shell脚本实现的。

vim /etc/backup.sh

#!/bin/bash
DESTHOST=192.168.72.130 #备份主机
DESTHOSTDIR=/var/www/html/ #备份目录
SRCDIR=/var/www/html/  #备份源目录
MODULESNAME=www #备份模块名,与备份机相对应
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $SRCDIR | while read DATE TIME DIR FILE;
 
do
 
FILECHANGE=${DIR}${FILE}
 
rsync -avzrtopg --delete --ignore-errors --password-file=/etc/rsyncd.pass $SRCDIR root@${DESTHOST}::$MODULESNAME
echo "${FILE} was rsynced" >>/tmp/rsync.log 2>&1 #同步写入日志
 
done

chmod u+x /etc/backup.sh 赋予脚本执行权限

后台执行此shell:

/etc/backup.sh &

或设置开机启动

echo '/etc/backup.sh &' >> /etc/rc.d/rc.local



2,备份机(web2)


(1)建立同步rsync文件

# vim /etc/rsyncd.conf

uid = root #该选项指定当该模块传输文件时守护进程应该具有的uid
gid = root #该选项指定当该模块传输文件时守护进程应该具有的gid
user chroot = no
port=873 #rsync端口号
max connections = 4 #同步最大的链接数
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[www] #模块名,源主机配置会用到
path=/var/www/html/ #需要同步的目录
ignore errors #忽略无关的错误信息
read only = no #是否设置以只读的方式运行
list = no
hosts allow = 192.168.72.129 #允许同步的客户端?如有多个以,逗号分隔
auth users = root #同步时所使用的用户名
secrets file = /etc/rsyncd.pass #该用户的密码保存位置 ,密码可自定义,但源机密码必须相同
exclude =   data1/   ##排除目录


(2)建立密码文件

vim /etc/rsyncd.pass
root:123456 #用户名与密码以:为分隔
chmod 600 /etc/rsyncd.pass #修改权限,修改为600,否则报错

(3)启动rsync

1,启动使rsync生效:

[root@master ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

2,设置为开机启动:

[root@master ~]# echo "/usr/bin/rsync --deamon --config=/etc/rsyncd.conf " >> /etc/rc.d/rc.local

Tip:这里的启动方式比较特殊,如果你要重启,需要kill掉rsync的进程,再重新运行!

3,另外还有另外一种启动rsync的方式,CentOS 默认以 xinetd 方式运行 rsync 服务。rsync 的 xinetd 配置文件在 /etc/xinetd.d/rsync

要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:

# chkconfig rsync on
#  vim /etc/xinetd.d/rsync 
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon  --config=/etc/rsyncd.conf           #这里添加rsync的服务选项!
        log_on_failure  += USERID
}
service xinetd restart #重启xinetd



至此,同步成功了。


参考文章

错误总结:http://www.jb51.net/article/31920.htm

详细文档:http://www.it165.net/admin/html/201403/2629.html






评论列表

  • 网友   2015-03-31 12:02
    很好,欢迎光临济世堂 http://www.jst114.net 指导
  • 1 篇文章 1/1 页

提交评论