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

在 Azure Cosmos DB for MongoDB vCore 中创建和使用跨区域群集副本

在此指南中,你将在另一个区域中创建 Azure Cosmos DB for MongoDB vCore 群集的群集副本,以进行灾难恢复 (DR)。 此副本群集会将所有 MongoDB 资源(数据库、集合和文档)的副本存储在另一个 Azure 区域中。 副本群集为要连接到的各种工具和 SDK 提供唯一的终结点,如果主要区域中断,则可以提升为可供写入使用。

先决条件

在另一个区域中创建新群集及其副本

使用 Azure Cosmos DB for MongoDB vCore 在另一区域中创建具有群集只读副本的 MongoDB 群集。

提示

对于本指南,建议使用资源组名称 msdocs-cosmos-quickstart-rg

  1. 登录 Azure 门户

  2. 在 Azure 门户菜单或主页中,选择“创建资源” 。

  3. 在“新建”页面中搜索“Azure Cosmos DB”,然后选择它。

  4. 在“哪种 API 最适合你的工作负载?”页上,在“Azure Cosmos DB for MongoDB”部分中选择“创建”选项。

    Azure Cosmos DB 的“选择 API 选项”页的屏幕截图。

  5. 在“哪种类型的资源?”页上,选择 vCore 群集部分中的“创建”选项。 有关详细信息,请参阅 Azure Cosmos DB for MongoDB 中 vCore 体系结构的概述

    Azure Cosmos DB for MongoDB 的“选择资源类型”选项页的屏幕截图。

  6. 在“创建 Azure Cosmos DB for MongoDB 群集”页上,选择“群集层”部分中的“配置”选项。

    新 Azure Cosmos DB for MongoDB 群集的群集配置选项的屏幕截图。

  7. 在“缩放”页上,将选项设置为默认值:

    设置 “值”
    分片计数 1 个分片
    群集层 M30 层,2 个 vCore,8 GiB RAM
    存储 128 GiB
  8. 取消选择高可用性选项。 在“高可用性 (HA) 确认”部分中,选择“我了解”。 最后,选择保存以将更改保存到群集配置。

    区域内高可用性提供了一个区域内解决方案,其中群集中每个分片中的数据副本流式传输到位于同一区域中但位于不同可用性区域 (AZ) 的备用副本。 高可用性使用同步复制,不会丢失数据,会自动进行故障检测和故障转移,同时在故障转移后保留连接字符串不变。 可以在主群集上启用高可用性,以增加保护层免受故障的影响。

    群集的群集层和缩放选项的屏幕截图。

  9. 返回群集页,输入以下信息:

    设置 说明
    订阅 订阅名称 选择要用于此 Azure Cosmos DB for MongoDB 群集及其副本群集的 Azure 订阅。
    资源组 资源组名称 选择一个资源组,或者选择“新建”,然后输入新资源组的唯一名称。
    群集名称 全局唯一名称 输入用于标识你的 Azure Cosmos DB for MongoDB 群集的名称。 该名称用作后缀为“mongodbcluster.cosmos.azure.com”的完全限定的域名 (FQDN) 的一部分,因此该名称必须全局唯一。 名称只能包含小写字母、数字和连字符 (-)。 名称的长度也必须介于 3 到 40 个字符之间。
    位置 离用户最近的区域 选择一个地理位置,用于托管具有读取和写入功能(主群集)的 Azure Cosmos DB for MongoDB 群集。 使用离用户最近的位置,使他们能够以最快的速度访问数据。
    MongoDB 版本 要在群集上运行的 MongoDB 的版本 此值设置为最新可用的 MongoDB 版本的默认值。
    管理员用户名 提供用于访问群集的用户名 此用户以用户管理员身份在群集上创建。
    密码 使用唯一密码与用户名配对 密码必须至少为 8 个字符,最多为 128 个字符。

    群集的各种配置选项的屏幕截图。

  10. 选择“下一步: 全局分发”

  11. 在“全局分发”选项卡上,为“另一区域中的只读副本”选择“启用”,以创建群集只读副本作为此新主群集预配的一部分。

  12. 在“只读副本名称”字段中,输入群集只读副本的名称。 它应该是全局唯一的群集名称。

  13. 从“只读副本区域”下拉列表中选择一个值。

    群集预配中的“全局分发”选项卡的屏幕截图。

  14. 选择“下一页:网络”。

  15. 在“网络”选项卡上选择“添加当前客户端 IP 地址”以使用 Azure 系统感知型计算机的公共 IP 地址创建防火墙规则

    群集的网络设置的屏幕截图。

验证 IP 地址,然后保存配置。 在某些情况下,Azure 门户识别出的 IP 地址与访问 Internet 和 Azure 服务时所使用的 IP 地址不同。 因此,可能需要更改起始 IP 和结束 IP 才能使规则正常生效。 使用搜索引擎或其他联机工具来查看自己的 IP 地址。 例如,搜索“我的 IP 是多少”。

当前主机公共 IP 地址的 Web 搜索结果的屏幕截图。

还可以选择添加 0.0.0.0 - 255.255.255.255 防火墙规则,以便不仅允许 IP,还允许可以访问整个 Internet 来访问群集。 在这种情况下,客户端仍必须使用正确的用户名和密码登录才能使用群集。 尽管如此,最好只在短时间内允许进行全球访问,并且仅允许用于非生产数据库。

  1. 选择“查看 + 创建”。

  2. 查看提供的设置,然后选择“创建”。 创建群集需要几分钟时间。 等待门户页显示“部署已完成”后再继续。

  3. 选择“转到资源”,转到 Azure Cosmos DB for MongoDB 群集页。

    群集的部署页的屏幕截图。

