sersync是基于inotify+rsync的大量文件的多服务器自动同步程序
使用 Linux 2.6 内核的 inotify 监控 Linux 文件系统事件,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件,并且支持多线程同步,因此效率非常高
rsync 采用c/s模式,监听端口为 873
前期准备
下载sersync
1 | 谷歌项目地址:(https://code.google.com/archive/p/sersync/) |
上不去google的可以使用百度网盘我的备份包,这里只提供64位版本的:
链接:https://pan.baidu.com/s/1j3H7KBv4y3_DzOWb-rwpMQ
提取码:0g8a
注: 压缩包里面有两个文件confxml.xml和sersync2。前者是sersync配置文件,后者是sersync主程序。
确认当前系统关闭selinux及防火墙,或将873端口加入iptables白名单
注意: 该步骤需要在备份源服务器和目标服务器上都要操作
- 关闭SELINUX
1
2
3
4
5
6[root@rsync ~]# vim /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
[root@rsync ~]# setenforce 0 #立即生效 - 开启防火墙tcp 873端口
1
2
3
4[root@rsync ~]# vim /etc/sysconfig/iptables #编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存退出
[root@rsync ~]# /etc/init.d/iptables restart #最后重启防火墙使配置生效 - 开放873端口 比如阿里云服务器 要到后台设置哦
需求说明
我这里有两台centos8的主机,IP分别是192.168.2.98和192.168.2.248。
我在192.168.2.98安装sersync,主动推送数据到192.168.2.248上。
也就是说 192.168.2.98作为数据备份源,192.168.2.248作为目标机器。
实现过程
目标机器配置
安装rsync
yum install rsync
创建rsync配置文件
vi /etc/rsyncd.conf
增加以下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18uid = root #这里是系统用户 需要有备份目标文件夹操作权限 这个注释后续需要删除
gid = root
use chroot = yes
hosts allow=*
max connections = 5
port = 873
timeout = 900
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
motd file = /etc/rsyncd.motd
[backup]
path = /var/www/backup
comment = Hi
read only = false
list =yes
auth users = rsyncuser
secrets file =/etc/rsync.passwd编辑完成保存退出
具体配置注释见下图在secrets file指定的用户密码文件
vim /etc/rsync.passwd 内容格式:用户名:密码,可以设置多个,每行一个用户名:密码
执行echo "rsyncuser:password" >> /etc/rsync.passwd
把内容追加到rsync.passwd末尾
然后,更改文件的读写权限为600chmod 600 /etc/rsync.passwd
启动rsync
配置完成可使用netstat -antup |grep 873
查看是否有端口873在运行没有的话启动/usr/bin/rsync --daemon
# 以守护进程方式/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
# 加载配置文件rsyncd.conf启动rsync服务
注: 可使用 kill -9
配置rsync开机自启动
直接追加echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
实时监控
进入你要备份的目标路径 键入watch ls -l
可实现实时监控。
数据备份源机器配置
安装rsync
1
2
3[root@rsync ~]# whereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
yum install rsync #如果默认没有rsync,运行此命令进行安装rsync下载sersync到本地解压
1
2
3
4
5
6
7# 我这里将sersync放在了/usr/local/sersync/目录下
cd /usr/local/
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar xzf sersync2.5.4_64bit_binary_stable_final.tar.gz
rm -rf sersync2.5.4_64bit_binary_stable_final.tar.gz
mv GNU-Linux-x86/ sersync
cd sersync创建认证密码文件
密码需和目标服务器配置的一致,且不需要用户名.将该文件的权限也更改为600echo "password" >> /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
修改confxml.xml文件
1
2
3
4
5
6
7
8
9
10......
<sersync>
24 <localpath watch="监控目录路径">
25 <remote ip="rsync目标服务端IP地址" name="模块名"/>
......
<rsync>
30 <commonParams params="-az"/>
31 <auth start="true" users="rsync客户端用户名" passwordfile="rsync客户端密码文件"/>
......
36 <failLog path="指定Sersync日志文件路径" timeToExecute="60"/>......修改权限
chmod +x sersync2
读取指定路径配置文件启动sersync
/usr/local/serync/serync2 -d -r -o /usr/local/sersync/confxml.xml
耐心等待执行完成后进行后续操作。-n 启用线程数量
-d daemon方式启动
-o 指定配置文件
sersync整体同步一次 在sersync目录下运行./sersync2 -r
开启实时同步命令./sersync2 -d
。 一般先运行完整体同步后,再进行该命令操作设置开机启动
echo "/usr/local/sersync/sersync2 -r -d -o /usr/local/sersync/confxml.xml" >> /etc/rc.d/rc.local
执行完成可以测试。添加脚本监控sersync是否正常运行
编辑脚本
vi /usr/local/check_sersync.sh
,添加以下代码#!/bin/bash sersync="/usr/local/serync/serync2" confxml="/usr/local/sersync/confxml.xml" status=$(ps aux |grep 'sersync2'|grep -v 'grep' |wc -l) if [ $status -eq 0 ]; then $sersync -d -r -o $confxml & else exit 0; fi
测试脚本
sh /usr/local/check_sersync.sh
赋予脚本执行权限
chmod +x /usr/local/check_sersync.sh
定义计划任务实现定时备份
echo ‘*/5 * * * * sh /usr/local/check_sersync.sh &’ >> /var/spool/cron/root
rsync参数说明
参考文章
https://blog.whsir.com/post-1097.html
https://blog.csdn.net/chrisjingu/article/details/78317907
https://www.jianshu.com/p/31a67de3f669