本指南介绍如何将 Azure Cosmos DB for NoSQL 从非可用性区域支持迁移到可用性区域支持。
在 Azure Cosmos DB 中使用可用性区域不会对性能或延迟造成明显影响。 它不需要对所选的一致性模式进行任何调整,也不需要对应用程序代码进行任何修改。
启用可用性区域后,Azure Cosmos DB 会智能地将数据的四个副本分布到所有可用性区域中。 这可以确保在一个可用性区域发生中断时,帐户仍可完全正常地运行。 相反,如果没有可用性区域,所有副本将位于单个可用性区域中(我们不会公开哪个可用性区域),如果该特定区域遇到问题,则可能会导致停机。
启用可用性区域是提高 Cosmos DB 数据库复原能力的好办法,而且不会导致应用程序复杂性提高、影响性能,甚至在使用自动缩放时不会产生额外成本。
先决条件
无服务器帐户可以使用可用性区域,但此选项仅在帐户创建期间可用。 没有可用性区域的现有帐户无法转换为可用性区域配置。 对于任务关键型工作负载,建议选择预配吞吐量。
请记住,启用可用性区域并非帐户范围的选择。 单个 Cosmos DB 帐户可以跨越任意数量的 Azure 区域,每个区域可以独立配置为利用可用性区域,并且某些区域对可能不支持可用性区域。 这一点很重要,因为某些区域尚不支持可用性区域,但将其添加到 Cosmos DB 帐户不会阻止在为该帐户配置的其他区域中启用可用性区域。 计费模型也体现了这种可能性。 有关 Cosmos DB SLA 的详细信息,请参阅 Cosmos DB for NoSQL 中的可靠性。 若要查看哪些地区支持可用性区域,请参阅支持可用性区域的 Azure 区域。
停机要求
在迁移到可用性区域支持的过程中,在添加和删除次要区域时会出现短时间(几秒钟)的写入不可用错误,因为系统会故意停止写入来检查区域之间的一致性。
迁移
由于无法在已添加到帐户的区域中启用可用性区域,因此需要删除该区域并在启用可用性区域的情况下再次添加它。 为了避免任何服务中断,需要添加并故障转移到临时区域,直到可用性区域配置完成。
按照以下步骤在选定区域中为帐户启用可用性区域。
将临时区域添加到数据库帐户。 以下示例演示如何将“中国东部”作为次要区域添加到仅配置了“中国北部 3”区域的帐户。 必须在命令中包含所有现有区域和任何新区域。
az cosmosdb update --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --locations regionName=chinanorth3 failoverPriority=0 isZoneRedundant=False --locations regionName=chinaeast failoverPriority=1 isZoneRedundant=False
如果你的 Azure Cosmos DB 帐户配置了多区域写入,请跳到下一步。 否则,手动故障转移到新添加的临时区域。 以下示例演示如何从“中国北部 3”区域(当前写入区域)故障转移到“中国东部”区域(当前只读区域)。 必须在命令中包含这两个区域。
az cosmosdb failover-priority-change --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --failover-policies chinaeast=0 chinanorth3=1
删除你要为其启用可用性区域的区域。 以下示例演示如何从配置了“中国东部”(写入区域)和“中国北部 3”(只读)区域的帐户中删除“中国北部 3”区域。 必须在命令中包含不应删除的所有区域。
az cosmosdb update --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --locations regionName=chinaeast failoverPriority=0 isZoneRedundant=False
添加回要启用可用性区域的区域。 以下示例演示如何将“中国北部 3”作为启用了可用性区域的次要区域添加到仅配置了“中国东部”区域的帐户。 必须在命令中包含任何现有区域和所有新区域。
az cosmosdb update --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --locations regionName=chinaeast failoverPriority=0 isZoneRedundant=False --locations regionName=chinanorth3 failoverPriority=1 isZoneRedundant=True
故障回复到已启用可用性区域的区域。 以下示例演示如何从“中国东部”区域(当前写入区域)故障转移到“中国北部 3”区域(当前只读区域)。 必须在命令中包含这两个区域。
az cosmosdb failover-priority-change --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --failover-policies chinanorth3=0 chinaeast=1
删除临时区域。 以下示例演示如何从配置了“中国北部 3”(写入区域)和“中国东部”(只读)区域的帐户中删除“中国东部”区域。 必须在命令中包含不应删除的所有帐户。
az cosmosdb update --name MyCosmosDBDatabaseAccount --resource-group MyResourceGroup --locations regionName=chinanorth3 failoverPriority=0 isZoneRedundant=True
相关内容