1.inotify+rsync实时同步

1.1实时同步介绍

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

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

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

9.inotify+rsync实时同步&&sersync+rsync实时同步_第1张图片

1.2实时同步服务软件部署

第一个里程:将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               <--- 监控数据信息变化,对变化的数据进行统计
为何只有在内核2.6.13以上才可以使用inotify
因为只有在内核版本在2.6.13以上才有以下三个文件,才利于inotify进行监控,没有以下三个文件是无法使用inotify的

[root@nfs01 data]# man proc
/inotify查找相关文件,会找到下面的这个路径,其中让查找inotify(7)
可以
[root@nfs01 data]# man man 查看级别
[root@nfs01 data]# man 7 inotify查看详情

[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 [email protected]::backup --password-file=/etc/rsync.password

inotify软件应用命令:
inotifywait 
-m|--monitor             始终保持事件监听状态
-r                       进行递归监控
-q|--quiet               将无用的输出信息,不进行显示
--timefmt           设定日期的格式
                         man strftime 获取更多时间参数信息
--format            命令执行过程中,输出的信息格式

-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   
以上为实现实时同步过程,所需要的重要监控命令

9.inotify+rsync实时同步&&sersync+rsync实时同步_第2张图片
9.inotify+rsync实时同步&&sersync+rsync实时同步_第3张图片
9.inotify+rsync实时同步&&sersync+rsync实时同步_第4张图片
9.inotify+rsync实时同步&&sersync+rsync实时同步_第5张图片
9.inotify+rsync实时同步&&sersync+rsync实时同步_第6张图片

2.sersync+rsync实时同步

2.1sersync软件

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

2.2环境搭建

第一个里程:下载安装sersync软件
先进行软件下载,把软件包上传到系统中
[root@nfs01 application]# wget  https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs01 application]# mv GNU-Linux-x86 sersync
[root@nfs01 application]# cd sersync
[root@nfs01 sersync]# mkdir conf
[root@nfs01 sersync]# mkdir bin
[root@nfs01 sersync]# mv confxml.xml conf
[root@nfs01 sersync]# mv sersync2 bin/sersync
[root@nfs01 application]# cp -r sersync /usr/local/
[root@nfs01 local]# tree sersync/
sersync/
├── bin
│   └── sersync
└── conf

2 directories, 1 file

第二个里程:编写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     
7         
8         
9         
10         
11     
说明:实现同步数据过滤排除功能

12     
13         
14         
15         
16         
17         
18         
19         
20         
21     
说明:类似于inotify的-e参数功能,指定监控的事件信息

23     
24         
25             
26             
27             
28         
29         
30             
31             
32             
33             
34             
35         
说明:以上内容是数据相关的配置信息,是必须进行修改调整配置

第三个里程:应用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命令参数:
[root@nfs01 bin]# ./sersync -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命令推送一遍
参数-n: 指定开启守护线程的数量,默认为10个

./sersync -dro /usr/local/sersync/conf/confxml.xml
[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml 
[root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml
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
option: -d  run as a daemon
option: -r  rsync all the local files to the remote servers before the sersync work
option: -o  config xml name:  /usr/local/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console 
use rsync password-file :
user is rsync_backup
passwordfile is     /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data && rsync -az -R --delete ./ [email protected]::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
run the sersync: 
watch path is: /data