综合架构3 - rsync+inotify实时同步
inotify-tools介绍
inotify-tools是一种强大的、细粒度的、异步的文件系统事件监控机制,可以用来监控文件系统的事件。inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。
实时同步实现原理
1)需要部署好rsync守护进程服务,实现数据传输
2)需要部署好inotify服务,实现目录中数据变化监控
3)sersync将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输

实时同步服务部署
一、部署rsync服务
服务端部署:
第一个历程:下载安装软件
[root@backup ~]# rpm -qa rsync
[root@backup ~]#yum -y install rsync
第二个历程:编写配置文件
vim /etc/rsyncd.conf
uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
#fake super = yes --- 将rsync虚拟用户伪装成超级管理用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大连接数
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid -- 记录进程号码信息 1.让程序快速停止进程 2.判断服务是否正在运行
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log -- rsync服务的日志文件,用于排错分析问题
ignore errors --- 忽略传输中的简单错误
read only = false --- 指定备份目录是可读可写
list = false --- 使客户端可以查看服务端的备份目录(默认false,true开启)
hosts allow = 172.16.1.0/24 -- 允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32 -- 禁止传输备份数据的主机(黑名单)
auth users = rsync_backup -- 指定认证用户
secrets file = /etc/rsync.password -- 指定认证用户密码文件 用户名称:密码信息
第三个历程:创建rsync服务的虚拟用户
[root@backup run]# useradd rsync -M -s /sbin/nologin
[root@backup run]# grep rsync /etc/shadow
rsync:!!:18333:0:99999:7:::
[root@backup run]# grep rsync /etc/passwd
rsync:x:1001:1001::/home/rsync:/sbin/nologin
第四个历程:创建备份服务认证密码文件
[root@backup run]# echo "rsync_backup:oldboy123" >>/etc/rsync.password
[root@backup run]# cat /etc/rsync.password
rsync_backup:oldboy123
[root@backup run]# chmod 600 /etc/rsync.password
[root@backup run]# ll /etc/rsync.password
-rw------- 1 root root 23 Mar 12 23:59 /etc/rsync.password 只允许属主、属组查看到文件内容
第五个历程:创建备份目录,并修改属主属组信息
[root@backup ~]# mkdir /backup
[root@backup ~]# chown rsync.rsync /backup
[root@backup backup]# ll /backup/ -d
drwxr-xr-x 2 rsync rsync 6 Mar 13 00:14 /backup/
第六个历程:启动服务
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
客户端部署:
第一个历程:下载安装软件
[root@backup ~]#yum -y install rsync
第二个历程:创建传输时认证的密码文件
[root@nfs01 ~]# echo "oldboy123" >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
第三个历程:进行免交互传输数据方式
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
二、部署inotify监控服务
第一个历程:下载安装软件(安装在备份服务器客户端)
[root@nfs01 /]# yum -y install inotify-tools
第二个历程:熟悉命令使用
/usr/bin/inotifywait --- 监控目录数据信息变化
/usr/bin/inotifywatch --- 对监控的变化信息进行统计
inotifywait命令使用方法:
inotifywait [参数] 监控的目录目录
-m|--monitor --- 实现一直监控目录的数据变化
-r|--recursive --- 进行递归监控
-q|--quiet --- 尽量减少信息的输出
--timefmt <fmt> --- 指定输出信息格式
--timefmt <fmt> --- 指定输出的时间信息格式
-e|--event --- 指定监控的事件信息
[root@nfs01 ~]# inotifywait -m /data
创建文件监控的信息输出详解
[root@nfs01 data]# touch 123
/data/ CREATE,ISDIR cc
/data/ CREATE 123 --- 一个文件被创建
/data/ OPEN 123 --- 打开创建的文件
/data/ ATTRIB 123 --- 修改文件的属性信息
/data/ CLOSE_WRITE,CLOSE 123 --- 保存关闭一个文件
删除文件监控的信息输出详解
[root@nfs01 data]# rm -rf 123
/data/ DELETE 123 --- 删除一个文件
修改文件监控的信息输出详解
[root@nfs01 data]# echo "qwqr" >> chenyun
/data/ OPEN chenyun --- 打开一个文件
/data/ MODIFY chenyun --- 修改文件
/data/ CLOSE_WRITE,CLOSE chenyun --- 保存关闭文件
sed命令修改文件原理
[root@nfs01 data]# sed -i 's#qw#wq#g' /data/chenyun
/data/ OPEN chenyun --- 打开文件
/data/ CREATE sedclwz7S --- 创建一个临时文件(内存)
/data/ OPEN sedclwz7S --- 打开临时文件
/data/ ACCESS chenyun --- 读取源文件内容
/data/ MODIFY sedclwz7S --- 修改临时文件
/data/ ATTRIB sedclwz7S --- 临时文件属性变化
/data/ CLOSE_NOWRITE,CLOSE chenyun --- 不编辑直接关闭源文件
/data/ CLOSE_WRITE,CLOSE sedclwz7S --- 写入关闭临时文件
/data/ MOVED_FROM sedclwz7S --- 将临时文件移除
/data/ MOVED_TO chenyun --- 移入一个新的chenyun源文件
[root@nfs01 data]# touch ccc
[root@nfs01 ~]# inotifywait -m /data -e CREATE
/data/ CREATE ccc
/data/ CREATE,ISDIR chen
[root@nfs01 data]# touch /data/cy/123.txt
[root@nfs01 ~]# inotifywait -mr /data -e CREATE
/data/cy/ CREATE 123.txt
[root@nfs01 data]# touch /data/chen/txt.txt
[root@nfs01 ~]# inotifywait -mrq /data -e CREATE
/data/chen/ CREATE txt.txt
[root@nfs01 data]# touch chenyun1.txt
[root@nfs01 ~]# inotifywait -mrq --timefmt "%F" --format "%T%w%f" /data -e CREATE
2020-03-28/data/chenyun1.txt
[root@nfs01 ~]# inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE
2020-03-28 /data/ liujuan520.chenyun 事件信息:CREATE
inotify监控命令格式
[root@nfs01 ~]# inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE -e DELETE -e MOVED_TO -e CLOSE_WRITE
2020-03-28 /data/ chen 事件信息:DELETE,ISDIR
2020-03-28 /data/ liujuan520.txt 事件信息:CLOSE_WRITE,CLOSE
主要监控CREATE、DELETE、MOVED_TO、CLOSE_WRITE
企业应用:防止系统重要文件被破坏
三、部署sersync服务
第一个历程:下载安装sersync软件
[root@nfs01 ~]#mdkir /usr/local/src
[root@nfs01 ~]#cd /usr/local/src
[root@nfs01 src]wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
第二个历程:解压sersync
解压sersync压缩包
[root@nfs01 ~]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
第三个历程:创建sersync目录
[root@nfs01 ~]# cd GNU-Linux-x86/
[root@nfs01 GNU-Linux-x86]# mkdir /usr/local/sersync
[root@nfs01 GNU-Linux-x86]# mkdir /usr/local/sersync/conf
[root@nfs01 GNU-Linux-x86]# mkdir /usr/local/sersync/logs
[root@nfs01 GNU-Linux-x86]# mkdir /usr/local/sersync/bin
第四个历程:移动文件到相应目录
[root@nfs01 GNU-Linux-x86]# mv sersync2 /usr/local/sersync/bin/
[root@nfs01 GNU-Linux-x86]# mv /root/GNU-Linux-x86/confxml.xml /usr/local/sersync/conf/
[root@nfs01 local]# tree sersync/
sersync/
├── bin --- sersync软件命令目录
│ └── sersync2
├── conf --- sersync配置文件目录
│ └── confxml.xml
└── logs --- sersync日志文件目录
第五个历程:编写配置文件
[root@nfs01 local]# vim /usr/local/sersync/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程序需要监控的事件
23 <sersync>
24 <localpath watch="/data">
25 <remote ip="172.16.1.41" name="backup"/>
26 <!--<remote ip="192.168.8.39" name="backup"/>-->
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-az"/>
31 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>
第六个历程:配置环境变量
临时配置环境变量
[root@nfs01 local]# export PATH="$PATH:/usr/local/sersync/bin/"
[root@nfs01 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin/
永久配置环境变量
[root@nfs01 data]# vim /etc/profile
#sersync
export PATH=$PATH:/usr/local/sersync/bin
[root@nfs01 data]# source /etc/profile
[root@nfs01 data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin
[root@nfs01 ~]# vim /etc/profile.d/sersync.sh
#!/bin/bash
export PATH="$PATH:/usr/local/sersync/bin"
第七个历程:启动sersync服务程序
[root@nfs01 local]# sersync2 -dro /usr/local/sersync/conf/confxml.xml
sersync 参数
-d 启用守护进程模式
-r 在监控前,将监控目录与远程主机用户rsync命令推送一遍
-o 指定配置文件,默认使用confxml.xml文件
-o /usr/local/sersync/conf/confxml.xml
-o /usr/local/sersync/conf/confxml2.xml
-o /usr/local/sersync/conf/confxml3.xml
设置sersync开机自动启动
[root@nfs01 data]# chmod +x /etc/rc.local
[root@nfs01 data]# chmod +x /etc/rc.d/rc.local
[root@nfs01 ~]# echo "export PATH=$PATH:/usr/local/sersync/bin" >> /etc/rc.local
[root@nfs01 data]# echo "sersync2 -dro /usr/local/sersync/conf/confxml.xml" >>/etc/rc.local
停止sersync服务
[root@nfs01 data]# yum -y install psmisc
[root@nfs01 data]# killall sersync
第八个历程:测试是否同步
要求:删除7天以前的数据,看存储服务器和备份服务器的数据是否一致
[root@nfs01 data]# find /data/ -type f -mtime +7|xargs rm
要求:在存储服务器创建100个文件,看存储服务器的数据是否一致
[root@nfs01 data]# touch nfs{01..100}.txt