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 让命令实时生效

说明:

  1. max_queued_events:inotify队列的最大长度,如果值过小,会出现event queue overflow错误,导致监控文件不准确 。
  2. max_user_watches: 要同步的文件包含多少目录,可以使用find /home –type d | wc –l统计,必须保证max_user_watches的值大于统计结果
  3. 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   备份原文件

参数说明:

  1. localpath watch=”/home” //源服务器同步目录
  2. remote ip=”10.88.5.122” //目标服务器ip
  3. name =”backup” //目标服务器rsync同步模块名称
  4. users=”test”  //目标服务器rsync同步用户名
  5. passwordfile=”/etc/passwd.txt” //目标服务器rsync同步的密码在源服务器的存放路径
  6. failLlog path =”/tmp/rsync_fail_log.sh” //脚本失败日志记录
  7. 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来赋予权限即可

参数说明

  1. -d:删除dst中src没有的文件
  2. -r: 对子目录以递归的模式处理
  3. -o: 保持文件的属主信息

5. 此时在源服务器10.88.5.151中的/home文件夹下创建文件或者文件夹后发现可以实时同步到10.88.5.122的/data/gongguan文件夹中,如图

标签