Azure Cosmos DB的可靠性

Azure Cosmos DB for NoSQL 是一种全球分布式、多模型数据库服务,支持具有灵活架构的文档数据模型。 Azure Cosmos DB提供全面的可靠性功能,包括多个一致性级别,使你能够平衡性能和可用性、防止可用性区域故障的区域冗余部署、使用服务托管或客户管理的故障转移的多区域复制,以及用于数据保护的连续和定期备份选项。

使用 Azure 时,可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。

本文介绍如何使Azure Cosmos DB应对各种潜在中断和问题,包括暂时性故障、可用性区域中断、区域中断和服务维护。 它还介绍如何使用备份从其他类型的问题中恢复,并突出显示有关Azure Cosmos DB服务级别协议(SLA)的关键信息。

生产部署建议

Azure Well-Architected 框架提供有关可靠性、安全性、成本、作和性能的建议。 若要了解这些领域如何相互影响并有助于可靠的 Azure Cosmos DB 解决方案,请参阅 Azure Cosmos DB 的架构最佳实践

可靠性体系结构概述

本部分介绍从可靠性的角度来看,服务工作原理最相关的一些重要方面。 本部分介绍逻辑体系结构,其中包括部署和使用的某些资源和功能。 它还讨论了物理架构,该架构提供了服务内部运作方式的详细信息。

逻辑体系结构

部署的主要资源是 Azure Cosmos DB account。 每个帐户可以有多个具有多个容器的数据库。 容器充当分布和可伸缩性的逻辑单元。 可以根据用于与Azure Cosmos DB交互的 API 创建容器,例如集合、表和图形。 有关资源模型的详细信息,请参阅 Azure Cosmos DB 中的数据库、容器和项目。 每个容器都使用 分区,支持高缩放性和高性能。

配置 吞吐量,表示可用于查询和处理数据的系统资源量。 可以 手动预配吞吐量使用自动缩放 根据工作负荷的要求动态调整容量,或使用 无服务器帐户类型 按实际使用情况收费。

单个帐户可以跨多个Azure区域,从而提高对区域中断的复原能力。 可以配置多个区域进行读取,如果使用 业务关键层,则可以使用多个区域进行写入。 Azure Cosmos DB自动异地复制数据。 异地复制行为受你使用的配置(如 一致性级别)的影响,这表示你希望如何权衡数据一致性、可用性、延迟和吞吐量。 不同的一致性级别针对不同的关注点进行优化,支持不同的保证,并提供不同类型的跨区域复制。

物理体系结构

Azure Cosmos DB存储多个数据副本,以实现冗余。 该服务通过在每个区域中的副本之间维护法定人数来自动缓解副本故障。 此方法保证高可用性,并防止在单个节点故障期间数据丢失,而无需应用程序更改或配置。

在内部,Azure Cosmos DB通过各种构造管理数据,包括物理分区分区集replica sets。 有关 Azure Cosmos DB 工作原理的更多详细信息,请参阅 全球数据分布在 Azure Cosmos DB 的深入解析

暂时性故障的复原能力

暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。

与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅有关处理暂时性故障的建议

建议使用Azure Cosmos DB SDK。 SDK 自动实现对一系列复原注意事项的支持,包括通过自动重试进行暂时性故障处理,以及遵守服务发送的速率限制响应。 有关详细信息,请参阅 使用 Azure Cosmos DB SDK 设计具有强大可复原能力的应用程序

使用多区域帐户时,SDK 还支持 基于阈值的可用性策略(也称为 对冲),在该策略中,它将并行读取请求发送到多个区域并接受最快的响应。 当某个区域暂时遇到比平常更高的延迟时,此方法可以提高应用程序性能。

应对可用区故障的弹性

可用性区域 是 Azure 区域内物理上独立的数据中心组。 当某个区域发生故障时,服务可以切换到其他可用的区域。

Azure Cosmos DB 支持 区域冗余。 启用区域冗余时,Azure 跨多个可用性区域分发数据的副本,从而为数据中心问题和中断提供复原能力。 Azure选择要使用的可用性区域。

Diagram 显示包含三个副本集的Azure Cosmos DB帐户,这些副本集分布在三个单独的可用性区域。

Azure Cosmos DB 帐户可能会使用多个地域(位置)进行全局分发、扩展和故障转移。 为帐户中的每个区域单独配置区域冗余。

