rsync 是一个高效的文件同步工具,inotify 是 Linux 内核提供的一种文件系统事件监控机制。将 rsyncinotify 结合使用,可以实现文件实时同步。

以下是搭建实时同步系统的详细步骤:

环境准备

  • 两台 Linux 服务器,一台作为源服务器(发送端),另一台作为目标服务器(接收端)。
  • 确保两台服务器都安装了 rsyncinotify-tools

安装 rsyncinotify-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 的监控事件,例如只监控文件创建和修改事件。
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-03-03 17:42:15

results matching ""

    No results matching ""