1. 项目背景
因为工作需要,需部署一套nginx负载均衡群集,群集须保证所有nginx节点配置文件完全一致;要解决不同服务器之间数据一致,一般采用NFS共享文件、DRBD镜像复制或rsync文件同步来实现,相对于rsync,前两者配置稍麻烦,此处我选择rsync文件同步来保证配置文件一致性。
rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。但是rsync仅仅是同步工具,并不能做到监控文件变化并实时同步,因此还需要配合inotify来实现文件实时同步。
inotify是一种强大的、细粒度的、异步的文件系统事件控制机制。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。
在这里,我们使用inotify监控文件变化,同时通过脚本来触发rsync将发生变化的文件同步到目标服务器。
术语定义:
客户端–>源服务器(SRC)
服务端–>目标服务器(DEST)
2. 安装配置rsync
2.1 安装rsync服务
1 | yum install -y gcc gcc-c++ |
2.2 编辑rsync配置文件
1 | vim /etc/rsyncd.conf |
2.3 编辑rsync用户认证配置文件
1 | 服务端 |
2.4 修改配置文件权限
1 | chmod 600 /data/program/rsync/rsync_server.passwd |
2.5 启动rsync服务
1 | systemctl enable rsyncd |
2.6 双向同步配置
单向同步
1 | 如果仅需单向同步,只需要在服务端启动rsyncd服务,客户端无需启动服务,可直接执行rsync命令。 |
双向同步
1 | 如需双向同步,则需要在两台服务器启动rsyncd服务,两台服务器互为C-->S。 |
此处我选择双向同步,则需在两台服务器上同时配置服务。
3. 安装配置inotify-tools
1 | yum install -y inotify-tools |
4. 配置inotify_rsync同步脚本
1 | cd /data/program/rsync/ |
编辑指定同步文件列表
1 | vim /data/program/rsync/include |
给同步脚本添加执行权限
1 | chmod +x inotify_rsync.sh |
5. 将同步脚本放到后台启动
1 | nohup /data/program/rsync/inotify_rsync.sh >/data/program/rsync/nohup.out 2>&1 & |
6. 将同步脚本加到开机启动
1 | echo "nohup /data/program/rsync/inotify_rsync.sh >/data/program/rsync/nohup.out 2>&1 &" >> /etc/rc.local |
7. rsync+inotifywait部分参数说明
7.1 rsync参数说明
1 | -v, --verbose 详细模式输出 |
7.2 inotifywait参数说明
1 | -h,–help 输出帮助信息 |
7.3 inotifywait events事件说明
1 | access 读取文件或目录内容 |