34 inotify安装并与rsync集成实现数据实时同步更新

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的

null

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

null

备注: /proc/sys/fs/inotify/max_queued_evnets 这个文件不存在,不知道会不会影响

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                                                               //开始安装

null

1
ll /usr/local/inotify/bin/          //上面安装时不配置的话这步要 ll /usr/local/bin/

可以看到已经安装上了

null

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没有启动,导致连不上对方端口,进而启动不了

Leave a Reply

Your email address will not be published. Required fields are marked *