实时同步服务原理/概念
1)需要部署好rsync守护进程服务,实现数据传输
2)需要部署好inotify服务,实现目录中数据变化监控
3)将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输
实时同步服务软件部署
a inotify+rsyc实现实时同步备份
1、安装inotify软件
yum -y install inotify-tools
[root@Nfs01 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait <-- 实现对数据目录信息变化监控(重点了解)
usr/bin/inotifywatch <-- 监控数据信息变化,对变化的数据进行统计
[root@Nfs01 ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Aug 3 21:44 max_queued_events
-rw-r--r-- 1 root root 0 Aug 3 21:44 max_user_instances
-rw-r--r-- 1 root root 0 Aug 3 21:44 max_user_watches
max_user_watches: 设置inotifywait或inotifywatch命令可以监控的文件数量(单进程)
默认只能监控8192个文件
max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程
max_queued_events: 设置inotify实例时间(event)队列可容纳的时间数量
默认监控时间队列长度为16384
2、将rsync守护进程模式部署完毕
rsync服务端部署
1)检查rsync软件是否安装
2)编写rsync软件主配置文件
3)创建备份目录管理用户
4)创建备份目录,病进行授权
5)创建认证文件,编写认证用户和密码信息,设置文件权限为600
6)启动rsync守护进程服务
rsync客户端部署
1)检查rsync软件是否安装
2)创建认证文件,编写认证用户密码信息即可,设置文件权限为600
3)利用客户端进行数据同步测试
3、要让inotify软件和rsync软件服务建立连接(shell脚本)
rsync软件应用命令:
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
inotify软件应用命令:
inotifywait
-m|--monitor --实现一致监控目录的数据变化
-r --进行递归监控
-q|--quiet --尽量减少信息的输出
--timefmt<fmt> --指定输出的时间格式
man strftime 获取更多时间参数信息
--format<fmt> --指定输出的信息格式
-e --指定监控的事件信息
man inotifywait 查看所有参数说明和所有可以监控的事件信息
总结主要用到的事件信息:
create创建、delete删除、moved_to移入、close_write修改
inotifywait -rmq --timefmt "%F" --format "%T %w%f 事件信息 :%e" /data <--相对完整的命令应用
inotifywait -rmq --timefmt "%F" --format "%T %w%f 事件信息 :%e" -e create /data <-- 指定监控事件信息
inotifywait -rmq --timefmt "%F" --format "%T %w%f 事件信息 :%e" -e create,delete,moved_to,close_write /data
以上为实现实时同步过程,所需要的重要监控命令
编写脚本:实现inotify与rsync软件结合
#!/bin/bash
#实时同步
inotifywait -rmq --format "%T %w%f" -e create,delete,moved_to,close_write /data|\
while read line
do
rsync -avz $line rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
done
shell循环语法总结:
for循环 for xx in 循环条件内容信息;do xxx;done
while循环 while 循环条件; do xx; done <--只要条件满足,就一直循环
while true; do xx ; done <--死循环
运维工作中编写自动化脚本规范:
1.先完成基本功能需求
2.优化完善脚本内容
3.写上一些注释说明信息
4.进行反复测试
b sersync+rsync实现实时同步备份
1、下载安装软件,软件下载链接(https://github.com/wsgzao/sersync)
将他进行解压
将sersync2和confxml.xml文件移动到/usr/local/sersync目录下面
2、编写sersync配置文件
-rwxr-xr-x 1 root root 2214 Oct 26 2011 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的-e参数功能,指定监控的事件信息
24 <localpath watch="/data"> --指定监控目录
25 <remote ip="172.16.1.41" name="nfsbackup"/> --指定备份服务器地址 --指定备份服务器模块信息
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="-az"/> --指定rsync推送命令参数
31 <auth start="false" users="rsync_backup" passwordfile="/etc/rsync.password"/> --指定rsync认证用户 --指定rsync认证文件
32 <userDefinedPort start="true" port="874"/><!-- port=874 --> --使用他指定的端口就必须将start修改为true,默认为false
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>
说明:以上内容是数据相关的配置信息,是必须进行修改
3、启动sersync服务程序
[root@nfs01 sersync]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@nfs01 sersync]# export PATH="$PATH:/usr/local/sersync/"
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍
进行同步测试
参数-o: 指定配置文件,默认使用confxml.xml文件
-o /usr/local/sersync/confxml.xml
-o /usr/local/sersync/confxml02.xml
sersync2 -dro /usr/local/sersync/confxml.xml --启动实时同步服务
killall sersync2 --停止实时同步服务
/etc/rc.local <-- sersync2 -dro /usr/local/sersync/confxml.xml --开机自动启动
实时同步服务概念总结
1)实现实时同步的原理
监控目录数据变化 -- inotify
将数据进行传输 -- rsync
将监控和传输进行整合 --sersync2
2)实现实时同步部署方法
1、部署rsync守护进程
2、部署inotify软件
3、部署sersync软件