一、inotify+sersync实时复制应用简介
1、实时复制介绍
利用实时复制方式,实现实时备份重要数据信息。实时复制是企业数据备份最重要的方式,主要用于对用户提交的数据的实时备份。对于用户提交到服务器上的普通文件(压缩包、视频、文档等),可采用inotify+rsync或sersync+rsync实时备份方式;对于数据文件还有较复杂的分布式存储工具自身可以实现将数据同时备份成多份,例如:FastDFS、GlusterFS等;对于提交到数据库中的数据,可使用数据库的主从复制(例如:MySQL、Oracle)方式备份,这是软件自带的实时复制备份方式。
2、实时复制细节实现说明
实时复制软件会监控磁盘文件系统的变化,比如:指定一个/data目录,实时复制软件服务进程会实时监控这个/data目录中数据的变化,即文件系统block与inode信息的变化。
一但/data目录文件发生变化,就会执行sync命令,将变化的数据信息推送到备份服务器相应的备份目录中,从而完成数据的实时备份。
3、实时复制软件介绍
软件服务 依赖程序 部署难点 说明
inotify-tools rsync守护进程服务 复制脚本编写 监控目录数据变化,实时数据复制
sersync rsync守护进程服务 配置文件编写 监控目录数据变化,实时数据复制
4、inotifywait命令参数详细说明
-m(--monitor) 始终保持事件监听状态※
-d(--daemon) 类似-m参数,只是将命令运行在后台
记录触发的事件信息在指定文件中,利用—outfile参数※
定义程序日志使用—syslog参数
-r 递归监控目录数据信息变化
-e 指定监听指定的事件,如果省略,表示所有时间都进行监听※
close_write 文件或目录关闭,在写入模式打开之后关闭的※
create 文件或目录创建在监控的目录中※
delete 文件或目录被删除在监控的目录中※
二、inotify+rsync实时复制项目实践
1、backup rsync服务端部署完成
2、检查Linux系统是否支持inotify实时监控
[root@nfs01 /]# uname -r #<==内核是3.10,支持inotify机制
3.10.0-957.5.1.el7.x86_64
[root@nfs01 /]# ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 root root 0 4月 19 12:27 max_queued_events #<==设置可容纳的事件数量
-rw-r--r-- 1 root root 0 4月 19 09:45 max_user_instances #<==设置每个用户可以运行的进程数
-rw-r--r-- 1 root root 0 4月 19 12:27 max_user_watches #<==设置可以监视的文件数量
#显示以上三个文件证明系统支持inotfiy程序功能
3、inptify-tools安装
[root@nfs01 /]# yum install epel-release -y #<==安装epel源,默认的官方源没有inotify-tools
[root@nfs01 /]# yum install inotify-tools -y #<==下载inotify软件工具
[root@nfs01 /]# rpm -ql inotify-tools|head -2 #<==查看(必须出现以下两个命令)
/usr/bin/inotifywait
/usr/bin/inotifywatch
4、实践测试
xshell中打开两个nsf01窗口,第一个窗口输入如下命令,第二个窗口进入/data目录下创建文件。
5、编写实时监控和复制脚本
#执行的命令和编写的脚本如下:
[root@nfs01 /]# mkdir /server/scripts/ -p
[root@nfs01 /]# cd /server/scripts/
[root@nfs01 /server/scripts]# cat monitor.sh
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
#删除事件发生
[ ! -e "$line" ] && cd /data &&\
rsync -az --delete ./ rsync_backup@172.16.1.41::backup && continue
#处理增改事件
rsync -az --delete $line rsync_backup@172.16.1.41::backup
done
#测试没有问题之后,在nfs01上让脚本在后台运行,并放入/etc/rc.local中
[root@nfs01 /]# /bin/sh /server/scripts/monitor.sh & <==&表示让脚本在后台运行
[1] 45998
[root@nfs01 /]# tail -2 /etc/rc.local
######
/bin/sh /server/scripts/monitor.sh &
6、inotify优化
[root@nfs01 /]# cat /proc/sys/fs/inotify/max_user_watches
50000000
[root@nfs01 /]# cat /proc/sys/fs/inotify/max_queued_events
327679
[root@nfs01 /]# echo "50000000" >/proc/sys/fs/inotify/max_user_watches
[root@nfs01 /]# echo "50000000" >/proc/sys/fs/inotify/max_queued_events
#以上两个参数重启可能会失效,所以放在/etc/rc.local中
[root@nfs01 /]# tail -2 /etc/rc.local
echo "50000000" >/proc/sys/fs/inotify/max_user_watches
echo "50000000" >/proc/sys/fs/inotify/max_queued_events
三、sersync项目实践
1、sersync文件配置
2、启动服务并添加到/etc/rc.local中