综合架构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
 
 
posted @ 2020-03-30 00:37  向云而生(陈云)  阅读(205)  评论(0)    收藏  举报