使用 rsync 高效同步两台 Linux 服务器的数据
calendar_today
schedule
4 分钟阅读
visibility
187 阅读
使用 rsync 高效同步两台 Linux 服务器的数据
在日常运维工作中,经常需要在多台服务器之间同步文件或目录。无论是备份关键数据、部署静态资源,还是保持开发与生产环境的一致性,rsync 都是一个强大而可靠的工具。本文将详细介绍如何使用 rsync 在两台 Linux 服务器之间进行高效、安全的文件同步。
什么是 rsync?
rsync(remote sync)是一个用于本地或远程同步文件和目录的命令行工具。它采用“增量传输”算法,只传输源和目标之间差异的部分,极大减少了网络带宽消耗和同步时间。同时,rsync 支持压缩、权限保留、符号链接处理、断点续传等高级功能。
前提条件
假设我们有两台服务器:
- 源服务器(Source):192.168.1.10,包含要同步的数据
/data/www - 目标服务器(Destination):192.168.1.20,希望将数据同步到
/backup/www
两台服务器均运行 Linux(如 CentOS、Ubuntu 等),并已安装 rsync 和 openssh-server。
若未安装 rsync,可使用以下命令安装:
- Ubuntu/Debian:
sudo apt install rsync- CentOS/RHEL:
sudo yum install rsync
同步架构图
graph TD
Source[源服务器 192.168.1.10] -->|rsync over SSH| Destination[目标服务器 192.168.1.20]
SSH 免密登录配置流程
为了实现自动化同步,建议配置从源服务器到目标服务器的 SSH 公钥认证。
graph TD
A[生成 SSH 密钥对] --> B[复制公钥到目标服务器]
B --> C[测试免密登录]
C --> D{登录成功?}
D -- 是 --> E[继续 rsync 配置]
D -- 否 --> F[检查 authorized_keys 权限]
F --> B
自动化同步执行流程
sequenceDiagram
participant Admin as 运维人员
participant Src as 源服务器
participant Dst as 目标服务器
Admin->>Src: 编写同步脚本 sync-www.sh
Admin->>Src: 配置 cron 定时任务
Src->>Dst: 每日凌晨自动执行 rsync
Dst-->>Src: 返回同步结果
Src->>Admin: 记录日志到 /var/log/rsync-www.log
第一步:配置 SSH 免密登录(推荐)
为了实现自动化同步,建议配置从源服务器到目标服务器的 SSH 公钥认证。
# 在源服务器执行
ssh-keygen -t rsa -b 4096
ssh-copy-id user@192.168.1.20
ssh user@192.168.1.20 # 应无需密码
第二步:基本 rsync 同步命令
rsync -avz /data/www/ user@192.168.1.20:/backup/www/
注意:源路径末尾的
/决定是否同步目录内容本身。
第三步:常用选项
| 选项 | 说明 |
|---|---|
-a |
归档模式(保留权限、时间等) |
-v |
详细输出 |
-z |
传输压缩 |
--delete |
删除目标端多余文件 |
--exclude='*.log' |
排除日志文件 |
-P |
显示进度 + 断点续传 |
第四步:自动化脚本 + cron
创建脚本 /usr/local/bin/sync-www.sh:
#!/bin/bash
rsync -avz --delete --exclude='*.log' /data/www/ user@192.168.1.20:/backup/www/ >> /var/log/rsync-www.log 2>&1
echo "[$(date)] Sync completed." >> /var/log/rsync-www.log
设置定时任务:
0 2 * * * /usr/local/bin/sync-www.sh
结语
通过 rsync + SSH + cron 的组合,你可以构建一套轻量、可靠、自动化的跨服务器同步方案。配合 Mermaid 图表,整个流程一目了然,便于团队协作与知识沉淀。
提示:如需实时同步,可结合
inotifywait监听文件变更事件。