34 inotify安装并与rsync集成实现数据实时同步更新
1 2 | [https://www.cnblogs.com/ilanni/p/4231235.html] [https://www.cnblogs.com/gpfeisoft/p/6112847.html] |
1. 首先确保两台服务器rsync可以同步.
步骤可以参考: https://www.bndstone.com/1245.html [到步骤3-5 就可以了]
1 2 3 4 | kvm12 192.168.122.37 kvm12 192.168.122.73 rsync -vzrtopg --progress /home/wwwroot/default/tongbu/ root@192.168.122.73::web --password-file=/etc/rsyncd.secrets |
2. 检测OS是否支持inotify
1 2 3 | cat /etc/system-release //查看centos版本 uname -r //查看是32位还是64位 ll /proc/sys/fs/inotify //查看是否支持inotify ,也可以用 ll /proc/sys/fs/inotify |
如下结果有
max_user_watches、
max_user_instances、
max_queued_events
这三个文件,说明centos 7.4 64bit是支持inotify的
3. inotify相关参数详解
inotify定义了三个接口参数,可以用来限制inotify消耗kernel memory的大小。
由于这些参数都是内存参数,因此,可以根据应用需求实时的调节其大小。下面分别做简单介绍
/proc/sys/fs/inotify/max_queued_evnets
表示请求events数的最大值,超出这个值的事件将被丢弃。该值默认为16384。
注意:max_queued_events是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
如果你在日志中看到Event Queue Overflow,说明max_queued_events太小需要调整参数后再次使用。
/proc/sys/fs/inotify/max_user_instances
表示每个user可创建的instances数量上限。该值默认为128。
/proc/sys/fs/inotify/max_user_watches
表示可监控目录的最大数。该值默认为8192。
要修改以上默认值,我们可以使用以下类似手段修改
例如: /proc/sys/fs/inotify/max_user_watches 修改为 30000000
1 | echo 30000000 > /proc/sys/fs/inotify/max_user_watches |
5. 安装inotify-tools
inotify-tools 下载官网:
https://github.com/inotify-tools/inotify-tools/wiki
安装过程:
1 2 3 4 5 | wget https://linuxsoft.bndstone.com/inotify-tools/inotify-tools-3.14.tar.gz //下载inotify-tools-3.14.tar.gz tar -zxvf inotify-tools-3.14.tar.gz //解压inotify-tools-3.14.tar.gz cd inotify-tools-3.14 //进入inotify-tools-3.14文件夹 ./configure --prefix=/usr/local/inotify //安装到/usr/local/inotify make && make install //开始安装 |
1 | ll /usr/local/inotify/bin/ //上面安装时不配置的话这步要 ll /usr/local/bin/ |
可以看到已经安装上了
6. 创建rsync复制脚本,用户shell来实现,其功能就是:
从源服务器(192.168.122.37)的/home/wwwroot/default/tongbu/目录下的所有的文件无论是添加、修改、删除文件,
能够通过inotify监控到,并通过rsync实时同步到目标服务器(192.168.122.73)的/home/wwwroot/default/tongbu/目录下
1 | vi /home/rsync.sh |
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash host=192.168.122.73 src=/home/wwwroot/default/tongbu/ des=web user=root /usr/local/inotify/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ | while read files do /usr/bin/rsync -zrtopg --delete --progress --password-file=/etc/rsyncd.secrets $src $user@$host::$des echo "${files} was rsynced" > /var/log/rsyncd.log 2>&1 done |
其中
1 2 3 4 | host是目标服务器的ip, src是源服务器要同步的目录, des是认证模块名,需要与目标服务器一致, root是建立密码文件里的认证用户。 |
修改rsync.sh的权限
1 | chmod +x /home/rsync.sh |
到此为止,源服务器的所有操作就完成了。下面配置目标服务器
7. 源服务器启动同步:
1 | /home/rsync.sh & |
8. 设置开机自启动 – rc.local
1 2 | chmod +x /etc/rc.d/rc.local //赋予rc.local执行权限 vi /etc/rc.d/rc.local //编缉rc.local文件 |
最后面增加如下代码:
1 | /home/rsync.sh & //加入需开机启动的代码 |
大功告成
1. 重启电脑后 要按第7步启动同步
2. 第7步启动失败时要特别注意是否能telnet对方ip 873,我就好几次因为重启后firewalld没有启动,导致连不上对方端口,进而启动不了