华为云 OBS 跨区域备份实战:一次误删事故后的 RPO/RTO 复盘
上个月团队出了个事故:运维同学在清理测试环境时,误删了生产环境 OBS 桶里的一批业务附件(约 200GB)。虽然最后通过华为云的桶版本控制 + 跨区域复制找回来了,但恢复过程暴露了我们备份策略里的几个盲区。今天把这次事故的复盘和最终的备份方案写出来,给用 OBS 存业务数据的兄弟提个醒。
一、事故经过与损失
误删发生在周五下午,业务方周一早上才发现附件 404。
桶开启了版本控制,删除操作产生的是 Delete Marker,历史对象还在;
但桶没有开启跨区域复制,数据只在单区域,且没有定期导出对象清单(Inventory)。
恢复时的问题是:知道对象被删了,但不知道“哪些对象在哪个时间点被删”。最后是靠 OBS 的事件通知 + 函数工作流(FunctionGraph)日志,反查出删除时间窗口,再用版本控制批量恢复历史版本。整个过程耗时约 6 小时,RTO 远超预期。
二、暴露的三个问题
单区域 = 单点风险。虽然 OBS 本身是多副本存储,但区域级故障或误操作(如整个桶的 ACL 被改)没有第二份副本兜底。
版本控制不是万能药。版本控制能防误删,但生命周期规则如果配错(比如 30 天自动删除旧版本),历史版本会被清理掉。我们检查后发现,幸好没配非当前版本过期规则。
没有对象清单,恢复靠猜。200GB 的桶里有几十万个小文件,没法靠人工比对“哪些该在、哪些不在”。
三、改进后的备份方案
1. 开启跨区域复制(CRR)
把生产桶复制到一个异地桶,跨区域选择不同 Region。华为云 OBS 的 CRR 支持近实时复制(通常秒级到分钟级),RPO 可以控制在分钟级。
json
// 跨区域复制规则示意
{
"rules": [{
"id": "backup-rule",
"status": "Enabled",
"destination": {
"bucket": "prod-backup-bucket",
"storageClass": "STANDARD"
},
"deleteMarkerReplication": "Enabled"
}]
}
注意 deleteMarkerReplication 要开启,这样源桶的删除操作也会同步到备份桶,避免两边状态不一致——但这也意味着备份桶不能防误删,所以还要配合下面的版本控制。
2. 备份桶独立开启版本控制 + 对象锁(WORM)
备份桶开启版本控制,并对关键前缀配置对象锁(合规模式),防止备份桶本身被误删或篡改。这是最后一道防线。
3. 每日生成对象清单(Inventory)
OBS 支持按天/周生成桶内对象的 CSV/ORC 清单,落到另一个桶里。恢复时用清单做比对,能快速定位缺失对象。
bash
# 通过 obsutil 拉取最新 Inventory 清单做比对
obsutil ls obs://prod-inventory/ -limit=1
4. 定期恢复演练
每季度做一次“删 10 个对象 → 从备份桶恢复”的演练,验证 RTO。我们这次定的目标是:200GB 以内、10 万对象,RTO ≤ 2 小时。
四、复盘结论
OBS 的版本控制和跨区域复制是两块基石,但“能恢复”和“快速恢复”是两回事。真正的备份体系要能回答三个问题:数据在哪、丢了什么、多快能拿回来。这次事故最大的教训是:别把版本控制当备份,别把单区域当高可用,更别在没有清单的情况下做恢复。
希望这篇复盘能给用华为云 OBS 的团队一点参考,尤其是存业务附件的,早点把跨区域复制和对象清单配起来,真出事的时候能省下好几个小时。
- 点赞
- 收藏
- 关注作者
评论(0)