侧边栏壁纸
博主头像
lance

不为失败找借口,只为成功找方法。

  • 累计撰写 28 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

一文搞懂 rsync:原理剖析 + Rocky Linux 主机同步部署实战

lance
2025-06-30 / 0 评论 / 0 点赞 / 96 阅读 / 1,346 字
温馨提示:
本文最后更新于 2025-08-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在日常运维中,数据同步 是一个极其常见的任务。无论是备份、部署、迁移、内容分发,rsync 几乎是 Linux 下的首选工具。今天介绍rsync的理论基础,并手把手部署一次基于 两台 Rocky Linux 主机 的生产级同步方案。

1 什么是rsync?

rsync(remote sync)是一个快速且功能强大的文件同步工具,支持本地与远程同步,采用“增量同步算法”,仅同步变化部分,性能非常高效。他的核心优势在于:

  1. 增量同步:只传输变更部分
  2. 支持压缩:可减少传输数据量
  3. 支持多种协议:本地,SSH,rsync守护进程等。
  4. 支持断点续传、权限保留、删除同步等高级特性

可运行在两种模式下:

  1. 命令行模式(push/pull):使用rsync命令手动或定时执行同步。
  2. 服务端守护模式(daemon):以守护进程方式运行,支持匿名或认证客户端访问共享模块。

2核心工作原理

  • 利用 “rsync算法” 比较源与目标文件内容,只传输差异数据块。
  • 使用 SSH、RSH 或 rsync协议 作为传输通道。

这种“块级差异传输 + 校验算法”机制,让 rsync 同步比 cp/scp 更高效、稳定,尤其适用于大文件、慢网速、跨地部署等场景。

3实验部署

3.1环境准备

角色 IP地址
源服务器 192.168.131.1
目标服务器 192.168.131.2

目标:将/var/www/html/目录内容,每小时自动同步到/data/backup/web/

3.2源服务器配置

dnf -y install  httpd
#安装httpd   上传一些文件到/var/www/html/下

sudo dnf -y install rsync 
#安装rsync
vim /etc/rsyncd.conf
#创建rsync配置文件
# 指定rsync守护进程运行时的用户身份(为了安全,一般设为nobody)
uid = nobody

# 指定rsync守护进程运行时的组身份
gid = nobody

# 是否启用chroot(默认是yes),设置为no可避免对文件路径限制,有利于备份大路径结构
use chroot = no

# 最大并发连接数,超出连接将被拒绝,防止资源耗尽
max connections = 20

# rsync守护进程运行时的日志文件
log file = /var/log/rsyncd.log

# PID文件路径,用于进程管理
pid file = /var/run/rsyncd.pid

# 守护进程监听的端口,默认873,确保防火墙已放通
port = 873

# 认证用户,仅这些用户可以访问该模块(对应下面的secrets file)
auth users = rsyncuser

# 指定认证文件,格式为:用户名:密码,一行一个用户
secrets file = /etc/rsync.password

# 是否启用日志记录同步的文件详细信息
transfer logging = yes

# 设置为只读,客户端只能拉取数据
read only = false       

# 是否允许客户端查看该模块(可选
list = yes                

# 设置白名单,只允许设置的网段进行访问
hosts allow = 10.0.0.0/24

# 设置黑名单,限制访问
hosts deny = 0.0.0.0/32

# 在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误
ignore errors

[webdata]   # 模块名,客户端使用 ::webdata 来访问这个模块
    path = /var/www/html      # 实际要共享的本地目录
    comment = Web site sync   # 模块说明,可选

# 可以添加多个模块

建议在写配置文件时将注释去掉,可能会影响某些参数生效

创建认证文件
# 生产环境密码复杂度设置高一点,我设置为123456
echo "rsyncuser:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
创建并启用 systemd 服务文件

cat >> /etc/systemd/system/rsyncd.service << EOF
[Unit]
Description=Rsync Daemon
After=network.target

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启用并启动服务:
systemctl daemon-reload
systemctl enable --now rsyncd


 开启防火墙端口
sudo firewall-cmd --add-port=873/tcp --permanent
sudo firewall-cmd --reload
# 或者直接关闭防火墙

目标服务器配置

dnf -y install rsync
#安装rsync

#创建并启用systemd服务文件
cat >> /etc/systemd/system/rsyncd.service << EOF
[Unit]
Description=Rsync Daemon
After=network.target

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启用并启动服务:
systemctl daemon-reload
systemctl enable --now rsyncd


创建密码文件
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password



手动执行同步测试

# 创建备份目录
mkdir /backup/web -p

# 传输测试
rsync -avz --delete --password-file=/etc/rsync.password \
rsyncuser@192.168.131.1::webdata /backup/web

以上操作就可以实现文件同步功能了,下面将设置一个定时同步脚本,实现定时同步

3.4自动化定时同步

在服务器端上操作

3.4创建同步脚本 /usr/local/bin/sync.sh

#!/bin/bash
rsync -az --password-file=/etc/rsync.password rsyncuser@192.168.131.1::webdata  /backup/web/  
>>  /var/log/rsync_sync.log   2>&1

赋予权限
chmod +x  /usr/local/bin/sync.sh

3.4 添加定时任务

crontab -e 

#每小时同步一次
0 * * * * /bin/sh   /usr/local/bin/sync.sh

这样就可以实现每小时同步一次。

0

评论区