四.实时同步


01. 课程概念介绍

01. 为什么要用实时同步服务
因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失

02. 实时同步工作原理
a 创建要存储数据的目录
b 利用实时同步的软件监控我们进行备份的数据目录
c 利用rsync服务进行数据推送传输备份

02. 实时同步服务软件部署
a inotify+rsync实现实时同步备份

第一个里程:将inotify软件安装成功
yum install -y inotify-tools

说明:操作系统的yum源文件中,是否存在epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[root@nfs01 ~]# rpm -ql inotify-tools
/usr/bin/inotifywait <--- 实现对数据目录信息变化监控(重点了解的命令)
/usr/bin/inotifywatch <--- 监控数据信息变化,对变化的数据进行统计

[root@nfs01 ~]# cd /proc/sys/fs/inotify/
[root@nfs01 inotify]# ll
总用量 0
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_queued_events
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_user_instances
-rw-r--r-- 1 root root 0 2018-02-25 19:45 max_user_watches
max_user_watches: 设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances: 设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events: 设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384

第二个里程:将rsync守护进程模式部署完毕
rsync服务端部署
a 检查rsync软件是否已经安装
b 编写rsync软件主配置文件
c 创建备份目录管理用户
d 创建备份目录,并进行授权
e 创建认证文件,编写认证用户和密码信息,设置文件权限为600
f 启动rsync守护进程服务

rsync客户端部署
a 检查rsync软件是否已经安装
b 创建认证文件,编写认证用户密码信息即可,设置文件权限为600
c 利用客户端进行数据同步测试


第三个里程:要让inotify软件和rsync软件服务建立连接(shell脚本)
rsync软件应用命令:
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --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 -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" /data <-- 相对完整的命令应用
inotifywait -mrq --timefmt "%F" --format "%T %w%f 事件信息:%e" -e create /data <-- 指定监控什么事件信息

inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data
以上为实现实时同步过程,所需要的重要监控命令

编写脚本:实现inotify与rsync软件结合

按逻辑存储服务器先监控再推送

监控

 inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data

推送

rsync -avz /data/111.txt rsync_backup@172.16.1.41::backup --passwd-file=/etc/rsync.passwor

让监控的值成为变量

这里的斜线 作用是 让后面的命令转到下一行,避免因为命令过长后面的不方便看

因为监控-m 有一直监控的意思所有不要把它加入到循环

删除同步需要使用无差异同步--delete 参数

sync -avz --delete /data/ rsync_backup@......

完善脚本去掉-v  因为是后台执行 所以不需要 输出过程

read 读出来的内容复制给变量line
#!/bin/bash
####################
inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\

while read line

do

rsync -avz /data/  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. 进行反复测试

第四个里程:最终的测试
sh -x intofy.sh

b sersync+rsync实现实时同步备份
第一个里程:下载安装sersync软件
先进行软件下载,把软件包上传到系统中

rz传到linux
解压unzip sersync_installdir_64bit.zip

解压后移出来直接就可以用,相当于Windows的绿色软件
cd sersync_installdir_64bit
移动到第三方软件安装目录mv sersync /usr/local/
tree

第二个里程:编写sersync配置文件
[root@nfs01 sersync]# cd /usr/local/sersync/conf/
[root@nfs01 conf]# ll
总用量 4
-rw-r--r-- 1 root root 2214 2011-10-26 11:54 confxml.xml
6至11行

filter--过滤  false--假 要排除就改为真--true
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--21行

delete--删除  createFolder--创建文件夹  closeWrite--关闭写入  

moveTo--移动到
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参数功能,指定监控的事件信息

23--35行

需要改动红色部分

start=真true
23 <sersync>
24    <localpath watch="/data">
25       <remote ip="172.16.1.41" name="backup01"/>
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"/>
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>
说明:以上内容是数据相关的配置信息,是必须进行修改调整配置

第三个里程:应用sersync软件,实现实时同步
[root@nfs01 conf]# cd /usr/local/sersync/
[root@nfs01 sersync]# cd bin/
[root@nfs01 bin]# ll
总用量 1768

-rw-r--r-- 1 root root 1810128 2011-10-26 14:19 sersync

授予sersync执行权限

./sersync  -h

国人开放的软件 帮助文档是中文的

________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________

sersync重要命令参数:
参数-d: 启用守护进程模式
参数-r: 在监控前,将监控目录与远程主机用rsync命令推送一遍(测试)
参数-n: 指定开启守护线程的数量,默认为10个
参数-o: 指定配置文件,默认使用confxml.xml文件

./sersync -dro /usr/local/sersync/conf/confxml.xml

执行后的部分内容 命令都执行了哪些

默认加了"--delete"

 

------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data && rsync -az -R --delete ./ rsync_backup@172.168.16.41::backup01 --password-file=/etc/rsync.password >/dev/null 2>&1
[root@nfs01 bin]# run the sersync:
watch path is: /data

 


03. 实时同步软件概念介绍
inotify软件
Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,
加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,
利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,
而inotify-tools正是实施这样监控的软件
软件参考链接:https://github.com/rvoicilas/inotify-tools/wiki

sersync软件
Sersync项目利用inotify与rsync技术实现对服务器数据实时同步的解决方案,
其中inotify用于监控sersync所在服务器上文件系统的事件变化,
rsync是目前广泛使用的本地及异地数据同步工具,
其优点是只对变化的目录数据操作,甚至是一个文件不同的部分进行同步,
所以其优势大大超过使用挂接文件系统或scp等方式进行镜像同步。
软件参考链接:https://github.com/wsgzao/sersync

 

posted @ 2018-04-24 22:28  寂静深林丶  阅读(360)  评论(0编辑  收藏  举报