使用 Azure Cosmos DB API for MongoDB 设置多区域分布式数据库
适用对象: MongoDB
本文介绍如何使用 Azure 门户设置一个多区域分布式数据库,并使用 Azure Cosmos DB API for MongoDB 连接到该数据库。
本文涵盖以下任务:
- 使用 Azure 门户配置多区域分布
- 使用 Azure Cosmos DB API for MongoDB 配置多区域分布
使用 Azure 门户添加多区域数据库区域
Azure Cosmos DB 面向中国的所有 Azure 区域提供。 为数据库帐户选择默认的一致性级别后,可以关联一个或多个区域(具体取决于所选的默认一致性级别和多区域分布需求)。
在 Azure 门户的左侧栏中,单击“Azure Cosmos DB”。
在“Azure Cosmos DB”页中,选择要修改的数据库帐户。
在“帐户”页上的菜单中单击“全局复制数据”。
在“全局复制数据”页中,通过单击地图中的区域选择要添加或删除的区域,并单击“保存”。 添加区域会产生费用,有关详细信息,请参阅定价页或使用 Azure Cosmos DB 多区域分布数据一文。
添加第二个区域后,门户中的“全局复制数据”页上会启用“手动故障转移”选项。 可以使用此选项测试故障转移过程或更改主写入区域。 添加第三个区域后,会在同一页上启用“故障转移优先级”选项,以便更改读取的故障转移顺序。
选择多区域数据库区域
配置两个或更多区域有两个常见方案:
- 向最终用户提供对数据的低延迟访问,而无论用户位于中国的何位置
- 添加区域复原以实现业务连续性和灾难恢复 (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 进行容量规划? 可以使用有关现有数据库群集的信息进行容量规划。
- 如果只知道现有数据库群集中的 vCore 和服务器数量,请阅读使用 vCore 或 vCPU 估算请求单位
- 若知道当前数据库工作负载的典型请求速率,请阅读使用 Azure Cosmos DB 容量计划工具估算请求单位