在Azure Cosmos DB中使用区域冗余对性能或延迟没有明显影响。 它不需要对所选一致性模式进行任何调整,也不需要对应用程序代码进行任何修改。

建议在支持的区域中使用区域冗余,尤其是对于单区域帐户。 由于可用性区域在物理上是独立的,并且提供不同的电源、网络和冷却,因此 Azure Cosmos DB 的可用性 SLA 对于区域冗余帐户比不使用可用性区域的帐户更高。

小窍门

启用区域冗余是提高Azure Cosmos DB数据库的复原能力的好方法,而无需引入额外的应用程序复杂性或影响性能。 根据帐户配置,它甚至可能不会产生额外的费用。

如果未启用区域冗余,该帐户在该区域中 是非区域性的 。 如果非区域帐户将副本放置在单个可用性区域中,如特定区域出现问题,会导致潜在的停机风险。

Requirements

  • 区域支持: 可以在支持可用性区域的Azure区域中启用区域冗余。 若要查看区域是否支持可用性区域,请参阅 受支持的区域列表

    区域冗余不是账户范围内的设置。 Azure Cosmos DB帐户可以跨越多个区域,并且每个区域可以单独配置为使用可用性区域。 不支持可用性区域的区域不会阻止在同一帐户中的其他区域中启用区域冗余。

  • 无服务器帐户: 创建无服务器帐户时,只能配置区域冗余无服务器帐户。 在没有可用性区域的情况下,无法将现有无服务器帐户转换为可用性区域配置。 对于任务关键型工作负荷,建议使用预配的吞吐量。

注意事项

  • 多个同时发生区域中断: 发生中断影响单个可用性区域时,具有区域冗余的单区域帐户可以保持读写可用性。 但是,如果中断影响多个可用性区域或整个区域,则单区域帐户将失去读取和写入访问权限,直到服务还原为止。 如果需要应对多个区域同时失效,请考虑部署多区域账户。

  • 多区域帐户: 如果有多区域帐户,可以选择对支持可用性区域的任何或所有帐户区域启用区域冗余。 强烈建议在帐户配置为使用单个区域或配置为使用具有多个读取区域的单个写入区域时启用区域冗余。

Cost

启用区域冗余的区域按高级收费。 但是,对于配置了多区域写入的账户,以及配置为自动缩放吞吐量模式的集合,将免除可用性区域的额外定价。 有关详细信息,请参阅 Azure Cosmos DB 定价

配置可用性区域支持

对于大多数帐户,只有在向Azure Cosmos DB帐户添加新区域时,才启用区域冗余。 若要在现有帐户上启用可用性区域支持,请添加一个区域并在其上启用区域冗余。 可以按照过程添加临时区域,以便在原始区域中配置区域冗余。 有关详细步骤,请参阅 启用 Azure Cosmos DB 帐户的区域冗余

对于无服务器帐户,创建帐户时必须启用区域冗余。

所有区域正常时的行为

本部分介绍为区域冗余配置Azure Cosmos DB帐户时会发生什么情况,并且所有区域都正常运行。

  • Cross-zone operation: Azure Cosmos DB自动将请求路由到跨可用性区域的副本,因此任何副本都可以提供请求。

  • 跨区域数据复制: 当客户对任何数据进行更改时,这些更改会被应用到不同区域中的多个副本上,以确保仲裁。 此方法称为 同步复制。 同步复制可确保数据一致性较高,从而减少区域故障期间数据丢失的可能性。 可用性区域位于相对较近的位置,这意味着对延迟或吞吐量的影响较小。

区域故障期间的行为

本部分介绍为区域冗余配置Azure Cosmos DB帐户时会发生什么情况,其中一个区域发生中断。

  • 检测和响应。 Azure Cosmos DB 平台负责检测可用区域内的故障。 无需执行任何操作即可启动区域故障转移。
  • Active requests: 当可用性区域不可用时,Azure Cosmos DB终止与受影响区域中的副本连接的任何正在进行的请求,并且应用程序必须重试这些请求。 按照 暂时性故障处理指南确保应用程序已准备好。

  • 预期数据丢失: 区域故障不会造成预期数据丢失。

  • 预期的停机时间: 在区域中断期间,连接可能会遇到短暂的中断,这些中断通常持续几秒钟,因为流量被重新分发。 按照 暂时性故障处理指南确保应用程序已准备好。

  • Redistribution: Azure Cosmos DB会自动将传入请求重定向到其他可用性区域中的正常副本。 当可用性区域发生中断时,平台会自动将预配的吞吐量重新分配给其他副本。

