使用 Azure Cosmos DB 进行自动联机备份和还原

Azure Cosmos DB 可以定期自动备份所有数据。 自动备份不会影响数据库操作的性能或可用性。 所有备份单独存储在另一个存储服务中并在全球复制,针对区域性的灾难提供复原能力。 假设你不小心删除了 Cosmos DB 容器,事后需要用到数据恢复或灾难恢复解决方案,此时,自动备份便可派上用场。

本文首先快速回顾一个 Cosmos DB 的数据冗余和可用性,并介绍备份。

Cosmos DB 的高可用性 - 回顾

Cosmos DB 旨在实现数据全局分布 - 它允许缩放多个 Azure 区域中的吞吐量,并提供策略驱动的故障转移和透明的多宿主 API。 作为一个提供 99.99% 可用性 SLA 的数据库系统,Cosmos DB 中的所有写入内容在客户端中确认之前,都会通过本地数据中心内的副本仲裁永久提交到本地磁盘。 请注意,Cosmos DB 的高可用性依赖于本地存储,而不依赖于任何外部存储技术。 此外,如果数据库帐户与多个 Azure 区域关联,则还会将写入内容复制到其他区域。 要在低延迟状态下缩放吞吐量和访问数据,可以根据需要将任意数量的读取区域与数据库帐户相关联。 在每个读取区域中,(复制的)数据持久保存在副本集中。

如下图所示,单个 Cosmos DB 容器是水平分区的。 下图中的一个圆圈表示一个“分区”,每个分区通过副本集实现高可用性。 这是单个 Azure 区域中的本地分布(以 X 轴表示)。 此外,每个分区(含有其相应的副本集)都将在与数据库帐户关联的多个区域中进行全球分布(例如,此图中的三个区域 - 中国东部、中国北部和印度中部)。 “分区集”是全局分布的实体,由数据在每个区域中的多个副本组成(以 Y 轴表示)。 可以向数据库帐户关联的区域分配优先级,发生灾难时,Cosmos DB 以透明方式故障转移到下一个区域。 还可以手动模拟故障转移,以测试应用程序的端到端可用性。

下图演示了 Cosmos DB 的高度冗余。

Cosmos DB 的高度冗余

Cosmos DB 的高度冗余

完整的自动化联机备份

糟糕,我不小心删除了容器或数据库! 使用 Cosmos DB,不仅仅是数据,还有数据备份都能获得高度冗余,可以弹性应对区域性的灾难。 目前,执行这些自动化备份的时间间隔约为 4 小时,并且始终会存储最新的 2 次备份。 如果数据意外删除或损坏,请在 8 小时内 联系 Azure 支持人员

这些备份不会影响数据库操作的性能或可用性。 Cosmos DB 在后台创建备份,不使用预配的 RU,不影响性能,也不影响数据库的可用性。

不同于存储在 Cosmos DB 中的数据,自动备份存储在 Azure Blob 存储服务中。 为了保证低延迟/高效上传,备份快照会上传到某个 Azure Blob 存储实例,该实例位于 Cosmos DB 数据库帐户当前写入区域所在的同一个区域。 此外,为了弹性应对区域性灾难,还会通过异地冗余存储 (GRS) 将 Azure Blob 存储中的每个备份数据快照复制到另一个区域。 下图显示整个 Cosmos DB 容器(在本示例中为中国北部的所有三个主分区)已在中国北部的远程 Azure Blob 存储帐户中备份,并通过 GRS 复制到中国东部。

下图演示了 GRS Azure 存储中所有 Cosmos DB 实体的定期完整备份。

GRS Azure 存储中所有 Cosmos DB 实体的定期完整备份

备份保留期

如上所述,Azure Cosmos DB 每四小时获取一次数据快照,并将每个分区的两个最新快照保留 30 天。 根据我们的符合性规定,将在 90 天后清除快照。

若要保留自己的快照,可以使用 Azure Cosmos DB 数据迁移工具中的“导出到 JSON”选项,计划其他备份。

从联机备份还原数据库

如果意外删除了数据库或集合,可以提交支持票证联系 Azure 支持,从上一次自动备份中还原数据。 如果由于数据损坏而需要还原数据库,请参阅处理数据损坏,因为你需要采取其他步骤,以防止损坏的数据渗透到备份中。 对于要还原备份的特定快照,Cosmos DB 要求数据在该快照的备份周期的持续时间内可用。

处理数据损坏

Azure Cosmos DB 保留系统中每个分区的两个最新备份。 当意外删除容器(文档、表的集合)或数据库时,该模型可以很好地处理这种情况,因为它可以还原其中一个最新版本。 然而,在用户可能引入数据损坏问题的情况下,Azure Cosmos DB 可能不知道数据损坏,并且损坏可能已经渗透到备份中。 一旦检测到损坏情况,应删除损坏的容器(集合/表),以防止备份被损坏的数据覆盖。 由于上次备份可能是四个小时前,用户可以使用更改源来捕获并存储删除容器之前的最近四小时的数据。

后续步骤

若要在多个数据中心复制数据库,请参阅使用 Cosmos DB 全局分配数据

若要联系 Azure 支持,请 从 Azure 门户开具票证