连接到主群集并引入数据

获取连接到 Azure 门户中的主群集(可读写)群集所需的连接字符串。

  1. 从 Azure Cosmos DB for MongoDB vCore 主群集页中,选择“连接字符串”导航菜单选项。

    群集属性中连接字符串页的屏幕截图。

  2. 从“自变量 (始终此群集)”字段复制值。

  3. 在命令行中,使用 MongoDB shell 通过连接字符串连接到主群集。

mongosh "mongodb+srv://<user>@<primary_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"

引入数据

创建 my_script.js 脚本文件,以便从 MongoDB shell 运行它。

let dogDocs = [
  {
    name: "pooch",
    breed: "poodle",
    weight: "6 lbs"
  },
  {
    name: "mutt",
    breed: "bulldog",
    weight: "10 lbs"
  }
];

let catDocs = [
  {
    name: "minni", 
    breed: "persian",
    color: "white"
  },
  {
    name: "tinkle",
    breed: "bombay",
    color: "black"
  }
];

let dogIndex = { name : 1 };
let catIndex = { name : 1 };

let collInfoObjs = [ 
  { coll: "dogs", data: dogDocs, index: dogIndex }, 
  { coll: "cats", data: catDocs, index: catIndex } 
];

for (obj of collInfoObjs) {
    db[obj.coll].insertMany(obj.data);
    db[obj.coll].createIndex(obj.index);
}

此脚本文件创建两个集合,并将包含数据的文档插入到这些集合中。 将 my_script.js 文件保存在 MongoDB shell 会话可访问的文件夹中。

从连接到主要 MongoDB 群集的 MongoDB shell 运行脚本。

load(my_script.js);

在连接到主要 MongoDB 群集的 MongoDB shell 中,从数据库读取数据。

db.dogs.find();
db.cats.find();

启用对副本群集的访问

重要

副本群集始终在禁用网络访问的情况下创建。 创建副本群集后,应在副本群集上添加防火墙规则或创建专用终结点来启用读取操作。

  1. 从 Azure Cosmos DB for MongoDB vCore 主群集页中,选择“设置”下的“全局分发”页。

    主群集属性中全局分发页的屏幕截图。

  2. 在“只读副本”字段中选择“群集副本名称”,以在 Azure 门户中打开只读群集副本属性。

  3. 在“MongoDB vCore 副本群集”页上的“设置”下,选择“网络”

  4. 在“网络”页上选择“添加当前客户端 IP 地址”以使用 Azure 系统感知型计算机的公共 IP 地址创建防火墙规则

    只读副本群集上的网络页的屏幕截图。

    验证 IP 地址,然后保存配置。 在某些情况下,Azure 门户识别出的 IP 地址与访问 Internet 和 Azure 服务时所使用的 IP 地址不同。 还可以选择添加 0.0.0.0 - 255.255.255.255 防火墙规则,以便不仅允许 IP,还允许可以访问整个 Internet 来访问群集。 在这种情况下,客户端仍必须使用正确的用户名和密码登录才能使用群集。

  5. 在工具栏上选择“保存”,保存这些设置。 更新的网络设置可能需要几分钟才能生效。

连接到另一区域中的只读副本群集并读取数据

获取另一区域中读取群集副本的连接字符串。

  1. 在副本群集边栏上的“群集管理”下,选择“连接字符串”。

  2. 从“连接字符串”字段中复制值。

    重要

    只读副本群集的连接字符串包含创建副本期间选择的唯一副本群集名称。 只读副本群集的用户名和密码值始终与其主群集上的用户名和密码值相同。

  3. 在命令行中,使用 MongDB shell 通过其连接字符串连接到只读副本群集。

    mongosh "mongodb+srv://<user>@<cluster_replica_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"
    

从副本群集读取数据

在连接到副本群集的 MongoDB shell 中,从数据库读取数据。

db.dogs.find();
db.cats.find();

提升副本群集

若要将群集只读副本提升为读写群集,请执行以下步骤:

  1. 在门户中选择只读副本群集

  2. 在群集边栏的“群集管理”下,选择“全局分发”

  3. 在“全局分发”页上,选择工具栏上的“提升”,以启动将只读副本提升为读写群集。

    只读副本群集全局分发页的屏幕截图,其中显示了“提升”按钮。

  4. 在“提升群集”弹出窗口中,确认你了解副本升级的工作原理,然后选择“提升。 副本提升可能需要几分钟才能完成。

    只读副本群集全局分发页的屏幕截图,其中显示了“提升确认”弹出窗口。

写入到提升的群集副本

副本提升完成后,提升的副本将变为可供写入,以前的主群集则设置为只读。

使用其连接字符串,使用命令行中的 MongDB shell 连接到提升的的副本群集

mongosh "mongodb+srv://<user>@<promoted_replica_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"

在 MongoDB shell 会话中,执行写入操作。

db.createCollection('foxes')

使用命令行中的 MongDB shell 通过其连接字符串连接到新的副本群集(前主群集)。 可以使用自连接字符串或全局读写连接字符串。

mongosh "mongodb+srv://<user>@<new_replica_cluster_name>.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"

在 MongoDB shell 中,确认新副本(前主群集)上现在已禁用写入。

db.createCollection('bears')