区域恢复

当可用性区域恢复时,Azure Cosmos DB自动还原可用性区域中的副本,并照常重新路由副本之间的流量。

测试区域故障

Azure完全管理Azure Cosmos DB的可用性区域故障转移和恢复。 无需启动或验证可用性区域故障进程。

对区域范围的故障的复原能力

在单个区域中部署Azure Cosmos DB帐户时,影响所有Azure Cosmos DB节点的区域范围的中断通常不会导致数据丢失,但它确实会阻止应用程序访问数据。 在受影响区域的服务恢复后,Azure Cosmos DB能够还原数据访问。 仅当区域遇到无法恢复的灾难时,才会发生数据丢失。

若要为罕见的区域中断情况做好准备,可以使用以下方法之一配置Azure Cosmos DB以支持各种级别的持久性和可用性:

下表汇总了基于帐户配置和中断类型的恢复选项。 本文的后续部分提供了这些选项和相关行为的广泛详细信息。

Configuration 中断类型 可用性影响 持续性影响 怎么办
单区域帐户 区域中断 在还原服务之前,读取和写入访问将丢失。 除非区域遇到无法恢复的灾难,否则不会丢失任何数据。 等待服务还原或请求帐户从备份还原到另一个区域。
单一写入区域、多区域帐户 读取区域中断 SDK 根据首选区域配置重新路由到可用区域。

对于采用强一致性的帐户而言,如果只有两个区域,或者有限过期超过过期窗口,除非您使受影响的区域脱机,否则写入可用性也会丧失。
无数据丢失。 确保剩余区域中的足够吞吐量。 对于强或有限过期一致性,请考虑 使受影响的区域脱机
单一写入区域、多区域帐户 写入区域中断(启用了 PPAF) 自动分区级故障切换,无需手动干预。 如果帐户使用强一致性,则不会丢失任何数据。 如果帐户不使用强一致性,那么在极少数情况下发生区域永久性数据丢失时,未复制的数据可能会丢失。 无需采取措施。 故障转移由 PPAF 自动管理。
单一写入区域、多区域帐户 写入区域中断(没有 PPAF) 写入可用性会丢失,直到区域脱机操作或服务托管的故障转移完成。 从正常区域继续读取。 如果帐户使用强一致性,则不会丢失任何数据。 如果帐户不使用强一致性,那么在极少数情况下发生区域永久性数据丢失时,未复制的数据可能会丢失。 执行 区域脱机操作。 如果启用了服务管理的故障转移,Azure Cosmos DB会自动启动故障转移,但这可能需要一小时或更多时间。 请勿在中断期间更改写入区域。
多写区域帐户 任何区域中断 通过 SDK 配置自动路由到正常区域;无需手动干预。 失败区域中最近更新的数据可能在剩余区域中不可用。 在区域遭受永久数据丢失的可能性不大的情况下,未复制的数据可能会丢失。 确保剩余区域中的足够吞吐量。 恢复后,Azure Cosmos DB使用配置的冲突解决方法自动恢复未复制的数据。
任何帐户配置 数据损坏或意外删除 无可用性影响。 潜在的数据丢失取决于检测到损坏或删除时间。 时间点还原(连续备份)或从定期备份还原。

Note

本文重点介绍Azure Cosmos DB的多区域功能的可靠性方面。 多个读取和写入区域还有其他好处,例如,全球分布式应用程序的高性能和规模更高。 应评估整个解决方案体系结构,并考虑使用这些功能的所有优势。

SDK 和复原能力

Azure Cosmos DB SDK 是应用程序复原策略的重要组成部分。 拥有多区域帐户时,SDK 配置会影响请求在区域之间路由的方式,包括要连接到的首选区域,以及应排除的区域。 SDK 监控区域和分区的可用性,并可以动态地重新配置自身,以使用健康的区域和分区,例如通过分区级别的断路器。

有关 SDK 如何支持高可用性的详细信息,请参阅你使用的 SDK 的高可用性文档:

区域中断期间潜在的数据丢失

在多个区域中部署Azure Cosmos DB帐户时,数据持久性取决于在帐户上配置的一致性级别。 下表详细介绍了在至少两个区域中部署的Azure Cosmos DB帐户的所有一致性级别恢复点目标(RPO)。 RPO 表示区域中断期间潜在的数据丢失。

