你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在使用 Azure Cosmos DB 的应用程序中配置多区域写入

适用范围: NoSQL

在多区域写入方案中,只能通过写入靠近应用程序实例的区域来获得性能优势。 Azure Cosmos DB 在后台自动处理复制。

为多个写入区域启用帐户后,必须在应用程序中对 ConnectionPolicy 进行两次更改。 在 ConnectionPolicy 内,将 UseMultipleWriteLocations 设置为 true,并传递从中将应用程序部署到 ApplicationRegion 的区域的名称。 此操作将根据传入位置的地理邻近度填充 PreferredLocations 属性。 如果以后将新区域添加到帐户,则无需更新或重新部署应用程序。 如果发生区域事件,它会自动检测较近的区域并自动定位到该区域。

注意

最初使用单个写入区域配置的 Azure Cosmos DB 帐户可以配置为具有零停机的多个写入区域。 若要了解详细信息,请参阅 配置多个写入区域

Azure 门户

若要使用多区域写入,请使用 Azure 门户为多个区域启用 Azure Cosmos DB 帐户。 指定应用程序可以写入的区域。

  1. 登录到 Azure 门户

  2. 导航到 Azure Cosmos DB 帐户。 从菜单中,打开“ 全局复制数据 ”窗格。

  3. 在“多区域写入”选项下,选择“启用”。 它会自动将现有区域添加到读写区域中。

  4. 可以通过选择地图上的图标或选择“添加区域”按钮来添加更多区域。 你添加的所有区域都会启用读取和写入功能。

  5. 更新区域列表后,请选择“保存”以应用所做的更改。

    显示如何使用 Azure 门户启用多区域写入的屏幕截图。

.NET SDK v2

若要在应用程序中启用多区域写入,请将 UseMultipleWriteLocations 设置为 true。 此外,将 SetCurrentLocation 设置为在其中部署应用程序并复制 Azure Cosmos DB 的区域:

ConnectionPolicy policy = new ConnectionPolicy
    {
        ConnectionMode = ConnectionMode.Direct,
        ConnectionProtocol = Protocol.Tcp,
        UseMultipleWriteLocations = true
    };
policy.SetCurrentLocation("West US 2");

.NET SDK v3

若要在应用程序中启用多区域写入,请将 ApplicationRegion 设置为在其中部署应用程序并复制 Azure Cosmos DB 的区域:

CosmosClient cosmosClient = new CosmosClient(
    "<connection-string-from-portal>", 
    new CosmosClientOptions()
    {
        ApplicationRegion = Regions.WestUS2,
    });

(可选)可以使用 CosmosClientBuilderWithApplicationRegion 来获得相同的结果:

CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder("<connection-string-from-portal>")
            .WithApplicationRegion(Regions.WestUS2);
CosmosClient client = cosmosClientBuilder.Build();

Java V4 SDK

若要在应用程序中启用多区域写入,请在客户端生成器中调用.multipleWriteRegionsEnabled(true).preferredRegions(preferredRegions),其中preferredRegions是一个区域List,数据将按首选优先级复制到这些区域。 理想情况下,首先列出了距离最短或最佳延迟的区域:

Java SDK V4 (Maven com.azure::azure-cosmos) 异步 API:


ArrayList<String> preferredRegions = new ArrayList<String>();
preferredRegions.add(region);

CosmosAsyncClient client =
        new CosmosClientBuilder()
                .endpoint(HOST)
                .key(MASTER_KEY)
                .multipleWriteRegionsEnabled(true)
                .preferredRegions(preferredRegions)
                .buildAsyncClient();

Async Java V2 SDK

Java V2 SDK 使用 Maven com.microsoft.azure::azure-cosmosdb。 若要在应用程序中启用多区域写入,请将 policy.setUsingMultipleWriteLocations(true)policy.setPreferredLocations 设置为按优先顺序复制数据的区域的 List。 理想情况下,首先列出了距离最短或最佳延迟的区域:

ConnectionPolicy policy = new ConnectionPolicy();
policy.setUsingMultipleWriteLocations(true);
policy.setPreferredLocations(Collections.singletonList(region));

AsyncDocumentClient client =
    new AsyncDocumentClient.Builder()
        .withMasterKeyOrResourceToken(this.accountKey)
        .withServiceEndpoint(this.accountEndpoint)
        .withConsistencyLevel(ConsistencyLevel.Eventual)
        .withConnectionPolicy(policy).build();

Node.js、JavaScript 和 TypeScript SDK

若要在应用程序中启用多区域写入,请将 connectionPolicy.UseMultipleWriteLocations 设置为 true。 此外,将 connectionPolicy.PreferredLocations 设置为按照首选项排序的数据复制区域。 理想情况下,首先列出了距离最短或最佳延迟的区域:

const connectionPolicy: ConnectionPolicy = new ConnectionPolicy();
connectionPolicy.UseMultipleWriteLocations = true;
connectionPolicy.PreferredLocations = [region];

const client = new CosmosClient({
  endpoint: config.endpoint,
  auth: { masterKey: config.key },
  connectionPolicy,
  consistencyLevel: ConsistencyLevel.Eventual
});

Python SDK

若要在应用程序中启用多区域写入,请将 connection_policy.UseMultipleWriteLocations 设置为 true。 另外,将 connection_policy.PreferredLocations 设置为按优先顺序复制数据的区域。 理想情况下,首先列出了距离最短或最佳延迟的区域:

connection_policy = documents.ConnectionPolicy()
connection_policy.UseMultipleWriteLocations = True
connection_policy.PreferredLocations = [region]

client = cosmos_client.CosmosClient(self.account_endpoint, {
                                    'masterKey': self.account_key}, connection_policy, documents.ConsistencyLevel.Session)

Go 软件开发工具包 (SDK)

若要在应用程序中启用多区域,请在 PreferredRegionsClientOptions 中使用:

client, err := azcosmos.NewClient(endpoint, token, &azcosmos.ClientOptions{
	PreferredRegions: []string{"West US", "Central US"},
})

后续步骤