centos6.5中搭建rsync实时文件同步

成功的必要条件:关闭selinux、开启873端口。
今天部署一下两台服务器的文件同步,ip分别是192.168.2.16和192.168.2.17。想搭建称双向实时同步,先使用rsync+Inotify-tools来实现,它的默认端口是873,我们需要再防火墙中配置一下,如果需要同步的服务器开启selinux,会同步不过去,我们先关闭一下setenforce 0
先都安装rsync,一般centos中会自带rsync,如果没有yum安装一下:yum -y install rsync 再安装一下管理工具:yum -y install xinetd,启动命令为:/etc/init.d/xinetd start 重启为:/etc/init.d/xinetd restart。再设置一下rsync的开机自启动:vi /etc/xinetd.d/rsync 改变其中的disable为disable = no 保存退出。然后需要创建一下rsync的配置文件,vi /etc/rsyncd.conf :

port = 873                               #运行时占用的端口
uid = root                               #以什么用户运行
gid = root                       
use chroot = no                          #默认为yes,修改为no,增加对目录文件软连接的备份
read only = no                           #设置rsync服务端文件为读写权限
hosts allow=192.168.2.17                 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny=*                             #禁止进行连接数据同步的ip
max connections = 10                     #最大连接数
motd file = /etc/rsyncd.motd             #rsync启动时欢迎信息页面文件位置(文件内容自定义)
lock file=/var/run/rsyncd.lock           #支持max connections参数的锁文件
log file=/var/log/rsyncd.log             #rsync的日志路径
pid file = /var/run/rsyncd.pid 
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300                            #超时时间

[test]                                  #模块名称可以设置多个
list=no                                 #不显示rsync服务端资源列表
comment = test                          #和模块名称相同
path = /backup                          #通步过来的数据路径
ignore errors
auth users = root                       #连接时需要的用户名
secrets file = /etc/rsyncd.secrets      #设置一下认证用户名和密码

然后创建一下上面配置的认证密码文件vi /etc/rsyncd.secrets :输入root:test 然后chmod 600 /etc/rsyncd.secrets两台服务器都安装好后,可以输入命令测试一下,在16的/backup目录下创建几个文件,然后输入命令:rsync -avH --port=873 --progress --delete /backup/ [email protected]::test 然后输入在17上面配置的密码:test 就可以同步成功了,如果我们不想每次都输入密码可以再创建一个密码文件vi /etc/rsyncd.pass 输入: test 我们必须设置为只有自己才能进行读写才可以让它生效chmod 600 /etc/rsyncd.pass。然后就可以用这个命令免密码操作了:
rsync -avH --port=873 --progress --delete /backup/ [email protected]::test --password-file=/etc/rsyncd.pass

这样就可以同步了,但是我们需要进行实时同步,所以还要安装一个工具:Inotify-tools,先查看一下内核支持不支持:ll /proc/sys/fs/inotify

-rw-r--r-- 1 root root 0 1月  31 12:11 max_queued_events      #inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确    查看具体数值命令sysctl -a | grep max_queued_events 
-rw-r--r-- 1 root root 0 1月  31 12:11 max_user_instances     #要同步的文件包含多少目录,可以用命令来统计find /backup -type d | wc -l                        查看具体数值命令sysctl -a | grep max_user_watches
-rw-r--r-- 1 root root 0 1月  31 12:11 max_user_watches       #每个用户创建inotify实例最大值                                                               查看具体数值命令sysctl -a | grep max_user_instances

需要修改上面参数的话:

sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"

然后 vi /etc/sysctl.conf 添加以下代码保存退出

fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535

好,开始下载安装包: wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 然后解压进入到目录配置:./configure --prefix=/usr/local/inotify 再进行安装:make&&make install
安装好就需要编辑一个后台运行脚本来进行数据监测了: vi /usr/local/inotify/bin/rsync.sh

#!/bin/sh
srcdir=/backup/
dstdir=test
excludedir=/backup/
rsyncuser=root
rsyncpassdir=/etc/rsyncd.pass
dstip="192.168.2.17"
for ip in $dstip
do
rsync -avH --port=873 --progress --delete  --exclude-from=$excludedir  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
done
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |  while read file
do
for ip in $dstip
do
rsync -avH --port=873 --progress --delete  --exclude-from=$excludedir  $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
echo "  ${file} was rsynced" >> /var/log/rsync.log 2>&1
done
done

然后赋予执行权限,执行:/usr/local/inotify/bin/rsync.sh & ,j将这条命令写入rc.local中。这种方案就配置完成了。不过这种双向模式有个缺点,就是当一台服务器挂掉后,在另一台服务器上删除同步的文件后,等挂掉的服务器启动后,这个文件可能还会同步过来。

猜你喜欢

转载自www.cnblogs.com/itchenshuai/p/9316208.html