实时同步数据服务原理/概念
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选项会执行一遍推送的操作,即当前监控的目录中的数据会进行同步到备份服务器上
并且只要被监控的目录数据出现变化,就会进行实时同步操作!
来源:CSDN
作者:yang_x_b
链接:https://blog.csdn.net/yang_x_b/article/details/104569261