rsync
是一个高效的文件同步工具,inotify
是 Linux 内核提供的一种文件系统事件监控机制。将 rsync
和 inotify
结合使用,可以实现文件实时同步。
以下是搭建实时同步系统的详细步骤:
环境准备
- 两台 Linux 服务器,一台作为源服务器(发送端),另一台作为目标服务器(接收端)。
- 确保两台服务器都安装了
rsync
和inotify-tools
。
安装 rsync
和 inotify-tools
- CentOS/RHEL:
yum install rsync inotify-tools -y
- Ubuntu/Debian:
apt-get update
apt-get install rsync inotify-tools -y
配置 rsync
目标服务器(接收端)
1、创建 rsync
配置文件:
vim /etc/rsyncd.conf
添加以下内容:
uid = root
gid = root
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[sync]
path = /data/sync # 同步目标目录
comment = Sync Directory
read only = no
list = yes
auth users = rsyncuser # 认证用户名
secrets file = /etc/rsyncd.secrets # 认证密码文件
2、创建认证密码文件:
echo "rsyncuser:password" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
3、启动 rsync
服务:
rsync --daemon
4、设置开机自启:
echo "rsync --daemon" >> /etc/rc.local
chmod +x /etc/rc.local
源服务器(发送端)
创建认证密码文件:
echo "password" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
编写 inotify
脚本
源服务器(发送端)
创建一个脚本文件,例如 inotify_rsync.sh
:
vim /root/inotify_rsync.sh
添加以下内容:
#!/bin/bash
# 源目录
SRC_DIR="/data/src"
# 目标服务器地址
DEST_SERVER="192.168.1.100"
# 目标模块名
DEST_MODULE="sync"
# 认证用户名
USER="rsyncuser"
# 监控事件
EVENTS="create,delete,modify,move"
# 执行 rsync 同步
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e $EVENTS $SRC_DIR | while read DATE TIME FILE; do
rsync -avz --delete --password-file=/etc/rsync.passwd $SRC_DIR/ $USER@$DEST_SERVER::$DEST_MODULE
echo "At ${TIME} on ${DATE}, file $FILE was backed up via rsync"
done
修改脚本权限:
chmod +x /root/inotify_rsync.sh
启动实时同步脚本
nohup /root/inotify_rsync.sh > /var/log/inotify_rsync.log 2>&1 &
验证实时同步
在源服务器的 /data/src
目录下创建、修改或删除文件,观察目标服务器的 /data/sync
目录是否实时同步。
注意事项
- 确保两台服务器之间的网络连通,并且防火墙允许
rsync
使用的端口(默认是 873)。 - 如果需要监控多个目录,可以修改脚本中的
SRC_DIR
变量,或者编写多个监控脚本。 - 可以根据实际需求调整
inotifywait
的监控事件,例如只监控文件创建和修改事件。