Skip to content

第 16 章 备份与灾难恢复

16.1 高可用不等于备份

很多初学者会混淆"高可用"和"备份":

  • 高可用:部分故障时服务不中断
  • 备份:数据副本保存到异地,用于恢复历史版本或灾难恢复

即使部署了 3 副本复制卷,如果发生以下情况,仍然需要备份:

  • 人为误删除
  • 勒索软件加密
  • 数据中心级灾难
  • 软件 bug 导致数据损坏

16.2 GlusterFS 快照

GlusterFS 支持卷级别快照,基于 LVM thin provisioning。

前提条件

brick 必须位于 LVM thin pool 上。

创建快照

bash
gluster snapshot create snap-gv0 gv0

查看快照

bash
gluster snapshot list

恢复快照

bash
gluster snapshot restore snap-gv0

删除快照

bash
gluster snapshot delete snap-gv0

快照适合短期保护,不适合长期异地备份。

16.3 rsync 异地备份方案

方案设计

GlusterFS Volume ──► 备份服务器(异地)
        │                   │
        │                   ▼
        │            rsync 增量同步
        │                   │
        │                   ▼
        │            历史版本(rsnapshot)

配置备份脚本

创建 /opt/backup/backup-nfs.sh

bash
#!/bin/bash
SRC="/mnt/gv0/"
DEST="backup-server:/backup/nfs-ha/"
LOG="/var/log/nfs-backup.log"

rsync -avz --delete "$SRC" "$DEST" >> "$LOG" 2>&1

if [ $? -eq 0 ]; then
    echo "$(date): Backup success" >> "$LOG"
else
    echo "$(date): Backup failed" >> "$LOG"
fi

加入定时任务

bash
chmod +x /opt/backup/backup-nfs.sh
echo '0 2 * * * root /opt/backup/backup-nfs.sh' > /etc/cron.d/nfs-backup

16.4 卷数据恢复流程

场景 1:单个 brick 损坏

  1. 停止卷
  2. 替换故障磁盘
  3. 重新格式化并挂载新磁盘
  4. 重新创建 brick 目录
  5. 启动卷并触发 heal
bash
gluster volume stop gv0
# 更换磁盘、格式化、挂载
gluster volume start gv0
gluster volume heal gv0 full

场景 2:整个卷损坏

  1. 从备份服务器恢复数据到新卷
  2. 重新配置 Ganesha 导出
  3. 通知客户端重新挂载

16.5 灾难恢复演练

定期进行灾难恢复演练:

  1. 模拟单节点故障
  2. 模拟数据误删除
  3. 模拟整个机房不可用
  4. 验证备份数据可恢复
  5. 记录 RTO(恢复时间目标)和 RPO(恢复点目标)

16.6 本章小结

  • 高可用和备份是两个不同概念
  • GlusterFS 快照适合短期保护
  • rsync/rsnapshot 适合异地备份
  • 定期进行灾难恢复演练
  • 记录 RTO 和 RPO 指标

练习题

  1. 高可用和备份有什么区别?
  2. GlusterFS 快照有什么限制?
  3. 设计一个适合你的环境的异地备份方案。
  4. 为什么要定期进行灾难恢复演练?