将 Azure Cosmos DB for NoSQL 迁移到可用性区域支持
本文内容
本指南介绍如何将 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
相关内容