一致性级别 区域中断的 RPO
会话、一致性前缀、最终一致性 少于 15 分钟
有限过期性 KT
0

K = 某项的版本(即更新)数。

T = 自上次更新以来的时间间隔。

对于多区域帐户,KT 的最小值为 100,000 次写入操作或 300 秒。 此值定义了使用有限过期时数据的最小 RPO。

有关一致性级别之间差异的详细信息,请参阅 Azure Cosmos DB 中的一致性级别

具有单个写入区域的多个读取区域

如果解决方案需要在区域中断期间持续运行时间,则可以将Azure Cosmos DB配置为跨多个区域复制数据,其中写入由主要区域处理。 可以选择将应用程序配置为连接到特定的读取区域,这有助于提高其性能。 如果某个区域发生中断,该帐户可以继续从正常区域运行。

显示 Azure Cosmos DB 帐户的示意图。区域 A 是一个读写区域,而区域 B 是一个只读区域。区域 A 的应用程序在区域 A 中对 Azure Cosmos DB 帐户执行读写操作。区域 B 的应用程序在区域 B 中执行读操作,但写入操作仍然针对区域 A。Azure Cosmos DB 在内部复制这两个区域之间的更改。

区域之间的故障转移

可以使用具有读取区域的优先级列表来配置Azure Cosmos DB SDK。 SDK 将应用程序连接到列表中的第一个可用区域。 在读取区域中断期间,SDK 通过后端响应代码检测区域中断,将其标记为不可用,并将将来的作路由到首选项列表中的下一个可用区域。 确保正确设置首选区域列表,并符合业务和延迟要求。 有关详细指南,请参阅 排查 Azure Cosmos DB SDK 可用性问题

故障转移是使某个帐户区域完全或部分不可用的过程。 故障转移的影响取决于区域是写入区域还是读取区域:

  • 如果写入区域变得不可用,另一个区域将成为写入区域。
  • 如果读取区域变得不可用,则该区域无法处理读取请求,而其他区域则用于读取操作。

Azure Cosmos DB提供多种类型的故障转移:

  • 分区自动故障转移(PPAF):内部,Azure Cosmos DB将数据分散到多个物理分区。 如果支持分区的基础结构出现问题,则其他分区可能不会受到影响。 PPAF 使单写入区域帐户能够自动将单个分区故障转移到次要区域,同时使主要区域中的分区保持正常。 PPAF 可帮助最大程度地减少停机时间,并在部分区域故障期间实现更快的恢复。

    Note

    按分区自动故障转移功能现已推出公共预览版。 此功能提供时不附带服务级别协议。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

  • 强制切换: 你可以使帐户的某个区域下线。 这也称为 客户管理的故障转移离线区域 操作。 这是在中断期间快速还原可用性的建议方法。 你负责检测服务中断并触发故障转移。 可以通过使用强制故障切换来模拟区域故障场景进行测试,例如在灾难恢复演练期间。

    如果使写入区域脱机,则具有下一个最高优先级的读取区域将成为新的写入区域。 如果使读取区域脱机,应用程序可以连接到帐户中的其他任何读取区域。

    当您对写入区域进行强制故障转移时,可能会导致任何未复制写入的数据丢失。

    强制故障转移后,Azure必须将区域重新联机。 对于正常的区域,此过程是自动化的,但最长可能需要几天时间。 如果区域在一两天内未联机,请提出支持案例以请求帮助。

  • 更改写入区域: 如果区域正常,可以更改帐户的写入区域。 此更改实际上是帐户写入区域的计划内故障转移。

    更改写入区域不会丢失任何数据,因为数据复制在升级新写入区域之前会赶上。 可能存在短暂的中断,但使用重试逻辑和其他暂时性故障处理技术的客户端通常不会产生重大影响。

    此操作要求区域正常运行, 因此无法在区域中断期间使用它。

  • 服务托管故障转移:当帐户使用服务托管故障转移时,Azure负责决定何时在区域之间进行故障转移。 若要启用服务管理的故障转移,请为每个区域指定优先级。 但是,声明中断和触发服务托管故障转移的过程可能需要很长时间 -- 可能需要一小时或更多时间。 为了加快恢复速度,请执行强制故障转移,而不是等待由服务管理的故障转移触发。

    如果Azure触发帐户写入区域的服务托管故障转移,则任何未复制的写入可能会丢失。

    在服务管理的故障转移之后,Azure必须将一个区域恢复上线。 Azure自动使区域联机,但此过程可能需要几天时间。

