CentOS文件同步
一、背景与目标
在多台CentOS服务器之间进行文件同步是一项常见的系统管理任务,用于确保数据的一致性和安全性,本文将详细介绍如何在CentOS操作系统中使用rsync工具和inotify机制实现文件的实时同步。

二、rsync简介
rsync
是Linux下的一款高效文件复制和同步工具,支持本地和远程同步,并提供增量同步功能,以减少数据传输量,它可以通过SSH、RSH或自身的协议进行远程数据传输。
三、安装rsync
在CentOS 7及以上版本中,默认已安装rsync,如果未安装,可以使用以下命令进行安装:
- yum install rsync y
四、使用rsync进行文件同步
1. 本地模式
语法:
- rsync [选项] 源路径 目标路径
示例:
- rsync avzP /var/log/ /tmp/
a
:归档模式,递归传输并保持文件属性。

v
:详细模式输出。
z
:压缩传输数据。
P
:显示文件传输进度信息。
2. 远程模式(推送)
语法:
- rsync avzP 源路径 user@ip:目标路径
示例:

- rsync avzP /var/log/ root@192.168.1.1:/tmp/
3. 远程模式(拉取)
语法:
- rsync avzP user@ip:源路径 目标路径
示例:
- rsync avzP root@192.168.1.1:/var/log/ /tmp/
五、rsync与inotify结合实现实时同步
尽管rsync功能强大,但其无法做到实时同步,通过结合inotify
机制,可以实现文件的实时同步。
1. inotify简介
inotify
是Linux内核提供的一种强大的文件系统事件监控机制,能够监听文件系统的创建、删除、修改等操作。
2. inotifytools工具
inotifytools
包含两个主要工具:inotifywait
和inotifywatch
,本文使用inotifywait
来实现实时监控。
3. 安装inotifytools
- yum install epelrelease y
- yum install inotifytools y
4. 编写inotify实时监控脚本
创建/home/inotify.sh
如下:
- #!/bin/bash
- 远程主机IP地址
- host=192.168.1.1
- 本地服务器同步目录(不含backup目录本身,即同步backup目录内的文件和子目录)
- src=/backup/
- 远程服务器rsync服务模块名
- des=backup
- rsync服务用户连接认证密码文件路径
- password=/etc/rsync.password
- 连接认证用户
- user=rsync_backup
- inotifywait程序路径
- inotifywait=/usr/bin/inotifywait
- 监听文件变化并进行同步
- $inotifywait mrq e 'modify,delete,create,attrib' $src | while read files;
- do
- rsync azP delete $src $user@$host::$des passwordfile=${password}
- done
赋予脚本执行权限:
- chmod +x /home/inotify.sh
运行脚本:
- sh /home/inotify.sh
该脚本会监控/backup
目录下的文件变化,当有文件被修改、删除、创建或属性改变时,自动调用rsync进行同步。
通过上述步骤,您可以在CentOS环境下实现高效的文件同步和实时同步,以下是一些建议的最佳实践:
1、定期备份: 无论使用何种同步方式,定期备份始终是确保数据安全的重要措施。
2、安全传输: 使用SSH密钥认证代替密码认证,提高数据传输的安全性。
3、性能优化: 对于大文件传输,可以使用限速参数(如bwlimit
)以避免占用过多网络带宽。
4、日志监控: 定期检查同步日志,确保同步任务顺利进行。
5、排除规则: 根据需要设置rsync的排除规则,避免同步不必要的文件。
七、常见问题解答(FAQs)
Q1: 如何更改rsync的端口号?
A1: 编辑/etc/rsyncd.conf
文件,添加或修改port
配置项,然后重启rsync服务:
- vim /etc/rsyncd.conf
添加或修改为:
- port = 873
重启服务:
- rsync daemon
Q2: 如何使用rsync同步特定类型的文件?
A2: 使用include
和exclude
参数指定需要同步的文件类型,只同步.txt
文件:
- rsync avzP include='*/' include='*.txt' exclude='*' /source/ user@remote:/destination/
Q3: rsync出现权限错误怎么办?
A3: 确保源和目标目录的权限正确,并且rsync运行时使用的账户对这些目录具有适当的读写权限,如果问题依然存在,可以检查SELinux设置或关闭SELinux临时测试。