3795 字
19 分钟
Rsync + Sersync 企业级同步备份全解(上):从增量备份到企业级守护进程落地

Rsync + Sersync 企业级同步备份全解(上):从增量备份到企业级落地#

在互联网企业架构中,不论前端服务多么高可用,一旦底层数据发生毁灭性丢失且无备份,对业务的打击都是致命的。本文将从基础的增量备份利器 Rsync 讲起,系统梳理其核心原理、运行模式以及企业级守护进程的部署全流程,最后通过 4 个高频实战场景为你演示如何将其落地到生产环境中。

一、开篇:数据备份——运维不可缺失的最后一道防线#

1.1 数据丢失的四类典型风险#

在生产环境中,数据面临的威胁无处不在,典型的风险可以归结为以下四类:

  1. 人为误删:经典案例如 rm -rf /* 或错误的数据库 DROP 操作。
  2. 硬件故障:磁盘损坏、阵列卡故障、机房断电等不可抗力因素。
  3. 攻击破坏:勒索病毒加密数据、黑客恶意清空数据库。
  4. 程序Bug:业务代码逻辑错误导致的数据被意外覆盖或脏数据污染。
备份的底线思维

对于核心业务数据,永远不要只相信磁盘 RAID,RAID 只能防硬件损坏,防不住逻辑删除。异地/异机的物理备份才是最后的救命稻草。

1.2 备份方案的两大分类#

  • 全量备份:每次都将所有数据完整拷贝一份。优点是恢复极其简单,缺点是占用存储空间大、传输时间长、消耗极高带宽,不适合频繁备份。
  • 增量备份:仅备份自上次备份以来发生变化的数据。优点是极大地节省了存储空间和传输带宽,能够实现高频次的备份;缺点是恢复时需要依赖基础数据和增量链条。

1.3 Rsync 在运维体系中的定位#

Rsync(Remote Sync)正是增量同步工具领域的“行业标杆”。它通过独创的“rsync 算法”快速比对文件差异,仅传输发生变化的文件块(block),从而在保证数据一致性的同时,将网络传输量降到最低。

1.4 本文学习路径#

本篇将聚焦于 Rsync,学习路径为:从基础单机同步认知 → 深入理解三大运行模式 → 落地企业级集中备份架构(守护进程模式) → 解析核心参数与排错。在下篇中,我们将进一步向秒级实时同步(Sersync)演进。


二、Rsync 基础认知:核心特性与应用场景#

2.1 什么是 Rsync#

Rsync 是一款开源、快速、多功能的文件拷贝工具,最初旨在替代传统的 rcp 与 scp。它不仅支持本地文件拷贝,更强大的在于跨主机间的数据同步。

2.2 Rsync 核心优势#

  • 增量传输:默认仅传输修改过的内容(不仅是文件级别,甚至是文件内部的差异块)。
  • 加密通道:可以结合 SSH 实现端到端的数据传输加密。
  • 保留文件属性:完美保留文件的权限、属主、属组、时间戳以及软硬链接。
  • 跨平台兼容:几乎支持所有类 Unix 系统,也可通过 Cygwin 等方式在 Windows 上运行。

2.3 Rsync 六大企业应用场景#

Rsync 的轻量与高效使其在以下场景中大放异彩:

  1. 业务数据异地备份:核心数据库的冷备文件、用户上传的附件归档。
  2. Web 集群资源同步:发布机将静态资源同步至所有 Web 节点。
  3. 日志集中归档:将分散在各个业务节点的日志定时拉取到日志服务器。
  4. 服务器数据迁移:老机房向新机房迁移时,减少停机窗口的数据同步。
  5. 文件批量分发:配置文件的集中下发。
  6. 内网镜像源同步:同步公网的 Yum/APT/NPM 镜像到内网私有仓库。

2.4 同步的两个核心方向:推模式 vs 拉模式#

在跨主机同步中,方向的选择至关重要:

  • 推模式(Push):
    • 定义:由源服务器主动将数据“推”给目标服务器。
    • 适用场景:一对多场景(如发布机向多台 Web 节点推送代码)。
    • 优缺点:配置直观,但如果源服务器被黑客攻破,可能会顺着网络通道恶意覆盖或清空备份服务器上的数据。
  • 拉模式(Pull):
    • 定义:由目标服务器主动去源服务器将数据“拉”回来。
    • 适用场景:多对一场景(如一台备份服务器定时从几十台业务机拉取数据)。
    • 优缺点:业务侧不需要向备份侧开放写入权限。
生产经验:拉模式更安全

在纯备份场景下,强烈建议优先使用「拉模式」。因为备份服务器通常网络隔离严格,业务机只赋予备份机“只读”权限,即便业务机被完全攻陷,黑客也无法删掉已经拉取到备份服务器上的历史数据。


三、Rsync 核心运行模式:本地、远程与守护进程#

Rsync 具有三种不同的工作模式,分别对应不同的应用场景和语法结构。

3.1 本地模式(了解级)#

功能定位:相当于增强版的 cp 命令,可以在本机目录之间进行增量同步。

本地模式语法
# 语法:rsync [选项] 源路径 目标路径
rsync -av /opt/data /backup/
新手第一坑:源路径末尾斜杠 / 的区别
  • rsync -av /opt/data /backup/:不带斜杠,表示把 data 整个目录本身(包含其内容)同步到 /backup/ 下,最终形成 /backup/data/。
  • rsync -av /opt/data/ /backup/:带斜杠,表示只把 data 目录里面的内容同步到 /backup/ 下。

3.2 远程 Shell 模式(★★★★★ 高频重点)#

底层原理:依托 SSH 通道传输,复用系统当前的账号和密码体系,数据传输自带加密。

拉取与推送命令示例:

远程Shell模式示例
# 推送(Push):将本地 /data 同步到远程服务器的 /backup
rsync -av /data root@192.168.1.100:/backup
# 拉取(Pull):将远程服务器的 /data 拉取到本地 /backup
rsync -av root@192.168.1.100:/data /backup

进阶用法:如果远程主机的 SSH 端口不是默认的 22 端口,需要使用 -e 参数指定:

指定SSH端口
rsync -av -e 'ssh -p 2222' /data root@192.168.1.100:/backup

3.3 守护进程模式(★★★★★ 企业核心)#

模式定位:Rsync 作为独立的常驻服务(Daemon)运行,默认监听 873 端口。它不依赖 SSH 系统的账号,而是维护独立的虚拟账号体系。

核心差异对比:

  • 远程 Shell 模式:需要系统真实账号,权限难以精细控制,适合临时调试或运维人员手动执行。
  • 守护进程模式:使用虚拟账号认证,可将权限严格锁定在指定目录,支持并发与限速,是企业级自动化备份的标配架构。

整体架构:通常由一台备份服务器运行 Rsync Daemon(服务端),提供集中存储;多台业务服务器作为客户端,通过虚拟账号向服务端进行数据的拉取或推送。


四、Rsync 守护进程模式:企业级部署全流程#

本节以备份服务器为服务端(IP: 192.168.1.100),业务服务器为客户端为例,演示完整的部署流程。

4.1 前置准备:安装检查#

大多数 Linux 发行版已默认安装 Rsync。若未安装:

安装与验证
# CentOS / RHEL
sudo yum install -y rsync
# Ubuntu / Debian
sudo apt install -y rsync
# 检查版本
rsync --version

4.2 核心配置文件 rsyncd.conf 深度解析#

服务端的配置全集中在 /etc/rsyncd.conf 中。该文件分为全局配置和模块配置两部分。

/etc/rsyncd.conf 生产级配置模板
# ================= 全局配置段 =================
# 运行rsync服务的系统用户与用户组
uid = rsync_user
gid = rsync_user
# 增强安全性:是否将客户端锁定在模块目录下(需要root权限启动)
use chroot = no
# 最大并发连接数,0表示不限制
max connections = 200
# 超时时间(秒),避免死连接
timeout = 300
# 进程PID文件与锁文件路径
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
# 独立的日志文件路径
log file = /var/log/rsyncd.log
# 忽略不可读文件的报错
ignore errors
# ================= 模块配置段 =================
# 模块名称,客户端同步时指定的标识
[backup_module]
# 该模块对应的真实物理目录
path = /data/backup
# 描述信息
comment = Enterprise Backup Directory
# 是否允许客户端上传(推模式需要设为 false,表示不只读)
read only = false
# 允许查看模块列表
list = false
# 允许访问的IP网段(白名单)
hosts allow = 192.168.1.0/24
# 拒绝访问的IP
hosts deny = 0.0.0.0/32
# 连接该模块的虚拟用户名(与系统真实用户无关)
auth users = rsync_backup
# 存放虚拟用户密码的文件路径
secrets file = /etc/rsync.password

4.3 服务端配套配置#

为了让配置生效,我们需要在系统层面建立对应的用户、目录和密码文件。

服务端环境初始化
# 1. 创建运行rsync的虚拟系统用户(不允许登录系统)
useradd -M -s /sbin/nologin rsync_user
# 2. 创建备份数据存放目录并授权
mkdir -p /data/backup
chown -R rsync_user:rsync_user /data/backup
# 3. 创建虚拟账号密码文件(格式:用户名:密码)
echo "rsync_backup:StrongPassword123" > /etc/rsync.password
# 4. 强制修改密码文件权限(极其重要!)
chmod 600 /etc/rsync.password
权限 600 的强制约束

Rsync 协议对安全要求极高,/etc/rsync.password 文件的权限必须是 600,且属主必须与运行 rsync 命令的用户一致,否则客户端连接时会直接报权限错误(Auth failed)。

4.4 启动服务与状态验证#

启动与检查
# 启动 rsync 守护进程
systemctl start rsyncd
systemctl enable rsyncd
# 检查 873 端口是否监听
netstat -tulpn | grep 873

4.5 客户端跨机验证与免密配置#

在客户端机器上,如果每次同步都手输密码,显然无法做自动化脚本。我们需要配置客户端免密。

客户端免密配置
# 1. 在客户端创建密码文件(注意:客户端密码文件只写密码,不写用户名!)
echo "StrongPassword123" > /etc/rsync.client.pass
# 2. 设置 600 权限
chmod 600 /etc/rsync.client.pass
# 3. 执行推送测试(双冒号 :: 代表守护进程模式)
# 语法:rsync [选项] 本地目录 虚拟账号@服务端IP::模块名
rsync -avz /local/data/ rsync_backup@192.168.1.100::backup_module --password-file=/etc/rsync.client.pass

4.6 守护进程模式补充要点#

  • uid/gid 与 auth users 的区别:
    • auth users 是虚拟账号,仅用于客户端与服务端的网络握手认证。
    • uid/gid 是真实系统账号,服务端在接收到数据并落盘时,会以该身份写入文件。
  • 安全加固:生产环境中切忌将 hosts allow 设为 *,必须严格限制源端 IP;结合 iptables 将 873 端口仅对内网开放。

五、Rsync 核心参数与关键文件体系#

5.1 高频核心参数速查表#

在实战中,我们往往将多个参数组合使用(如最经典的 -avz)。

参数全称含义与作用
-a--archive归档模式。等同于 -rlptgoD,表示递归同步并保留文件所有属性(权限、时间、软链接等),最常用。
-v--verbose输出详细同步过程。
-z--compress在传输过程中压缩文件数据,极大节省带宽。
-r--recursive递归同步目录。
-t--times保留文件的修改时间。
--delete危险! 让目标目录与源目录保持绝对一致,删除目标目录中源目录没有的文件。
--exclude排除不需要同步的文件或目录(如 --exclude="logs/")。
--password-file指定客户端密码文件路径,实现免交互认证。
--bwlimit限制传输带宽(KB/s),防止同步占满网络影响业务。

5.2 关键文件差异梳理#

服务端与客户端密码文件的区别

这是初学者最容易搞混的地方:

  • 服务端密码文件(如 /etc/rsync.password):格式必须是 用户名:明文密码。
  • 客户端密码文件(如 /etc/rsync.client.pass):格式必须只有明文密码,绝对不能写用户名! 两者权限都必须为 600。

5.3 高危参数:--delete 的正确预演姿势#

--delete 用于保持两端数据 100% 一致。如果源目录因为人为失误被清空,带有 --delete 的定时同步任务会瞬间将远端备份目录也清空!

正确预演流程(Dry Run): 在生产环境执行带有删除行为的同步前,务必加上 -n(--dry-run)参数进行模拟执行。

预演删除操作
rsync -avz --delete -n /data/ rsync_backup@192.168.1.100::backup_module --password-file=/etc/rsync.client.pass

终端会输出哪些文件将会被删除,确认无误后,再去掉 -n 参数正式执行。


六、Rsync 企业实战:4 个高频生产场景#

案例1:业务服务器定时自动集中备份#

场景背景:数十台业务机需要每日凌晨 02:00 将 /var/www/html 目录归档到专用备份服务器的 backup_module 模块中。

解决方案:客户端编写脚本并配置 crontab 定时任务。

/scripts/daily_backup.sh
#!/bin/bash
# 定义变量
SRC_DIR="/var/www/html/"
DEST_MODULE="backup_module"
DEST_IP="192.168.1.100"
USER="rsync_backup"
PASS_FILE="/etc/rsync.client.pass"
LOG_FILE="/var/log/rsync_backup.log"
# 执行同步
echo "==== Backup Started at $(date +'%Y-%m-%d %H:%M:%S') ====" >> $LOG_FILE
rsync -avz --delete $SRC_DIR ${USER}@${DEST_IP}::${DEST_MODULE}/$(hostname)/ >> $LOG_FILE 2>&1
echo "==== Backup Finished at $(date +'%Y-%m-%d %H:%M:%S') ====" >> $LOG_FILE
配置定时任务
crontab -e
# 每天凌晨2点执行
0 2 * * * /bin/bash /scripts/daily_backup.sh >/dev/null 2>&1

案例2:Web 集群代码批量分发#

场景背景:一台发布机(Jenkins/Drone Runner)需要将构建好的 dist 目录批量推送到 3 台 Web 节点。

解决方案:结合远程 Shell 模式与 for 循环。

代码分发脚本
#!/bin/bash
WEB_NODES=("10.0.0.11" "10.0.0.12" "10.0.0.13")
DIST_PATH="/opt/blog-stake/fuwari-main/dist/"
for IP in "${WEB_NODES[@]}"; do
echo "Pushing code to $IP..."
rsync -avz --delete -e 'ssh -p 22' $DIST_PATH root@$IP:/var/www/html/
done
echo "All nodes updated successfully."

案例3:目录镜像同步(两端数据完全一致)#

场景背景:机房迁移,需要将旧 NFS 存储无缝切换到新 NFS 存储。由于数据量达 TB 级别,需分两步走。

操作流程:

  1. 第一次全量同步(耗时较长,业务不停止): rsync -avz /old_nfs/ root@new_nfs:/new_nfs/
  2. 第二次增量追平(业务短暂挂维护页,停写): rsync -avz --delete /old_nfs/ root@new_nfs:/new_nfs/ 秒级追平最后几十 MB 的差异后,迅速切换业务 DNS 走向新存储。

案例4:日志文件增量归档#

场景背景:同步业务日志到分析平台,但不希望同步历史的 .gz 压缩包。

解决方案:使用 --exclude 过滤。

排除特定文件同步
rsync -avz --exclude="*.gz" --exclude="*.tmp" /var/log/app/ rsync_backup@192.168.1.100::log_module --password-file=/etc/rsync.client.pass

结语:从定时到实时的进阶需求#

到目前为止,我们通过 Rsync + Crontab 完美解决了企业级定时备份的需求。但对于某些核心业务,“定时”往往意味着“数据丢失窗口”。如果设定凌晨 2 点备份,而下午 4 点服务器宕机,这中间 14 个小时的数据将灰飞烟灭。

为了解决 Rsync 定时触发的延迟痛点,我们需要引入内核级的事件监听机制(inotify),实现文件一变动立马触发同步。在下一篇文章《Rsync + Sersync 企业级同步备份全解(下):Sersync 实时同步落地》中,我们将详细探讨秒级实时容灾架构的搭建。

Rsync + Sersync 企业级同步备份全解(上):从增量备份到企业级守护进程落地
https://www.6ixblog.site/posts/rsync/
作者
Licwic
发布于
2026-08-09
许可协议
CC BY-NC-SA 4.0