Requirements

区域支持: 可以将任何Azure区域配置为Azure Cosmos DB帐户的读取区域。

Cost

将其他读取区域添加到Azure Cosmos DB帐户会增加每个区域的现有成本。 有关详细信息,请参阅 Azure Cosmos DB 定价

配置多个读取区域

容量计划和管理

如果应用程序将请求分散到各个区域,并且一个区域脱机,则剩余区域的请求量会更高。 使用自动缩放功能,根据需求动态调整吞吐量的容量。 如果使用预配的吞吐量,请规划足够的容量来处理某个区域的故障,从而不影响服务,并考虑超额预配。 有关详细信息,请参阅 通过超额配置管理容量

当所有区域都正常时的行为

本部分介绍在使用多个读取区域配置Azure Cosmos DB帐户时的预期情况,并且所有区域都是可操作的。

  • 跨区域操作: 应用程序配置应接收读取操作的区域。 可以使用区域优先级列表配置应用程序,或排除某些区域。 有关区域选择工作原理的详细信息,请参阅 Diagnose 并排查多区域环境中Azure Cosmos DB SDK 的可用性问题

    所有写入操作都定向到帐户的写入区域。

  • 跨区域数据复制: 所有写入操作都发生在帐户的主要区域中。 写入操作会根据帐户配置的一致性级别,被复制到其他读取区域。 有关最大复制延迟的信息,请参阅 区域中断期间潜在的数据丢失

读取区域失败期间的行为

在配置具有多个读取区域的 Azure Cosmos DB 帐户并遇到其中一个读取区域出现故障时,可以期待什么。

Important

理想情况下,应通过在 SDK 配置中正确配置 首选区域列表 ,在客户端级别处理读取区域中断。 正确配置后,SDK 会自动检测中断,并将读取操作重新路由到下一个可用区域,而无需任何服务端故障转移。

  • 检测和响应: 负责检测故障和响应,具体取决于帐户使用的故障转移类型。

    • PPAF: PPAF 通常不适用于读取区域中断。 但是,对于具有强一致性且只有两个区域的帐户,失去读取区域会使帐户变成单个区域,这无法维护动态法定人数。 在此方案中,PPAF 可以通过将受影响的分区转移到正常的区域来激活以保留可用性。

    • 强制故障转移: 你负责执行强制故障转移。 有关详细步骤,请参阅 执行 Azure Cosmos DB 帐户的强制故障转移

      如果不执行切换,帐户的运作方式会根据其一致性级别改变:

      • 强一致性:强一致性需要两个或更多区域来维护 动态仲裁。 如果可用区域少于两个,并且未执行故障转移,则帐户在还原服务之前会丢失写入可用性。

      • 有限过期一致性: 有限过期一致性依赖于维护区域之间的特定过期阈值。 如果区域中断的长度超过阈值,则系统无法保持写入之间的一致性。 如果不执行故障转移,帐户将失去写入数据的能力,直到服务恢复。

    • 服务托管故障转移: 如果启用了服务托管故障转移,Azure 最终会检测到中断并启动对您帐户的故障转移。 但是,此过程可能需要很长时间,可能需要一小时或更多时间。 为了加快恢复速度,请执行强制故障转移,而不是等待由服务管理的故障转移触发。

  • 活动请求: 任何活动请求都可能会终止,需要在故障转移完成后由客户端重试。 如果客户在短时间内重试,以适当处理暂时性故障,通常可以避免重大影响。

  • 预期数据丢失: 读取区域中的中断不会导致数据丢失。 Azure Cosmos DB继续遵循读取一致性保证。

  • 预期的停机时间: 帐户体验的停机时间取决于帐户使用的故障转移类型。

    • PPAF: 启用 PPAF 后,系统会自动检测故障并在 3 分钟内恢复,无需任何手动干预。

    • 强制故障转移: 停机时间取决于:

      • 发现中断并启动故障转移需要多长时间。

      • 故障转移需要多长时间,通常只需要几秒。

        Warning

        在中断方案中,不要对受影响区域执行任何配置(控制平面)操作,因为它们会导致帐户不一致和延迟恢复。 要避免的控制平面操作的一些示例包括:

        • 更改写入区域或修改故障转移优先级
        • 将帐户更新为多写入配置
        • 更新一致性级别或其他帐户设置
        • 更新专用终结点配置或网络设置
        • 更新帐户吞吐量或扩展操作
        • 任何其他操作会修改帐户配置或区域设置
    • 服务管理的故障转移: Azure负责启动服务管理的故障转移,帐户体验的停机时间取决于Azure声明中断和启动故障转移所需的时间。 在某些情况下,可能需要一小时或更多时间。 如果您的帐户遇到写入中断,并且需要快速恢复写入可用性,请执行强制切换。

  • 重新分配: 对于强制故障转移或服务管理的故障转移,受影响的区域会被断开连接,并标记为离线。

    处理读取区域服务中断不需要对应用程序代码进行更改。 Azure Cosmos DB SDK将读取操作重定向到首选区域列表中的下一个可用区域。 如果首选区域列表中没有可用的区域,读取操作会自动回退到服务中配置的帐户的当前写入区域。

    Note

    如果您将专用终结点用于 Azure Cosmos DB 帐户,请确保在脱机区域操作后专用 DNS 正确路由。 有关详细指南,请参阅 专用终结点的故障转移注意事项

