使用 Azure Cosmos DB 的用于 MongoDB 的 API 设置多区域分布式数据库

本文将展示如何使用 Azure 门户设置一个多区域分布式数据库,并使用 Azure Cosmos DB 的用于 MongoDB 的 API 连接到该数据库。

本文涵盖以下任务:

有关 Azure Cosmos DB 中多区域数据库复制工作原理的详细信息,请参阅使用 Cosmos DB 全局分发数据

使用 Azure 门户添加全局数据库区域

在中国的所有 Azure 区域中都可使用 Azure Cosmos DB。 为数据库帐户选择默认的一致性级别后,可以关联一个或多个区域(具体取决于所选的默认一致性级别和多区域分发需求)。

  1. Azure 门户的左侧栏中,单击“Azure Cosmos DB”。

  2. 在“Azure Cosmos DB”页中,选择要修改的数据库帐户。

  3. 在“帐户”页上的菜单中单击“全局复制数据”。

  4. 在“全局复制数据”页中,通过单击地图中的区域选择要添加或删除的区域,并单击“保存”。 添加区域会产生费用,有关详细信息,请参阅定价页使用 Azure Cosmos DB 全局分发数据

    单击图中的区域可以添加或删除区域

添加第二个区域后,门户中的“全局复制数据”页上会启用“手动故障转移”选项。 可以使用此选项测试故障转移过程或更改主写入区域。 添加第三个区域后,会在同一页上启用“故障转移优先级”选项,以便更改读取的故障转移顺序。

选择全局数据库区域

配置两个或更多区域有两个常见方案:

  1. 向最终用户提供对数据的低延迟访问,而无论用户位于全球范围内的何位置
  2. 添加区域复原以实现业务连续性和灾难恢复 (BCDR)

若要向最终用户提供低延迟,建议在与应用程序用户所在位置对应的区域中同时部署应用程序和 Azure Cosmos DB。

验证区域设置

检查 Azure Cosmos DB 的用于 MongoDB 的 API 中的多区域配置的一种简单方法是从 Mongo Shell 运行 isMaster() 命令。

从 Mongo Shell:

   db.isMaster()

示例结果:

   {
      "_t": "IsMasterResponse",
      "ok": 1,
      "ismaster": true,
      "maxMessageSizeBytes": 4194304,
      "maxWriteBatchSize": 1000,
      "minWireVersion": 0,
      "maxWireVersion": 2,
      "tags": {
         "region": "China North "
      },
      "hosts": [
         "vishi-api-for-mongodb-chinaeast.documents.azure.cn:10255",
         "vishi-api-for-mongodb-chinanorth.documents.azure.cn:10255",
      ],
      "setName": "globaldb",
      "setVersion": 1,
      "primary": "vishi-api-for-mongodb-chinanorth.documents.azure.cn:10255",
      "me": "vishi-api-for-mongodb-chinanorth.documents.azure.cn:10255"
   }

连接到首选区域

使用 Azure Cosmos DB 的用于 MongoDB 的 API,可以为多区域分布式数据库指定集合的读取首选项。 为实现低延迟读取和多区域高可用性,建议将集合的读取首选项设置为“就近”。 当读取首选项配置为“就近”时,将从最近的区域进行读取。

var collection = database.GetCollection<BsonDocument>(collectionName);
collection = collection.WithReadPreference(new ReadPreference(ReadPreferenceMode.Nearest));

对于具有主读取/写入区域和用于灾难恢复 (DR) 方案的辅助区域的应用程序,建议将集合的读取首选项设置为“辅助优先”。 当读取首选项配置为“辅助优先”时,如果主区域不可用,将从辅助区域进行读取。

var collection = database.GetCollection<BsonDocument>(collectionName);
collection = collection.WithReadPreference(new ReadPreference(ReadPreferenceMode.SecondaryPreferred));

最后,如果愿意,可以手动指定读取区域。 可以在读取首选项内设置区域标记。

var collection = database.GetCollection<BsonDocument>(collectionName);
var tag = new Tag("region", "China East");
collection = collection.WithReadPreference(new ReadPreference(ReadPreferenceMode.Secondary, new[] { new TagSet(new[] { tag }) }));

本教程到此结束。 阅读 Azure Cosmos DB 中的一致性级别,了解如何管理多区域复制帐户的一致性。 有关 Azure Cosmos DB 中多区域数据库复制工作原理的详细信息,请参阅使用 Cosmos DB 多区域分配数据

后续步骤

在本教程中已完成以下操作:

  • 使用 Azure 门户配置多区域分发
  • 使用 Cosmos DB 的用于 MongoDB 的 API 配置多区域分发

现可继续学习下一个教程,了解如何使用 Azure Cosmos DB 本地模拟器在本地开发。