Linux通过sersync+rsync实现数据实时同步
Sersync是基于Inotiry开发的,类似于Inotiry-tools工具
sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。
rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快), 因此,效率很高。
当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。
本教程以centos7为例源服务器ip地址10.88.5.151,目标服务器ip地址10.88.5.122,实现目的:将源服务器/data/www目录下的文件试试同步到目标服务器/data/www目录下
首先在目标服务器10.88.5.122具体操作:
关闭selinux
防火墙通过rsync默认端口873
在目标服务器10.88.5.122上安装rsync服务端,可通过yum来安装或者通过rpm安装(可通过xinetd管理rsync但可能不起作用,因此可不安装xinetd)
安装完rsync后编辑配置文件/etc/rsyncd.conf(如果没有此文件新建即可),文件内容如下:

说明:
uid = root //设置rsync运行权限为root
gid = root
user chroot = no //默认为true,改为No,目录软连接
max connections = 200 //最大连接数
timeout = 600 //超时时间
pid file = /var/run/rsyncd.pid //pid文件位置
lock file = /var/run/rsyncd.lock //支持最大连接的锁文件
log file = /var/log/rsyncd.log //日志文件位置
[backup] //自定义的模块名称
path = /data/gongguan //数据目录路径
ignore errors
read only = no //设置文件为读写权限
list = no //不显示服务端资源列表
hosts allow = 10.88.5.151 //允许数据同步的客户端ip
host deny = 0.0.0.0/0.0.0.0(写不写都行)
auth users = test //执行数据同步的用户名,可设置多个
secrets file = /etc/rsyncd.passwd //用户认证配置文件
创建用户配置文件:
vi /etc/rsync.passwd

test为配置文件中的test用户 密码为自己设置的(需要提前创建好用户)
设置文件权限:
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.passwd
启动rsync:
rsync –daemon –config=/etc/rsyncd.conf
可将其加入到开机启动项/etc/rc.d/rc.local中
注:centos7的开机启动配置文件rc.local没有执行权限,因此需要执行chmod +x /etc/rc.d/rc.local赋予权限
现在在源服务器10.88.5.151上操作:
关闭selinux 防火墙通过873端口
安装rsync(可以通过yum或者rpm方式安装)
创建密码认证文件vi /etc/passwd.txt(文件中的密码就是目标服务器test用户对应的密码)
给文件赋予权限:chmod 600 /etc/passwd.txt

测试从目标服务器拉取数据到源服务器的/home目录 , 执行命令rsync -avz –port=873 –progress test@10.88.5.122::backup –password-file=/etc/passwd.txt /home/ 原则上可测试成功
其中:–progress表示显示传输过程 -a表示以递归的方式传输文件并保留文件属性 -v表示详细输出模式 -z表示对备份的文件在传输过程中进行压缩处理(avz前面只有一个横杠-,其余前面都是两个横杠–)
安装sersync工具,实现实时触发rsync同步:
一、查看服务器是否支持inotiry,执行命令,如果出现下面内容,表示支持inotify

二、 修改inotify默认参数(默认的内核参数值太小)

三、编辑文件vi /etc/sysctl.conf添加如下内容:

修改完成后在执行sysctl -p 让命令实时生效
说明:
- max_queued_events:inotify队列的最大长度,如果值过小,会出现event queue overflow错误,导致监控文件不准确 。
- max_user_watches: 要同步的文件包含多少目录,可以使用find /home –type d | wc –l统计,必须保证max_user_watches的值大于统计结果
- max_user_instances:每个用户创建的inotify实例最大值
四、 解压sersync并将目录转移到/usr/local中(解压后的原名字为GNU-Linux-x86,通过mv改为sersync)
mv sersync /usr/local/
cd /usr/local/sersync
cp confxml.xml confxml.xml.bak 备份原文件


参数说明:
- localpath watch=”/home” //源服务器同步目录
- remote ip=”10.88.5.122” //目标服务器ip
- name =”backup” //目标服务器rsync同步模块名称
- users=”test” //目标服务器rsync同步用户名
- passwordfile=”/etc/passwd.txt” //目标服务器rsync同步的密码在源服务器的存放路径
- failLlog path =”/tmp/rsync_fail_log.sh” //脚本失败日志记录
- start =”true” //每隔600s执行一次全盘同步
五、 设置rsync监控开机自动执行
编辑vi /etc/rc.d/rc.local 在最后添加一行/usr/local/sersync/sersync2 –d –r –o /usr/local/sersync/confxml.xml
注意:centos7的rc.local是没有执行权限的,需要执行如下命令 chmod +x /etc/rc.d/rc.local来赋予权限即可
参数说明:
- -d:删除dst中src没有的文件
- -r: 对子目录以递归的模式处理
- -o: 保持文件的属主信息
5. 此时在源服务器10.88.5.151中的/home文件夹下创建文件或者文件夹后发现可以实时同步到10.88.5.122的/data/gongguan文件夹中,如图