写入区域失败期间的行为

本部分介绍在配置具有多个读取区域的 Azure Cosmos DB 帐户时可能发生的情况,以及写入区域出现中断时的情形。

  • 检测和响应: 负责检测故障和响应,具体取决于帐户使用的故障转移类型。

    • PPAF: Azure会自动检测中断,并启动某些分区的故障转移(如果适用)。 应用程序不需要执行任何操作。

    • 强制故障转移: 你负责执行强制故障转移。 有关详细步骤,请参阅 执行 Azure Cosmos DB 帐户的强制故障转移

      如果不执行故障转移,帐户将失去写入数据的能力,直到服务恢复。

      如果帐户的写入区域中断,请避免执行 更改写入区域 操作。 如果源或目标区域中断,写入区域更改不会成功。 原因是区域更改过程包括一致性检查,需要区域之间的连接。

    • 服务管理的故障转移: Azure 会自动检测到中断并启动您的账户的故障转移。 应用程序不需要执行任何操作。

  • 活动请求: 任何活动请求都可能会终止,需要在故障转移完成后由客户端重试。 如果客户在短时间内重试,以适当处理暂时性故障,通常可以避免重大影响。

  • 预期数据丢失: 如果配置帐户具有很强的一致性,则不会发生数据丢失。 否则,故障转移完成后,任何未复制的写入可能会丢失。 有关区域中断期间预期的最大数据丢失的信息,请参阅 区域中断期间的潜在数据丢失

  • 预期的停机时间: 帐户体验的停机时间取决于帐户使用的故障转移类型。

    • PPAF: 启用 PPAF 后,预期会短暂中断,这通常大约 3 分钟。

    • 强制故障转移: 停机时间取决于:

      • 发现中断并启动故障转移需要多长时间。
      • 故障转移需要多长时间,通常只需要几秒。

    Warning

    在故障期间,不要对受影响区域执行任何控制平面操作,因为它们会造成帐户不一致并延迟恢复。 要避免的控制平面操作的一些示例包括:

    • 更改写入区域或修改故障转移优先级
    • 将帐户更新为多写入配置
    • 更新一致性级别或其他帐户设置
    • 更新专用终结点配置或网络设置
    • 更新帐户吞吐量或扩展操作
    • 任何其他操作会修改帐户配置或区域设置
    • 服务管理的故障转移: Azure负责启动服务管理的故障转移,帐户经历的停机时间取决于Azure宣布中断并启动故障转移所需的时间。 在某些情况下,可能需要一小时或更多时间。 若要快速还原写入可用性,请执行强制故障转移。
  • 重新分布: 写入流量的重新分布取决于您帐户所使用的故障转移类型。

    • PPAF: Azure Cosmos DB会自动将不健康的分区故障转移到健康的区域。

    • 强制故障转移: 执行强制故障转移时,帐户的写入区域将更改为指定的区域。

    Note

    如果您将专用终结点用于 Azure Cosmos DB 帐户,请确保在脱机区域操作后专用 DNS 正确路由。 有关详细指南,请参阅 专用终结点的故障转移注意事项

    • 服务管理的故障转移: Azure Cosmos DB自动将帐户的一个次要区域提升为新的主要写入区域。 会按你指定的区域优先级顺序故障转移到其他区域。

区域恢复

