# Rsync 增量同步附件(冷备)

# 1. 概述

本方案旨在利用 rsync 工具实现服务器之间的数据增量同步。rsync 是一种开源的、快速的文件传输工具,能够高效地同步文件和目录。它只传输源文件和目标文件之间的差异部分,从而节省带宽和时间。此方案适用于需要在多个服务器之间保持数据一致性和备份的场景。

# 2. 需求分析

• 实现云上数据与本地数据每日增量同步 • 数据同步频率:每天 • 数据量:约 XX GB(请根据实际情况填写) • 网络带宽:XX Mbps(请根据实际情况填写)

• 首次需要全量同步,之后每天进行增量同步 • 同步时选择的目录的总数据量不超过1TB,超过1TB则按时间或文件类型分类同步

# 3. 环境准备

• 操作系统:Linux/Unix 系统 • 网络环境:确保源服务器和目标服务器之间的网络连接畅通 • rsync 版本:建议使用最新稳定版本

# 4. 工作原理

rsync 基于算法计算文件的差异,只同步发生变化的文件内容。其工作流程如下:

  1. 文件扫描:rsync 会遍历源目录和目标目录,比较文件属性和内容。
  2. 差异检测:通过 checksum 校验来检测文件的差异。
  3. 数据传输:仅传输差异部分的数据,避免重复传输完整文件。

# 4.1 网络拓扑图

1733912041931.png

# 5. 方案设计

# 5.1 基本 rsync 命令格式

rsync -avz [源目录] [目标目录]

• -a:归档模式,表示递归同步,并保持文件权限、时间戳、软连接等信息。 • -v:显示同步过程的详细信息。 • -z:传输过程中启用压缩。 慎用 --delete (会删除目标目录下源目录中不存在的文件)

# 5.2 通过 SSH 远程同步

在源服务器上执行以下命令,通过 SSH 进行远程同步:

rsync -avz -e ssh [源目录] user@[目标服务器IP]:[目标目录]

• -e ssh:使用 SSH 作为传输协议,保证数据传输的安全性。

# 5.3 使用 crontab 实现自动化定时同步

可以通过 crontab 实现自动化定时任务。以下是在每天凌晨 2 点执行一次同步的示例:

0 2 * * * rsync -avz -e ssh /path/to/source user@target:/path/to/destination >> rsync.`date +”%Y%m%d”`.log 2>&1

# 6. 异常处理

• 网络中断:rsync 会在传输过程中自动重试,并支持断点续传。 • 权限问题:确保同步目录的用户有足够的读写权限。 • 磁盘空间不足:监控磁盘空间,及时清理不必要的文件。

# 7. 性能优化

• 压缩传输:使用 -z 选项压缩数据,减少传输时间。 • 带宽限制:使用 --bwlimit 选项限制传输速率,避免占用过多带宽。 rsync -avz --bwlimit=5000 [源目录] [目标目录] • -z传输带宽低于100Mbs、CPU资源充足、文件压缩效率高的情况下,建议开启压缩 • --bwlimit=5000:限制带宽为 5000 KB/s(有特殊要求时配置)

# 8. 日志管理

为了更好地监控同步过程,建议将 rsync 的输出记录到日志文件: rsync -avz -e ssh /path/to/source user@target:/path/to/destination >> /var/log/rsync.date +”%Y%m%d”.log 2>&1

# 9. 安全性考虑

• SSH 密钥认证:建议配置 SSH 密钥认证,避免明文密码传输。 • 防火墙配置:确保源服务器和目标服务器的防火墙允许 SSH 连接。 • 用户权限:同步时可以使用普通用户执行同步操作

# 10. 方案测试

在正式上线前,建议进行以下测试: • 初始同步测试:确保所有文件成功传输。 • 增量同步测试:验证文件的增量更新是否正确。 • 异常场景测试:模拟网络中断、磁盘空间不足等情况,验证方案的健壮性。

# 11. 方案维护

• 定期检查:定期检查同步日志,确保同步任务的正常运行。 • 版本更新:保持 rsync 工具的更新,利用最新特性和修复已知问题。

# 12. 总结

通过本方案,利用 rsync 工具可以高效地实现服务器之间的数据增量同步。在实际部署过程中,需要根据具体需求对同步频率、网络带宽和安全性进行合理配置,确保数据的及时和安全同步。

# 13. 举例

# 背景:

某客户OA运行在公有云上,附件数据总量约10T,每日增涨约30G。现客户需要将数据做异地备份(北京服务器A上的数据往成都服务器B上备份),并实现每日增量同步

# 方案设计:

  1. 首先对所有数据做一次全量同步

  2. OA附件存储按天分类,如下 2023 1 2 … 12 2024 1 2 … 8 (1 2 3 … 11)

  3. 每日增涨30G,30天增涨近1T数据;配置每日定时同步时,按月设置(目录大小尽量控制在1T以下(建议不超过5T),避免扫描文件列表耗时太长)

  4. 每天02点定时同步

假设附件目录分别为 A服务器 /Seeyon/A8/base/upload B服务器 /OA/backup/file_uplopad)

首先进行全量同步

rsync -avz -e ssh /Seeyon/A8/base/upload/* user@IP(B): /OA/backup/file_uplopad/ >> rsync.full.log 2>&1

再逐月份进行增量同步

0 2 * * * rsync -avz -e ssh /Seeyon/A8/base/upload/2024/08 user@IP(B): /OA/backup/file_uplopad/2024/ >> rsync.`date +"%Y%m%d"`.log 2>&1

这里以2024年8月举例,由于按每个月数据约1TB计算,实际场景中建议使用shell脚本的方式来循环遍历每个月份做增量同步

创建人:wangyxyf