主题
第 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-backup16.4 卷数据恢复流程
场景 1:单个 brick 损坏
- 停止卷
- 替换故障磁盘
- 重新格式化并挂载新磁盘
- 重新创建 brick 目录
- 启动卷并触发 heal
bash
gluster volume stop gv0
# 更换磁盘、格式化、挂载
gluster volume start gv0
gluster volume heal gv0 full场景 2:整个卷损坏
- 从备份服务器恢复数据到新卷
- 重新配置 Ganesha 导出
- 通知客户端重新挂载
16.5 灾难恢复演练
定期进行灾难恢复演练:
- 模拟单节点故障
- 模拟数据误删除
- 模拟整个机房不可用
- 验证备份数据可恢复
- 记录 RTO(恢复时间目标)和 RPO(恢复点目标)
16.6 本章小结
- 高可用和备份是两个不同概念
- GlusterFS 快照适合短期保护
- rsync/rsnapshot 适合异地备份
- 定期进行灾难恢复演练
- 记录 RTO 和 RPO 指标
练习题
- 高可用和备份有什么区别?
- GlusterFS 快照有什么限制?
- 设计一个适合你的环境的异地备份方案。
- 为什么要定期进行灾难恢复演练?