Azure必须使区域重新联机。 当某个区域在服务中断后恢复时,Azure会自动使区域联机。 但是,此过程可能需要几天时间。

Important

强制故障转移后,Azure 会自动将健康区域恢复上线。 如果区域在一两天内未联机,请提出支持案例以请求帮助。

区域处于联机状态后,所执行的操作会有所不同,具体取决于中断是在读取区域还是写入区域中。

  • 读取区域中断后: 当受影响的区域重新联机时,它会与当前写入区域同步,并在完全捕获后再次可用于提供读取请求。 后续的读取会重定向到恢复的区域,不需更改应用程序代码。 在故障转移和重新加入之前发生故障的区域期间,Azure Cosmos DB 会继续遵循读取一致性保证。

  • 在写入区域中断:当受影响区域重新联机时,该区域在Azure门户中显示为“联机”,并可用作读取区域。 此时,可以安全地 将写区域更改回恢复的区域

    Important

    恢复的区域 不会在恢复后自动升级为写入区域 。 一旦安全,我们需要负责将可恢复的区域切换回为写区域。

    在更改写入区域之前、期间或之后 ,不会丢失数据或可用性 。 应用程序仍然高度可用。

    如果在区域脱机之前未复制任何写入,则可以从 冲突源读取未复制的写入。 应用程序可以读取冲突源、根据特定于应用程序的逻辑解决任何冲突,并根据需要将更新后的数据写回到容器。

针对区域故障进行测试

由于您的Azure Cosmos DB帐户即使是高度可用,您的应用程序仍可能无法正确处理区域故障转移。 要测试应用程序的端到端高可用性,请在应用程序测试或灾难恢复(DR)演练过程中,暂时禁用帐户的服务托管故障转移。 使用 PowerShell、Azure CLI 或 Azure 门户调用 强制故障转移,然后监视应用程序。 完成测试后,可以在区域自动恢复联机后,切换回主要区域,然后还原服务托管的故障转移到帐户。 如果区域在一两天内未联机,请提出支持案例以请求帮助。

多个写入区域

可以将 Azure Cosmos DB 配置为接受多个区域内的写入。 此配置可以为区域中断提供非常高的复原能力。 它还可用于减少地理分布式应用程序中的写入延迟。

图示Azure Cosmos DB帐户。区域 A 和区域 B 均是写入和读取区域。区域 A 的应用程序针对区域 A 的 Azure Cosmos DB帐户进行读取和写入操作。区域 B 的应用程序针对区域 B 的 Azure Cosmos DB帐户进行读取和写入操作。在内部,Azure Cosmos DB异步复制区域之间的更改。

为多个写入区域配置 Azure Cosmos DB 帐户时,不支持强一致性,可能会出现写入冲突。 中心区域在写入冲突中充当仲裁者。 有关如何解决这些冲突的详细信息,请参阅 使用多个写入区域时的冲突类型和解决策略

请务必考虑应用程序的设计以及它如何与多个写入区域配合使用。 查看 多区域写入的最佳做法

Requirements

区域支持: 可以将任何Azure区域配置为Azure Cosmos DB帐户的读取或写入区域。

Cost

将额外的写入区域添加到Azure Cosmos DB帐户会增加每个区域的现有成本。 有关详细信息,请参阅 Azure Cosmos DB 定价

配置多个写入区域

可以在创建帐户时或在创建帐户后随时在帐户上配置多个写入区域。 有关详细信息,请参阅 配置多个写入区域

若要有效使用多个写入区域,还需要适当配置应用。

容量计划和管理

如果应用程序将请求分散到各个区域,并且一个区域脱机,则剩余区域的请求量会更高。 使用自动缩放功能,根据需求动态调整吞吐量的容量。 如果使用预配的吞吐量,请规划足够的容量来处理某个区域的故障,从而不影响服务,并考虑超额预配。 有关详细信息,请参阅 通过超额配置管理容量

当所有区域都正常时的行为

