sersync实时同步数据

inotify:是一个可以实时监控文件和目录的工具
监控文件内容是否发生变化,目录是否发生创建和删除

实时同步:通过监控到文件或目录有变化,就会触发rsync推送数据的动作,起到实时同步的作用

安装inotify——在客户端安装

明确inotify安装在客户端

1
2
3
4
yum -y install inotify-tools 
#查询安装后产生的配置文件
rpm -ql inotify-tools
使用的是ywait 和ywatch

inotify选项和参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载

inotify命令测试

1
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup

脚本实时同步

1
2
3
4
5
6
7
8
9
10
11
## 实时同步:rsync + inotify
[root@web01 ~]# cat bak.sh
#!/bin/bash
export RSYNC_PASSWORD=123
bak_dir=/zls_backup/
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e
create,modify,delete,attrib,close_write $bak_dir|while read line;do
rsync -az --delete $bak_dir rsync_backup@172.16.1.41::zls
done

若发生服务器重启,脚本无法使用,所以还是有缺陷的,就无法实时监控文件或目录是否有变化,所以我们就可以使用Sersync

Sersync+rsync实时同步

1
2
3
4
5
6
7
实时同步的目的:为了保证数据的一致性
所以我们可以使用Sersync+rsync

Inotify 是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。 rsync+inotify 可以实触发实时同步增量备份

sersync 是国人基于 rsync+inotify-tools 开发的工具,不仅保留了优点同时还强化了实时监控,文
件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。sersync项目地址

环境准备——实现3台机器同步

主机名 公网IP 内网IP 作用 应用
backup 10.0.0.41 172.16.1.41 仓库(存储所有备份数据的机器),服务端 rsync的服务端
web01 10.0.0.7 172.16.1.7 需要备份数据的机器,客户端 rsync的客户端、sersync、inotify
web02 10.0.0.8 172.16.1.8 需要备份数据的机器,客户端 rsync的客户端、sersync、inotify

安装rsync服务端并配置(backup)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1、安装rsync服务端
yum -y install rsync
2、配置rsync服务端 (作实时备份,两边的目录要一致)
vim /etc/rsyncd.conf
删除里面的全部内容,添加如下内容
[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################重点是下面这几行
#作数据备份模块
[backup]
comment = welcome to backup!
path = /backup
#作实时同步的模块
[data_web01]
path = /data_web01
[data_web02]
path = /data_web02

3、创建配置文件里面的目录
mkdir /data_web01
mkdir /data_web02

4、创建用户
useradd rsync -s /sbin/nologin -M

5、授权目录
chown rsync.rsync /data_web01
chown rsync.rsync /data_web02

6、创建密码文件
echo 'rsync_backup:123' >/etc/rsync.passwd
chmod 600 /etc/rsync.passwd

7、启动服务,开机自启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

安装配置sersync客户端(web01、web02)

Web01

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1、下载sersync安装包,下载依赖包rsync、inotify-tools
yum -y install inotify-tools
wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz
2、创建安装目录
mkdir /app
cd /
tar xf app/sersync2.5.4_64bit_binary_stable_final.tar.gz -C app/
修改程序目录名,习惯要给程序做软连接
[root@web01 app]# mv /app/GNU-Linux-x86 /app/sersync-2.5.4
[root@web01 app]# ln -s sersync2.5.4 sersync
测试推送
rsync -az --delete /data_web01 rsync_backup@172.16.1.41::data_web01 --password-file=/etc/rsync.pass
3、修改配置文件
找到inotify 改成true

[root@web01 app]# vim /app/sersync/confxml.xml
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<localpath watch="/data_web01">
<remote ip="172.16.1.41" name="data_web01"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az --delete"/>
<auth start="true" users="rsync_backup"
passwordfile="/etc/rsync.pass"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default
every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>

image-20240916180931786

1
2
3
4
5
6
7
8
9
10
4、创建数据目录data
mkdir /data_web01
5、创建密码文件,授权600
[root@web01 app]# echo '123' > /etc/rsync.pass
[root@web01 app]# chmod 600 /etc/rsync.pass
6、启动服务
[root@web01 app]# /app/sersync/sersync2 -rdo /app/sersync/confxml.xml
再用此命令实现数据同步
cd /data_web01 && rsync -az --delete -R --delete ./ rsync_backup@172.16.1.41::data_web01 --password-file=/etc/rsync.pass
在data创建文件,查看服务端是否同步数据即可

Web02

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
1、下载sersync安装包,下载依赖包rsync、inotify-tools
yum -y install inotify-tools
wget http://test.driverzeng.com/other/sersync2.5.4_64bit_binary_stable_final.tar.gz
2、创建安装目录
mkdir /app
cd /
tar xf app/sersync2.5.4_64bit_binary_stable_final.tar.gz -C app/
修改程序目录名,习惯要给程序做软连接
[root@web01 app]# mv /app/GNU-Linux-x86 /app/sersync-2.5.4
[root@nfs app]# cd ~
[root@nfs ~]# ln -s /app/sersync-2.5.4 /app/sersync
创建数据目录,测试推送
mkdir /data2
rsync -az --delete /data2 rsync_backup@172.16.1.41::datd --password-file=/etc/rsync.pass

3、修改配置文件
找到inotify 改成true

[root@web01 app]# vim /app/sersync/confxml.xml
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>

<sersync>
<localpath watch="/data_web02">
<remote ip="172.16.1.41" name="data_web012"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az --delete"/>
<auth start="true" users="rsync_backup"
passwordfile="/etc/rsync.pass"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default
every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>

5、创建密码文件,授权600
[root@web01 app]# echo '123' > /etc/rsync.pass
[root@web01 app]# chmod 600 /etc/rsync.pass
6、启动服务
[root@web01 app]# /app/sersync/sersync2 -rdo /app/sersync/confxml.xml
再用此命令实现数据同步
cd /data_web02 && rsync -az --delete -R --delete ./ rsync_backup@172.16.1.41::data_web02 --password-file=/etc/rsync.pass
在data创建文件,查看服务端是否同步数据即可

image-20240516091401677