Azure DocumentDB 中的跨区域故障转移模式

在 Azure DocumentDB 群集上启用跨区域复制时,如果主群集不可用,或者出于任何其他原因需要切换区域,次要区域中的副本群集可以接管写入操作。 将副本群集转换为新的读写群集的操作称为 故障转移

Azure DocumentDB 支持三种故障转移模式。 每个模式都针对恢复时间目标(RTO)、恢复点目标(RPO)和操作控制的不同组合。 本文介绍每个模式、何时使用它,以及它与其他模式有何不同。

先决条件

这三种故障转移模式都需要在群集上启用 跨区域复制 。 副本群集可以位于另一个Azure区域或同一区域中;跨区域故障转移模式仅适用于另一区域中的副本。

比较故障转移模式

下表汇总了三种模式。

故障转移模式 谁发起故障转移 触发时间 数据丢失 典型用例
强制升级 任您随时选择 可能(复制延迟尚未消除) 自定义 RTO 和 RPO 控件、演练、区域迁移
平滑升级 任意时间 零(首先清空复制滞后时间) 计划内维护、区域迁移、计划的切换
服务托管故障转移 蔚蓝 检测到主区域发生中断 可能(复制延迟尚未消除) 需要从区域中断中自动恢复的任务关键型工作负荷

强制升级和服务管理的故障转移都是 计划外 故障转移,由于复制滞后,可能会导致数据丢失。 平滑提升是一项预先规划的操作,它会在切换写入角色之前等待副本追平,从而保证零数据丢失。

强制升级

强制升级是默认故障转移模式。 在你希望副本群集开始接受写入时,可以从 Azure 门户、Azure CLI 或 REST API 发起提升操作。

由于 Azure DocumentDB 在主群集和副本群集之间使用异步复制,因此在启动升级时,可能无法复制主群集上完成的写入操作。 任何未复制的写入操作都不会出现在提升后的群集上。

在以下情况下使用强制升级:

  • 您需要立即执行故障转移,即使存在数据丢失的风险(例如,当主区域无法访问但未启用服务托管故障转移时)。
  • 你正在运行灾难恢复演练,并希望完全控制时间。
  • 作为计划内迁移的一部分,您正在迁移到新的主区域,并且您的应用程序可以容忍由于复制仍在进行中而可能发生的少量数据丢失。

有关分步说明,请参阅 “触发强制升级”。

平滑升级

平滑提升是一项计划内操作,可在主集群及其副本之间切换写入角色,并实现 零数据丢失。 开始正常升级时,Azure DocumentDB:

  1. 停止接受主群集上的新写入操作。
  2. 等待所有待处理的复制操作完成,以便副本完全追上。
  3. 将副本集群切换为读写角色。
  4. 将以前的主群集设置为只读。

由于复制延迟耗尽时暂停写入,因此应用程序看到短的写入可用性差距。 持续时间取决于开始故障转移时的复制延迟。 全局读写连接字符串在切换完成后会自动指向新的主群集。

在以下情况下使用平滑提升:

  • 你正在进行计划内维护,并希望测试辅助区域,同时避免数据丢失风险。
  • 你将工作负荷永久迁移到其他主要区域。
  • 应用程序可以容忍短暂的写入可用性窗口,以换取零 RPO 交换机。

Important

正常升级要求主群集足够正常,以清空复制队列。 如果主数据库由于区域性中断而无法访问,请改用强制升级或服务管理的故障转移。

有关分步说明,请参阅 触发平滑提升

服务托管故障转移

由服务管理的故障转移使 Azure DocumentDB 能够在检测到主区域发生区域性故障时自动将副本群集提升为主群集。 您选择在主群集上启用由服务管理的故障转移。 启用后,在发生区域性服务中断期间,应用程序无需采取进一步操作。 全局读写连接字符串会自动更新为指向已提升的副本。

由于故障转移是由中断触发的,因此主群集无法首先清空复制队列。 在中断发生前未复制到次要区域的任何写入操作都可能会丢失。 这种取舍的好处是可以自动恢复,无需用户手动干预。

在以下情况下使用服务管理的故障转移:

注意

由服务管理的故障转移不能替代区域内高可用性(HA)。 将两者结合起来,以防范分片级故障(高可用性、零数据丢失)和区域级中断(由服务管理的故障转移、可能发生数据丢失)。

有关分步说明,请参阅 启用由服务管理的故障转移

选择正确的模式

使用本指南选取故障转移模式:

  • 如果需要在区域性中断发生时自动恢复,请启用 服务托管故障转移
  • 如果你计划进行区域切换,并且需要实现零数据丢失,请使用平滑提升
  • 如果您需要完全控制时机,或者正在进行演练,请使用 强制提升

可以组合模式。 例如,启用由服务管理的故障转移并不妨碍你为计划维护触发平滑提升。 服务托管设置仅更改在主区域不可用时由谁触发故障转移。

有关更广泛的建议,请参阅 高可用性和跨区域复制的最佳做法