使用rsync实现Linux服务器间文件同步
分类: 操作系统
2025-08-27
浏览: 227
评论: 0
字数: 38542

rsync(Remote Sync)是一个开源的快速增量备份工具,主要用于在本地或远程主机之间高效同步文件和目录,支持跨平台(如Windows与Linux间同步)操作并保持文件属性。

基础环境

利用rsync实现在不同linux服务器上的文件进行定时同步,有A、B两台CentOS7系统服务器,A的IP为192.168.5.3,B的IP为192.168.5.5;A服务器上有一个目录为/home/rsync,B服务器上有一个目录为/home/rsync;

安装rsync

查看两台机器是否都安装了rsync

bash
rpm -qa | grep rsync

如果没有安装,执行以下命令安装rsync

bash
yum update -y
yum install -y rsync

配置rsync服务端(仅A服务器配置)

把A服务器当服务端,执行以下命令,创建rsync配置文件

bash
vi /etc/rsyncd.conf

在配置文件中添加以下内容

bash
[module-rsync]
#同步的文件路径
path = /home/rsync
#同步的目录名称
comment = rsync
#同步的用户
uid = root
#同步的用户组
gid = root
#是否只读
read only = false
#允许同步的主机
hosts allow = 192.168.5.5
#拒绝同步的主机
hosts deny = *
#同步的用户名
auth users = vscing
#同步的密码文件
secrets file = /etc/rsyncd.secrets

在A服务器上执行以下命令,创建rsync密码文件

bash
vi /etc/rsyncd.secrets
echo "a:123456" > /etc/rsyncd.secrets

::: 重要 设置密码文件权限 :::

bash
chmod 600 /etc/rsyncd.secrets

启动sync服务

设置rsync服务开机自启

bash
systemctl enable rsyncd

启动rsync服务

bash
systemctl start rsyncd

查看服务状态

bash
systemctl status rsyncd

重启rsync服务

bash
systemctl restart rsyncd

设置防火墙

提示

使用云服务器,需要在云服务器机器A和B的控制台设置安全组,开放rsync服务端口873。 机器A和B的防火墙都需要设置,开放rsync服务端口873。

查看服务器上rsync服务的端口

bash
netstat -tulpn | grep rsync

进行防火墙策略放通

bash
firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --reload

查看防火墙策略

bash
firewall-cmd --zone=public --list-ports

测试rsync服务

上面配置完成后,需要测试一下rsync服务是否正常

B服务器配置密码

在B服务器上执行以下命令,创建rsync密码文件

bash
echo "123456" > /root/passwd

::: 重要 设置密码文件权限 :::

bash
chmod 600 /root/passwd

测试A服务器到B服务器同步

在B服务器上执行以下命令,测试A服务器到B服务器同步

bash
rsync -avz --password-file=/root/passwd vscing@192.168.5.3::module-rsync /home/rsync

B服务器同步A服务器文件

在A服务器上执行以下命令,测试B服务器到A服务器同步

bash
rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync

同步配置

打通同步后,为保证A和B文件的一致性,需要保持同步实时执行,即A服务器上的文件发生变化,B服务器上的文件也会实时同步。

同步方式分析

同步方式分析:

  • 定时同步:不管有没有文件变化,固定时间同步A服务器上内容到B服务器上,对实时性要求不高的场景,服务器压力小;
  • 文件监听:监听A服务器上的文件变化,有变化时,立即同步到B服务器上,对实时性要求高的场景,服务器压力大;

配置定时同步

在B服务器上执行以下命令,配置定时同步

创建命令文件

bash
touch /root/rsyncd.sh

编辑命令文件

bash
vi /root/rsyncd.sh

写入内容

bash
#!/bin/bash
rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync

添加可执行权限

bash
chmod 755 /root/rsyncd.sh

配置定时任务

bash
crontab -e
# 每35分钟执行一次
*/35 * * * * /root/rsyncd.sh >/dev/null 2>&1

文件监听同步

安装 inotify-tools

bash
yum install -y inotify-tools

创建监听脚本

bash
touch /root/inotify.sh

编辑监听脚本

bash
vi /root/inotify.sh

写入内容

bash
#!/bin/bash
inotifywait -mr --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' /home/rsync | while read date dir file event
do
    echo "[$date] $dir $file $event"
    rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync
done

#!/bin/bash
SRC="/home/rsync"  # 源目录
DEST="vscing@192.168.5.5::module-rsync"  # 目标服务器和模块
PASSWD="/root/passwd"  # 密码文件路径
LOG="/var/log/sync.log"  # 日志文件路径

# 监听源目录的变化
inotifywait -m -r -e modify,create,delete,move --format '%w%f' "$SRC" | while read FILE
do
    echo "[$(date)] 文件 $FILE 发生变化,开始同步..." >> "$LOG"
    rsync -avz --delete "$SRC" "$DEST" --password-file="$PASSWD" >> "$LOG"
    echo "[$(date)] 同步完成" >> "$LOG"
done

添加可执行权限

bash
chmod 600 /root/inotify.sh

运行监听脚本

bash
./inotify.sh
点赞
打赏
本文标签:
本文链接:
版权声明:
本文由vscing原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权