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

适用对象: MongoDB

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

本文涵盖以下任务:

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

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

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

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

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

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

    Click the regions in the map to add or remove them

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

选择多区域数据库区域

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

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

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

若要实现 BCDR,建议按照Azure 中的跨区域复制:业务连续性和灾难恢复一文中所述,根据区域对添加区域。

验证区域设置

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

从 Mongo Shell:

   db.isMaster()

示例结果:

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

连接到首选区域

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

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 North2");
collection = collection.WithReadPreference(new ReadPreference(ReadPreferenceMode.Secondary, new[] { new TagSet(new[] { tag }) }));

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

后续步骤

在本教程中,已完成以下内容:

  • 使用 Azure 门户配置多区域分布
  • 使用 Azure Cosmos DB API for MongoDB 配置多区域分布

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

尝试为迁移到 Azure Cosmos DB 进行容量规划? 可以使用有关现有数据库群集的信息进行容量规划。