inotify配合rsync实现实时监控同步备份文件数据

感情迁移 提交于 2020-03-01 03:23:22

实时同步数据服务原理/概念

1)需要部署好inotify服务,实现目录中的数据变化监控
2)需要部署好rsync守护进程服务,实现数据的传输
3)将inotfy服务和rsync服务建立联系,将变化的数据进行实时备份

下面是架构部分,我们现在操作的是备份服务器,作为rsync服务端,需要监控存储服务器上某一个目录的数据变化。

在这里插入图片描述

部署rsync守护进程服务(服务端部署:备份服务器

第一步:安装rsync服务
yum -y install rsync
第二步:编辑配置文件(/etc/rsyncd.conf,如果没有该文件,手动创建)

centos7安装好了rsync之后,就创建好了该配置文件,默认是情况下,打开如下图:
在这里插入图片描述

vim /etc/rsyncd.conf
# 配置参数详解如下:
	uid = rsync               --- 指定管理备份目录的用户
	gid = rsync               --- 指定管理备份目录的用户组
	port = 873		          --- 定义rsync备份服务的网络端口
	#fake super = yes         --- 将rsync用户伪装成一个超级管理员用户,除去备份文件时的报错提示
	use chroot = no           --- 和安全相关的配置
	max connections = 200     --- 最大连接数  (同时只能有200个客户连接备份服务器)
	timeout = 300             --- 超时时间(单位/秒)
	pid file = /var/run/rsyncd.pid  --- rsync进程的pid数据存放的文件 			
	lock file = /var/run/rsync.lock --- 锁文件
	log file = /var/log/rsyncd.log   --- rsync服务的日志文件
	ignore errors			         --- 忽略传输中的简单错误
	read only = false				 --- 指定备份目录可读可写	
	list = false				     --- 使客户端可以通过命令查看服务端可使用的模块信息
	hosts allow = 172.16.1.0/24      --- 允许传输备份数据的主机(白名单)
	hosts deny = 0.0.0.0/32          --- 禁止传输备份数据的主机(黑名单)
	auth users = rsync_backup        --- 指定认证用户
	secrets file = /etc/rsync.password --- 指定认证用户密码文件,用户名称:密码信息
	[backup]						 --- 模块名称
	comment = "backup dir by oldboy"
	path= /backup                    --- 模块中配置参数,指定备份目录

总共的配置项如下:(将部分注释打开,添加一些原本没有的配置项)
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
第三步:创建虚拟用户(管理备份数据的用户)
useradd rsync -M -s /sbin/nologin
-M:不创建家目录
-s:指定该用户的shell为/sbin/nologin  不可登陆
第四步:创建认证密码文件(设置权限为600
echo "配置项中的认证用户:密码" > /etc/rsync.password
chmod 600 /etc/rsync.password
第五步:创建备份目录
mkdir /backup    # 需要和配置文件中模块中的最后一项path的值一致
第六步:启动守护进程服务
systemctl start rsyncd
systemctl enable rsyncd

客户端(存储服务器)操作

第一步:下载rsync软件包
yum -y install rsync
第二步:创建密码文件(设置权限为600)
echo "password" > /etc/rsync.password
第三步:修改权限
chmod 600 /etc/rsync.password
测试是否能够成功传输数据

客户端不需要开启rsync服务

# 按照以上的配置测试命令如下 ip地址部分需要自定义修改
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

在存储服务器上安装inotify监控软件

第一步:安装inotify监控服务软件
yum -y install inotify-tools
第二步:熟悉命令的使用
/usr/bin/inotifywait		---->监控目录数据信息变化
/usr/bin/inotifywatch		---->对监控的变化信息进行统计(用处不大)

inotifywait 方法的语法:
inotifywait [参数] 被监控的目录路径
参数介绍:
	-m|--monitor	--- 实现一直监控目录的数据变化
	-r|--recursive	--- 实现递归监控
	-q|--quiet		--- 尽量减少信息的输出
	--format		--- 指定输出信息的格式
	--timefmt		--- 指定输出的时间格式
	-e|--event		--- 指定监控的事件信息
事件介绍:

/path/ CREATE 【FILE_NAME】 一个文件被创建
/path/ OPEN 【FILE_NAME】 打开创建的文件
/path/ ATTRIB 【FILE_NAME】 修改文件的属性信息
/path/ CLOSE_WRITE,CLOSE 【FILE_NAME】 保存关闭一个文件
/path/ DELETE 【FILE_NAME】 删除文件

因此sed修改文件的原理,内部操作步骤
		/data/ OPEN root_data.txt						--- 打开文件
		/data/ CREATE sedqwUAU5							--- 创建出一个临时文件(放在内存中)
		/data/ OPEN sedqwUAU5							--- 临时文件打开	
		/data/ ACCESS root_data.txt						--- 读取源文件内容
		/data/ MODIFY sedqwUAU5							--- 修改临时文件
		/data/ ATTRIB sedqwUAU5							--- 临时文件属性变化
		/data/ CLOSE_NOWRITE,CLOSE root_data.txt		--- 不编辑直接关闭源文件
		/data/ CLOSE_WRITE,CLOSE sedqwUAU5				--- 写入关闭临时文件
		/data/ MOVED_FROM sedqwUAU5						--- 将临时文件移除
		/data/ MOVED_TO root_data.txt					--- 移入一个新的root_data.txt源文件
inotify监控命令格式:
inotifywait -mrq --timefmt "%F %T" --format "%T %w %f 事件信息:%e" /user_data/ -e 【CREATE】

		参数说明:
				-m:							----->实现持续监控
				-r:						----->实现递归监控
				-q:							----->尽量少的输出信息
				--timefmt					----->"%F %T"  输出时间的格式为年-月-日 时:分:秒
				--format "%T %w %f 事件信息:%e" 
					%T---->引用输出的时间放在输出信息的最前面
					%w---->引用被修改的目录的路径
					%f---->引用被修改的文件名称
					%e---->应用执行的事件名称
				-e							----->指定监控的事件名称
[root@nfs01 user_test]# inotifywait -mrq --timefmt "%F %T" --format "%T %w %f 事件信息:%e" /user_test/ -e CREATE
[root@nfs01 user_test]# touch ./data/d.txt (开启另一个终端在监控的目录下执行创建文件操作,这个时候执行监控命令的一端,打印如下内容:)
			
2020-02-26 20:49:53 /user_test/data/ d.txt 事件信息:CREATE
		
常用的监控事件:CREATE创建、DELETE删除、move_to移入、close_write修改

在存储服务器部署sersync同步服务

第一步:需要下载安装sersync软件github网站下载(https://github.com/wsgzao/sersync)

上传压缩包到linux服务器中
rz -y

第二步:解压软件压缩包

tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz -C [path]

第三步:编写配置文件

vim confxml.xml
第6到11行:
		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>
	 	说明:排除指定数据信息不要备份,这里没有开启,为false,可以根据自己的需求选择
第12行到21行
		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程序需要监控的事件,也可以选择

最重要的配置,建立rsync数据传输连接(必须按照自己的机器配置)

 24         <localpath watch="/data">       -- 监控的目录
 25             <remote ip="172.16.1.41" name="backup"/>  -- rsync数据传输的目标主机ip和模块名
 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命令同步数据的参数
 				# 是否开启认证,默认为false改为true,认证用户,本地的rsync服务密码
 31            <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
 				# 端口号,默认为874,修改为和rsync服务端配置文件中的端口号一致即可
 32            <userDefinedPort start="start" port="873"/><!-- port=874 -->
 33            <timeout start="false" time="100"/><!-- timeout=100 -->
 34            <ssh start="false"/>
 35         </rsync>

第四步:启动sersync服务

进入解压的sersync目录中有两个文件,一个是配置文件,一个是可执行文件 sersync2
./sersync2 -h  --- 查看帮助
		[root@nfs01 GNU-Linux-x86]# ./sersync2 -h
		set the system param
		execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
		execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
		parse the command param
		_______________________________________________________
		参数-d:启用守护进程模式
		参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
		c参数-n: 指定开启守护线程的数量,默认为10个
		参数-o:指定配置文件,默认使用confxml.xml文件,写多个配置监控不同的目录
		参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
		参数-m:单独启用其他模块,使用 -m socket 开启socket模块
		参数-m:单独启用其他模块,使用 -m http 开启http模块
		不加-m参数,则默认执行同步程序
		________________________________________________________________
		
./sersync2 -dro /usr/local/sersync-master/GNU-Linux-x86/confxml.xml
# 执行以上命令,测试是否成功搭建,-r选项会执行一遍推送的操作,即当前监控的目录中的数据会进行同步到备份服务器上
并且只要被监控的目录数据出现变化,就会进行实时同步操作!
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!