Compartilhar via

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

适用对象: Mongodb

重要

你是否正在寻找一种数据库解决方案,以应对需要高扩展性、99.999% 可用性服务级别协议(SLA)、即时自动扩展和跨多个区域的自动故障转移的场景? 请考虑使用 Azure Cosmos DB for NoSQL

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

本文涵盖以下任务:

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

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

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

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

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

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

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

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

选择多区域数据库区域

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

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

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

为了实现 BCDR,建议根据Azure 中的跨区域复制:业务连续性和灾难恢复一文中描述的区域对来增加新的区域。

验证您的区域设置

使用 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 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"
   }

连接到首选区域

使用适用于 MongoDB 的 Azure Cosmos DB 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 North2");
collection = collection.WithReadPreference(new ReadPreference(ReadPreferenceMode.Secondary, new[] { new TagSet(new[] { tag }) }));

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

后续步骤

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

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

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

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

  • 若只知道现有数据库群集中的 vCore 和服务器数量,请阅读使用 vCore 或 vCPU 估算请求单位
  • 如果您知道当前数据库工作负荷的典型请求速率,请阅读有关使用 Azure Cosmos DB 容量规划工具来估计请求单位的文章