配置 inotify+rsync 实时同步
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服务器的环境,以及配置,上一篇博文链接: 1、安装inotify-tools: 解包并安装: [[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,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,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脚本程序。 记得测试下脚本是否有编写错误,可手动执行下脚本,测试是否生效,若有报错信息,可将脚本里的命令复制出来,执行一下,看命令是否有错误,并且注意两台服务器的目录相关权限问题,如是否可读可写等。rsync服务器上的配置项须设置为 read only = no。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |