零基础实现服务器异地备份多副本策略

为什么需要异地备份多副本策略

单机备份最怕机房断电或硬盘损坏,一旦主服务器出问题,本地备份也一起丢。服务器异地备份多副本策略指的是将数据同时传输到另一台位于不同地理位置的服务器,并保留多个时间点的历史版本。
这样即使主站被攻击或硬件故障,也能从最近的副本快速恢复。

准备工作:你需要的东西

  • 两台 Linux 服务器(假设主服务器 IP 为 192.168.1.100,异地服务器 IP 为 192.168.2.200
  • SSH 客户端(比如 PuTTY 或 macOS 终端)
  • 两台服务器都安装好 rsynccron(多数系统自带,没有的话用包管理器安装:apt install rsyncyum install rsync
  • 异地服务器上预留足够磁盘空间,建议至少是备份源数据的 2~3 倍(因为要存多个副本)

第一步:配置免密码 SSH 登录

要自动执行备份,必须让主服务器能无密码登录到异地服务器。

  1. 在主服务器上生成密钥对(如果已有则跳过):
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
  1. 将公钥复制到异地服务器:
ssh-copy-id root@192.168.2.200

输入一次密码后,后续登录就不需要密码了。
测试一下:

ssh root@192.168.2.200 "ls /"

如果能正常列出目录,说明免密配置成功。

第二步:编写 rsync 备份脚本,实现多副本

在异地服务器上创建一个目录结构,比如 /backup/web,用日期命名子目录来保留多个副本。

新建脚本 /root/backup.sh

#!/bin/bash
# 定义变量
SOURCE="/var/www/html/"
DEST_HOST="root@192.168.2.200"
DEST_BASE="/backup/web"
DATE=$(date +%Y%m%d_%H%M%S)
LATEST="$DEST_BASE/latest"
CURRENT="$DEST_BASE/$DATE"

# 通过 SSH 创建本次备份目录
ssh $DEST_HOST "mkdir -p $CURRENT"\

# 使用 rsync 增量备份,--link-dest 让本次备份中未变化的文件硬链接到最新版本,节省空间
rsync -avz --delete --link-dest=$LATEST $SOURCE $DEST_HOST:$CURRENT/\

# 更新符号链接 'latest' 指向最新备份
ssh $DEST_HOST "ln -snf $CURRENT $LATEST"\

# 保留最近 7 个副本,删除更早的
ssh $DEST_HOST "cd $DEST_BASE && ls -1d 20* | sort -r | tail -n +8 | xargs -I {} rm -rf {}"

脚本说明:

  • 每次备份生成一个以时间戳命名的完整备份目录。
  • 利用 --link-dest 引用上一轮备份的硬链接,未修改的文件不占用额外空间。
  • 最后一步清理第 8 天及之前的副本,只保留 7 个。

保存后赋予执行权限:

chmod +x /root/backup.sh

首次执行前,需要先在异地服务器上创建基础的 latest 目录:

ssh root@192.168.2.200 "mkdir -p /backup/web/latest"

然后手动跑一次脚本测试:

/root/backup.sh

如果没报错,登录异地服务器检查 /backup/web/ 下是否出现了以日期命名的目录,并且 latest 符号链接指向它。

第三步:设置定时任务自动执行

在主服务器上编辑 cron 表:

crontab -e

添加一行,每天凌晨 3 点执行备份:

0 3 * * * /root/backup.sh > /var/log/backup.log 2>&1

保存后重启 cron(不同系统命令略有差异):

systemctl restart crond   # CentOS/RHEL
systemctl restart cron    # Debian/Ubuntu

建议把日志定向到文件,方便排查问题。

避坑指南:新手最容易犯的错误

  • 权限问题:rsync 脚本里用 root 用户执行,但如果目标目录权限严格,可能导致写入失败。确保异地服务器上 /backup 目录属主为 root 或给足权限。
  • 磁盘空间不足:多副本策略会占用较多空间,务必先 df -h 确认剩余空间。如果备份频繁,可以缩短保留天数,例如 tail -n +4 只留 3 个副本。
  • 网络中断:加 --timeout=60 参数防止 rsync 卡死。脚本里可以加上重试逻辑。
  • 符号链接陷阱--delete 会删除目标端多余的文件,如果误操作可能导致数据丢失。建议首次用 --dry-run 试跑。
  • 时区不一致:备份目录名依赖服务器时间,如果两台服务器时区不同,时间戳可能混乱。统一设置时区:timedatectl set-timezone Asia/Shanghai

效果验证:确保备份真的能恢复

不要等到出事才测试恢复!
建议每月至少手动恢复一次:

  1. 在异地服务器上选择一个备份目录,比如 /backup/web/20250301_030000
  2. 临时在回收站或测试环境执行一次恢复:
rsync -avz root@192.168.2.200:/backup/web/20250301_030000/ /tmp/test_restore/
  1. 对比原始文件数量与大小,用 diff -rmd5sum 校验完整性。
  2. 检查日志文件 /var/log/backup.log 确保每日任务正常执行,如果某天没生成新目录,立即排查网络、磁盘或权限问题。

总结

通过以上步骤,你已经搭建了一套带多副本保留的服务器异地备份多副本策略
核心思路是利用 rsync 的 --link-dest 实现增量存储,配合 cron 自动化,再用日期目录管理历史版本。
这套方案不需要额外付费工具,适合预算有限但需要可靠备份的场景。
后续可以根据数据量调整保留副本数量、备份频率,或者加入钉钉/邮件通知。

分享到:
上一篇
Linux进程守护supervisor配置
下一篇
服务器容灾备份方案落地教程指南
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意