本部分介绍在使用多个写入区域配置Azure Cosmos DB帐户时的预期情况,并且所有区域都是可操作的。

  • 跨区域操作: 当帐户配置了多个写入区域时,应用程序将配置应该用于读取和写入操作的区域。 可以使用区域优先级列表配置应用程序,或排除某些区域。 有关区域选择工作原理的详细信息,请参阅 Diagnose 并排查多区域环境中Azure Cosmos DB SDK 的可用性问题

  • 跨区域数据复制: 数据在区域之间异步复制。 复制滞后时间取决于帐户的一致性级别。 不能对多区域写入使用强一致性。 有关详细信息,请参阅 区域中断期间潜在的数据丢失

    为多个写入区域配置帐户时,不同区域中的应用程序可能会进行相互冲突的更改。 Azure Cosmos DB提供冲突解决功能。 有关详细信息,请参阅 使用多个写入区域时的冲突类型和解决策略。 若要了解如何配置自己的冲突解决策略,请参阅 Azure Cosmos DB 中的管理冲突解决策略。

    Note

    频繁更新同一文档 ID,或在 TTL 过期或被删除后频繁重新创建同一文档 ID,这会对复制性能产生负面影响,因为系统中生成的冲突增加。

区域故障期间的行为

本部分介绍在配置具有多个写入区域的Azure Cosmos DB帐户时的预期情况,以及当帐户的某个读取或写入区域发生中断时应如何应对。

  • 检测和响应: 应用程序检测到区域丢失。 Azure Cosmos DB SDK 提供自动区域选择功能,用于将读取和写入操作路由到正常的区域。
  • 活动请求: 任何活动请求都可能会终止,需要在故障转移完成后由客户端重试。 如果客户在短时间内重试,以适当处理暂时性故障,通常可以避免重大影响。

  • 预期数据丢失: 最近更新的数据可能在其他区域中不可用。 有关区域中断期间预期的最大数据丢失的信息,请参阅 区域中断期间的潜在数据丢失。 在受影响区域遭受永久数据丢失的可能性不大的情况下,可能会丢失未复制的数据。

  • 预期的停机时间: 在多主写入配置中,只要正确配置了 ApplicationRegionsPreferredRegions,就没有预期的停机时间。

    小窍门

    为了获得最佳结果,全局分布式应用程序应由全局负载均衡服务(例如Azure Front Door或Azure 流量管理器)前端。 这些服务可以检测区域降级,并自动将流量路由到正常区域中的应用程序实例。

  • Redistribution: Azure Cosmos DB SDK 会自动检测该区域是否运行不正常,并将读取和写入操作重定向到首选区域列表中的下一个可用区域。 您的应用程序代码无需更改。

    小窍门

    如果应用程序由Azure Front Door或流量管理器托管,则这些服务还会检测区域降级并将流量路由到正常的区域。

区域恢复

当受影响的区域重新联机时,该区域在Azure门户中显示为“联机”,并再次可用。

当区域失败时,任何未复制的写入数据都可以通过冲突源获取。 应用程序可以读取冲突源,根据特定于应用程序的逻辑解决冲突,并根据需要将更新后的数据写回 Azure Cosmos DB 容器。

针对区域故障进行测试

要测试多区域写入时的故障转移场景,可以通过使用强制故障转移使一个写入区域下线。 此过程模拟区域中断,可以观察应用程序响应方式。

备份和还原

对于大多数解决方案,不应只依赖于备份。 请改用本指南中所述的其他功能来支持复原要求。 但是,备份可以防范其他方法没有的一些风险。 有关详细信息,请参阅什么是冗余、复制和备份?

由于意外删除或应用程序中导致数据损坏的其他问题,可能会丢失数据。 使用单区域帐户时,也可能因为Azure Cosmos DB区域中无法恢复的灾难而发生数据丢失。 为了帮助你防止数据丢失,Azure Cosmos DB提供了一组备份和还原功能。 可以根据可恢复性要求和成本要求配置备份和保留。 有关详细信息,请参阅 Azure Cosmos DB 中的联机备份和按需数据还原

服务维护期间的系统弹性能力

Azure Cosmos DB以透明方式管理各个计算节点的所有详细信息,并自动执行修补和其他类型的计划内维护。 Azure Cosmos DB 的可用性和延迟的 SLA 在系统执行的所有自动维护操作中适用。

服务级别协议

Azure服务的服务级别协议(SLA)描述了每个服务的预期可用性以及解决方案必须满足的条件,以实现该可用性预期。 有关详细信息,请参阅 联机服务的 SLA

Azure Cosmos DB为一系列配置和服务特征(包括可用性、延迟、吞吐量和一致性)提供 SLA。

可用性 SLA 因是否使用以下任何产品功能而异:

  • 预配的吞吐量
  • 具有可用性区域支持的单区域帐户(区域冗余)
  • 使用多个读取区域的帐户
  • 使用多个写入区域的帐户(业务关键层)