rsync+sersync实现数据实时同步

参考:

https://www.cnblogs.com/subsir/articles/2565373.html  # Rsync命令参数详解

https://blog.csdn.net/tmchongye/article/details/68956808  # Rsync+Sersync实时同步

https://blog.csdn.net/z13615480737/article/details/80985157 # linux centos7 rsync+sersync实现数据实时同步

关于rsync

rsync用于同步文件

关于sersync

- sersync是基于inotify开发的,类似于Inotify-tools的工具

- sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

总结:当数据量很大(几百G甚至1T以上)、文件很多时,建议使用rsync+sersync。

实战布署

环境:centos7.6

主服务器定义:文件变动在这个服务器上发生

从服务器定义:从主服务器上同步文件,或接收主服务器推送来的文件

架构:

主服务器安装sersync用来监听目录变化,触发推送

主服务器安装rsync用来向从服务器推送文件

从服务器安装rsync并启动rsync服务用来接收主服务器推送来的文件

step1:在主服务器从服务器上分别安装rsync服务

安装

yum install rsync

创建配置文件rsyncd.conf

vim /etc/rsyncd.conf

写入以下内容:

log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建

pidfile = /var/run/rsyncd.pid  #pid文件的存放位置

lock file = /var/run/rsync.lock  #支持max connections参数的锁文件

motd file = /etc/rsyncd.Motd  #rsync启动时欢迎信息页面文件位置(文件内容自定义)

secrets file = /etc/rsync.pass  #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件

[rsync_test]   #建立一个备份名,备份服务器通过该名称指定具体的备份位置,可自定义

path = /data/rsync_test/ #rsync服务端数据目录路径

comment = rsync_test #模块名称通常与与[rsync_test]名称相同

uid = root #设置rsync运行权限为root,注意,如果不为root的话会有写权限的问题:rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1650) [generator=3.1.2]

gid = root #设置rsync运行权限为root

port=873  #默认端口

read only = no  #设置rsync服务端文件为读写权限

list = no #不显示rsync服务端资源列表

max connections = 200 #最大连接数

timeout = 600  #设置超时时间

auth users = user_name #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开

hosts allow = 192.168.21.129  #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开

hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开

注:配置文件中,中文注释不能要,不然出出现-failed to create pid file /var/run/rsyncd.pid

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
motd file = /etc/rsyncd.Motd
secrets file = /etc/rsync.pass
[onion_spider]
path = /data/www/spider
uid = root
gid = root
port = 873
read only = no
max connections = 100
timeout = 900
auth users = tmp_01
hosts allow = 0.0.0.0
hosts deny = 192.168.0.1

创建被连接时认证密码文件

vim /etc/rsync.pass

然后写入:

用户名:密码  #格式:帐号:密码 (每行一组,帐号和密码用:号分开)

chmod 600 /etc/rsyncd.conf  #设置文件所有者读取、写入权限

chmod 600 /etc/rsync.pass  #设置文件所有者读取、写入权限

创建主动连接认证密码文件

vim /etc/rsync.password  #编辑文件,添加密码

chmod 600 /etc/rsync.password  #设置文件权限,只设置文件所有者具有读取、写入权限即可

step2:了解rsync的使用

启动rsync

开启tcp 873端口(rsync默认端口)

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf  # 启动

killall rsync  # 停止

echo '/usr/bin/rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.local   # 添加rsyncd开机自启动

rsync命令格式

1、将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。

rsync [OPTION]... SRC [USER@]HOST:DEST

如:rsync ~/1.txt root@172.16.195.33:~/

2、将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。

rsync [OPTION]... [USER@]HOST:SRC DEST

如:rsync root@172.16.195.33:~/1.txt ~/

3、从远程rsync服务器同步文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。

rsync [OPTION]... [USER@]HOST::SRC DEST

如:rsync -avzP --progress --delete --password-file=/etc/rsync.password tmp_01@192.168.0.101::rsync_test /data/rsync_test

4、从本地机器推送文件到远程rsync服务器当DEST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www

rsync [OPTION]... SRC [USER@]HOST::DEST

如:rsync -avzP --progress --delete --password-file=/etc/rsync.password /data/rsync_test/aa/a.txt tmp_01@192.168.0.101::rsync_test/aa/

rsync参数说明

-a  使用archive模式,等于-rlptgoD,即保持原有的文件权限

-r  是递归

-l  是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;

-z  传输时压缩;

-P  传输进度;

-v  传输时的进度等信息,和-P有点关系,自己试试。可以看文档;

-e  建立起加密的连接。

-u  只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时

--progress  是指显示出详细的进度情况

--delete  是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致

--password-file=/password/path/file  指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

step3:在主服务器上安装sersync工具,实时触发rsync推送

下载并安装

wget  https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

mkdir /usr/local/sersync

cp GNU-Linux-x86/* /usr/local/sersync/

配置sersync,重点改红色部份

vim /usr/local/sersync/confxml.xml

<localpath watch="/data/rsync_test">

   <remote ip="192.168.0.101" name="rsync_test"/>

<!--<remote ip="192.168.8.39" name="tongbu"/>-->

<!--<remote ip="192.168.8.40" name="tongbu"/>-->

</localpath>

<rsync>

<commonParams params="-artuz"/>

   <auth start="true" users="tmp_01" passwordfile="/etc/rsync.password"/>

<userDefinedPort start="false" port="874"/><!-- port=874 -->

<timeout start="false" time="100"/><!-- timeout=100 -->

<ssh start="false"/>

</rsync>

启动

/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml

设置sersync开机自动启动

/etc/rc.d/rc.local  # 在最后添加一行执行命令

echo '/usr/local/sersync/sersync2 -d -r -o  /usr/local/sersync/confxml.xml' >> /etc/rc.local

补充: 多实例情况

 1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)

 2、根据不同的需求同步对应的实例文件

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml 

常见问题

问题1

rsync: failed to connect to 192.168.0.98 (192.168.0.98): Connection timed out (110)

rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]

解决方法

防火墙问题,关闭防火墙或允许rsync端口,阿里云服务器注意看下安全组

注:重要别忘记看日志


发表评论

我不怕遇到练习过10000种腿法的对手,但害怕遇到只将一种腿法练习10000次的强敌。 —李小龙