CentOS7 rsync+inotify实现文件实时同步
一、需求背景
在服务器A上产生重要文件,需要实时同步到服务器B作为备份,防止数据丢失。本文档介绍如何使用rsync和inotify-tools实现文件实时同步,并在服务器B上保留9天的历史文件。
二、环境信息
- 服务器A(源):IP 10.19.222.147,主机名hosta,同步目录 /opt/opsmgr/backup
- 服务器B(目标):IP 10.19.222.135,主机名hostb,接收目录 /home/backup
三、实现步骤
3.1 配置SSH免密登录
在服务器A上操作:
生成SSH密钥:
ssh-keygen -t rsa

修改SSH配置允许root登录:
vi /etc/ssh/sshd_config
将 PermitRootLogin without-password 改为 PermitRootLogin no

重启SSH服务:
systemctl restart sshd
查看公钥:
cat /root/.ssh/id_rsa.pub

在服务器B上操作:
创建SSH目录:
mkdir /root/.ssh chmod 700 /root/.ssh
将服务器A的公钥添加到authorized_keys:
vi /root/.ssh/authorized_keys
粘贴服务器A的公钥内容。

设置权限:
chmod 600 /root/.ssh/authorized_keys
修改SSH配置:
vi /etc/ssh/sshd_config
将 PermitRootLogin without-password 改为 PermitRootLogin no

重启SSH服务:
systemctl restart sshd
测试免密登录:
在服务器A上测试登录服务器B:
ssh -p 22 root@10.19.222.135

3.2 安装rsync和inotify-tools
从阿里云镜像下载rpm包:
https://developer.aliyun.com/packageSearch


将rpm包复制到/tmp目录,在两台服务器上安装:
rpm -ivh /tmp/rsync-3.1.2-4.el7.x86_64.rpm rpm -ivh /tmp/inotify-tools-3.14-9.el7.x86_64.rpm

3.3 配置实时同步
在服务器A上创建同步脚本:
vi /home/hik/remote_file_backup.sh
脚本内容:
#!/bin/bash INOTIFY_CMD="/bin/inotifywait -mrq -e modify,create,attrib,move,delete /opt/opsmgr/backup/" $INOTIFY_CMD | while read files do /bin/rsync -az /opt/opsmgr/backup/ root@10.19.222.135:/home/backup/ done

设置开机自启动:
echo "sh /home/hik/remote_file_backup.sh &" >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local

手动启动同步服务:
sh /home/hik/remote_file_backup.sh &
检查进程:
ps -ef|grep inotify |grep -v grep ps -ef|grep remote_file_backup.sh |grep -v grep

3.4 测试同步
在服务器A的 /opt/opsmgr/backup 目录下创建文件:
cp /var/log/audit/audit.log ./

在服务器B上查看同步结果:

3.5 配置定时清理
在服务器B上配置定时任务,删除9天前的文件:
crontab -e
添加以下内容:
0 0 * * * find /home/backup/backup -type f -mtime +8 -exec rm {} ;
查看定时任务:
crontab -l

四、常见问题
问题1:同步失败
- 检查SSH免密登录
- 确认rsync和inotify-tools已安装
- 检查目录权限
问题2:同步延迟
- 检查inotifywait进程
- 确认脚本正常运行
- 检查网络连接
五、注意事项
- 确保SSH免密登录配置正确
- 检查目录权限设置
- 定期检查同步状态
- 注意磁盘空间使用
六、技术支持
如遇技术问题,请联系:
- 系统管理员
- Linux技术支持社区