配置rsync+inotify实时同步


Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步)
  • 部署环境 (CentOS 6.6):

把 192.168.198.131 上的/var/www/html目录时实同步到
-> 192.168.198.132 上的/wwwroot目录中
在 131 上执行下面的相关操作,实现实时同步:

  看看是否有 /proc/sys/fs/inotify/目录,以确定内核是否支持inotify

ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Feb  4 10:06 max_queued_events
-rw-r--r-- 1 root root 0 Feb  4 10:06 max_user_instances
-rw-r--r-- 1 root root 0 Feb  4 10:06 max_user_watches


  默认的inotify机制提供了三个调控参数:max_queued_events、max_user_instances、max_user_watches。分别表示监控事件队列、最多监控实例数、每个实例最多监控文件数

tail /proc/sys/fs/inotify/*
==> /proc/sys/fs/inotify/max_queued_events <==
16384
==> /proc/sys/fs/inotify/max_user_instances <==
128
==> /proc/sys/fs/inotify/max_user_watches <==
8192


  当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
例如可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为1048576(建议大于监控目标的总文件数)。

vim /etc/sysctl.conf    #添加如下内容
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p               #使修改后文件生效


  • 安装inotify-tools工具

  使用inotify机制还需要安装inotify-tools,以便提供inotifywait、inotifywatch辅助工具程序,用来监控、汇总改动情况。

yum -y install epel-release
yum install inotify-tools --enablerepo=epel


inotifywait命令

inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/
-e 指定监控事件(create,move,delete,modify,attrib"创建,移动,删除,写入,属性事件"-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息


rsync选项的含义:

-a 存档模式
-h 保存硬连接
-z 压缩文件数据在传输
-t 维护修改时间
--delete 删除于多余文件
  • 配置好基于密钥身份验证的SSH服务

132主机:

useradd adminput ; passwd adminput
chown adminput.adminput /wwwroot


131主机:

ssh-keygen -t rsa
ssh-copy-id adminput@192.168.198.132


  • 编写触发式同步脚本

  为了简单起见,只要检测到变动时执行rsync上行同步操作即可。需要注意的是,当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在则忽略本次同步,或根据rsync进程数量来决定是否同步)

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html/"
RSYNC_CMD="rsync -azH --delete /var/www/html/ adminput@192.168.198.131:/wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
#       echo "${FILE} was rsynced" >>/opt/inotify_rsync.log
    fi
done


chmod +x /opt/inotify.sh
echo "bash /opt/inotify.sh" >> .bash_profile

  注:脚本内容检测rsync进程数,脚本名不要包含rsync,如要包含,调整下检测的rsync进程数


转载请务必保留此出处:http://blog.csdn.net/fgf00/article/details/50732743

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值