您的位置:首页 > 运维架构 > Linux

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

2018-01-31 13:22 537 查看
成功的必要条件:关闭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/  root@192.168.2.17::test
然后输入在17上面配置的密码:
test
就可以同步成功了,如果我们不想每次都输入密码可以再创建一个密码文件
vi /etc/rsyncd.pass
输入:
test
我们必须设置为只有自己才能进行读写才可以让它生效
chmod 600 /etc/rsyncd.pass
。然后就可以用这个命令免密码操作了:

rsync -avH –port=873 –progress –delete /backup/ root@192.168.2.17::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[/code] 然后解压进入到目录配置:
./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中。这种方案就配置完成了。不过这种双向模式有个缺点,就是当一台服务器挂掉后,在另一台服务器上删除同步的文件后,等挂掉的服务器启动后,这个文件可能还会同步过来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: