rsync 虽然可以实现快速备份, 但是什么东西都不可能是十全十美的, 作为计划任务备份, 都是固定时间进行的, 而且延迟明显, 实时性差, 当同步源长期不变化时, 密集的定期任务是不必要的.
实时备份就不同了, 一旦同步源出现变化, 立即启动备份, 只要同步源无变化, 则不执行备份, 但是他只能实现上传功能.
Linux 内核提供了 inotify 通知接口, 用来监控文件系统的各种变化情况, 如文件存取, 删除, 移动, 修改等. 利用这个机制, 可以非常方便地实现文件异动告警, 增量备份, 并针对目录或文件的变化及时作出响应.
将 inotify 机制和 rsync 工具相结合, 可以实现触发式备份 (实时同步)-- 只要原始位置的文档发生变化, 则立即启动增量备份操作, 否则处于静默状态, 这样, 避免了周期性备份时存在的延迟性, 周期过密等问题.
在 Linux 内核中, 默认的 inotify 机制提供了三个调控参数:
- [[email protected] myweb]# cat /proc/sys/fs/inotify/max_queued_events
- 16384 #监控事件队列数
- [[email protected] myweb]# cat /proc/sys/fs/inotify/max_user_instances
- 128 #最多监控实例数
- [[email protected] myweb]# cat /proc/sys/fs/inotify/max_user_watches
- 8192 #每个实例最多监控文件数
当要监控的目录, 文件数量较多或者变化比较频繁时, 建议通过修改 "/etc/sysctl.conf" 加大这三个参数 (标准是 1024 的倍数):
- [[email protected] myweb]# VIM /etc/sysctl.conf
- ..............................
- fs.inotify.max_queued_events = 32768
- fs.inotify.max_user_instances = 1024
- fs.inotify.max_user_watches = 1048576
- [[email protected] myweb]# sysctl -p #更新并查看该参数是否生效
- fs.inotify.max_queued_events = 32768
- fs.inotify.max_user_instances = 1024
- fs.inotify.max_user_watches = 1048576
接下来的操作接着上一篇配置 rsync 服务器的环境, 以及配置, 上一篇博文链接:
https://blog.51cto.com/14227204/2431539
现在所有的操作是基于 server B(192.168.1.2) 这台服务器的:
1, 安装 inotify-tools:
获取源码包:
https://pan.baidu.com/s/1_xSEDdXiRhd9lDOzVTbm4w
提取码: s3rj
解包并安装:
- [[email protected] media]# tar zxf inotify-tools-3.14.tar.gz -C /usr/src
- [[email protected] media]# cd /usr/src/inotify-tools-3.14/
- [[email protected] inotify-tools-3.14]# ./configure && make && make install
2, 安装后即可使用, 现在以监控 server B 上的 / var/www/html 目录:
[[email protected] /]# inotifywait -mrq -e modify,create,move,attrib,delete /var/www/HTML
该命令的具体选项解释如下:
-e: 指定要监控哪些事件;
-m: 表示持续监控;
-r: 表示递归整个目录;
-q: 简化输出信息;
modify: 修改;
create: 创建;
move: 移动;
delete: 删除;
attrib: 属性更改;
现在切换一个终端, 在监控的目录下新建一个 1.HTML 文件, 则该终端的监控命令下就会提示相关信息, 提示如下::
- [[email protected] /]# inotifywait -mrq -e modify,create,move,attrib,delete /var/www/HTML
- /var/www/HTML/ CREATE 1.HTML
- /var/www/HTML/ ATTRIB 1.HTML
3, 现在可以编写一个脚本来实现实时同步:
- [[email protected] /]# VIM /opt/inotify_sync.sh
- #!/bin/bash
- inotify_cmd="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
- rsync_cmd="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/* [email protected]::wwwroot"
- $inotify_cmd | while read DIRECTORY EVENT FILE
- do
- $rsync_cmd
- done
- [[email protected] /]# chmod +x /opt/inotify_sync.sh
- [[email protected] /]# echo '/opt/inotify_sync.sh &'>> /etc/rc.d/rc.local #设置开机自动运行该脚本
- [[email protected] /]#chmod a+x /etc/rc.d/rc.local
- [[email protected] /]#init 6
- [[email protected] /]#pgrep inotify_sync.sh #重启后, 可以使用此命令查看脚本是否在运行, 如果在运行, 会显示其进程号
- 1033
- 1099
验证该脚本是否生效的过程如下:
在本机 server B 上运行 / opt/inotify_rsync.sh 脚本程序.
切换到本机的 / var/www/HTML / 目录, 执行增加, 删除, 修改文件等操作.
查看 server A 服务器中 / var/www/HTML / 目录下的变化情况.
注意事项:
记得测试下脚本是否有编写错误, 可手动执行下脚本, 测试是否生效, 若有报错信息, 可将脚本里的命令复制出来, 执行一下, 看命令是否有错误, 并且注意两台服务器的目录相关权限问题, 如是否可读可写等.
rsync 服务器上的配置项须设置为 read only = no.
来源: http://www.bubuko.com/infodetail-3165688.html