实时同步服务-rsync+inotify+sersync.
第一章 实时同步服务介绍
1.1 需求背景
1.11,rsync的优点与不足
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足。首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了
1.13, 初识inotify
inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
1.14,sersync
sersync是基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源
1.2 rsync+inotify+sersync原理
1.21 原理图
监控目录数据变化---inotify
将数据进行传输---rsync
将监控和传输进行整合---rersync
1.22 部署流程
1,部署好rsync守护进程服务,实现数据传输
2,部署好inotify服务,实现目录种数据变化监控
3,将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输
第二章 实时同步服务部署
2.1 部署rsync守护进程
第一步,服务端配置操作
第二步,客户端配置操作
过程参照:https://www.cnblogs.com/nsthink-666/p/12780351.html
2.2 部署inotify监控服务
客户端操作:
# 第一步 安装软件
yum install -y inotify-tools
# 第二步 熟悉命令的使用
/usr/bin/inotifywait ---监控目录数据信息变化
/usr/bin/inotifywatch ---对监控的变化信息进行统计
# inotify命令使用方法:
inotifywait [参数] 监控的目录
-m|--monitor //实现一直监控目录的数据变化
-r|--recursive //进行递归监控
-q|--quiet //尽量减少信息的输出
--format <fmt> //指定输出的时间信息格式
-e|--event //指定监控的事件信息
# inotify常用监控命令格式:
ininotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE
常用事件:create创建、delete删除、moved_to移入、close_write修改
# inotify企业应用:防止系统重要文件被破坏,做到实时监控
用inotify进行实时监控一些重要文件:
/etc/passwd /var/spool/cron/root
2.3 部署sersync同步服务
客户端操作:
# 第一步:下载软件包
软件链接:https://github.com/wsgzao/sersync
ps:软件尽量都同意保存在/server/tools目录中
# 第二步:解压软件压缩包,将解压的数据进行保存
[root@nfs01 tools]# unzip sersync_installdir_64bit.zip
[root@nfs01 tools]# tree sersync_installdir_64bit
sersync_installdir_64bit
└── sersync
├── bin --- sersync软件命令目录
│ └── sersync
├── conf --- sersync软件配置目录
│ └── confxml.xml
└── logs --- sersync软件日志目录
[root@nfs01 tools]# mv sersync_installdir_64bit/sersync/ /usr/local/
# 第三步:编写配置文件
vim conf/confxml.xml
1
vim conf/confxml.xml
6 <filter start="false">
7 <exclude expression="(.*)\.svn"></exclude>
8 <exclude expression="(.*)\.gz"></exclude>
9 <exclude expression="^info/*"></exclude>
10 <exclude expression="^static/*"></exclude>
11 </filter>
说明:排除指定数据信息不要进行实时传输同步
12 <inotify>
13 <delete start="true"/>
14 <createFolder start="true"/>
15 <createFile start="false"/>
16 <closeWrite start="true"/>
17 <moveFrom start="true"/>
18 <moveTo start="true"/>
19 <attrib start="false"/>
20 <modify start="false"/>
21 </inotify>
说明:定义inotify程序需要监控的事件
24 <localpath watch="/opt/tongbu"> -指定监控的目录
25 <remote ip="192.168.81.165" name="backup"/> -指定备份服务器地址 ---指定备份服务器模块信息
26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> -指定多个备份服务器信息,实现同步备份到多个备份服务器需求
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-artuz"/>
31 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> -开启用户认证,并定义认证用户和认证密码文件
32 <userDefinedPort start="true" port="874"/><!-- port=874 --> -定义备份服务器的端口
33 <timeout start="false" time=100"/><!-- timeout=100 --> -定义超时时间
34 <ssh start="false" />
35 </rsync>
说明:定义rsync程序需要监控的事件
# 第四步:启动sersync服务程序
[root@nfs01 ~]# PATH="$PATH:/usr/local/sersync/bin"
[root@nfs01 ~]# echo "export PATH=$PATH:/usr/local/sersync/bin" >>/etc/profile
[root@nfs01 ~]# source /etc/profile
[root@nfs01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin
注意加上a+x权限
#参数介绍:
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍,进行同步测试
参数-o: 指定配置文件,默认使用confxml.xml文件
-o /usr/local/sersync/conf/confxml.xml
-o /usr/local/sersync/conf/confxml02.xml
# 启动实时同步服务:
[root@nfs01 ~]# sersync -dro /usr/local/sersync/conf/confxml.xml
# 开机自动启动:
[root@nfs01 ~]# echo "sersync -dro /usr/local/sersync/conf/confxml.xml" >>/etc/rc.local