使用 Private Service Connect 访问多区域 MongoDB Atlas

1. 简介

Private Service Connect (PSC) 简化了安全私密地使用服务的方式。这种模式允许服务使用方与跨组织的服务提供方建立专用连接,从而大大简化了网络架构,并无需进行虚拟私有云对等互连。图 1 展示了 VPC 对等互连和 PSC 属性。

图 1. 4f9551fc32ed83f5.png

作为服务使用方,您可以灵活选择如何向服务分配专用 IP,同时无需为提供方 VPC 管理子网范围。现在,您只需使用服务连接,即可将 VPC 中所选的虚拟 IP 地址分配给此类服务。

在此 Codelab 中,您将构建一个全面的 Private Service Connect 架构,演示如何将 PSC 全球访问权限与 MongoDB Atlas 搭配使用。

借助全球访问权限,客户端可以跨区域边界连接到 Private Service Connect (PSC)。这对于在多个区域托管的托管式服务中实现高可用性,或允许客户端访问与其不在同一区域的服务非常有用。

2. 启用全球访问权限

全局访问权限是一项可选功能,在使用方转发规则上进行配置。以下命令展示了其配置方式:

gcloud beta compute forwarding-rules create psc-west \
    --region=us-west1 \
    --network=consumer-vpc \
    --address=psc-west-address \
    --target-service-attachment=projects/.../serviceAttachments/sa-west \
    --allow-psc-global-access
  • --allow-psc-global-access 标志可在 Private Service Connect 端点上启用全球访问权限
  • 借助全球访问权限,客户端可以位于与 Private Service Connect 转发规则不同的区域,但转发规则仍必须与其关联的服务附件位于同一区域。
  • 您无需对生产者的服务附件进行任何配置,即可启用全球访问权限。这完全是使用方端的选项。

您还可以随时为现有端点开启或关闭全球访问权限。在现有端点上启用全球访问权限后,活跃连接不会发生流量中断。您可以使用以下命令在现有转发规则上启用全球访问:

gcloud beta compute forwarding-rules update psc-west --allow-psc-global-access

停用全球访问权限

您还可以使用 --no-allow-psc-global-access 标志在现有转发规则中停用全球访问权限。请注意,运行此命令后,所有有效的区域间流量都将终止。

gcloud beta compute forwarding-rules update psc-west --no-allow-psc-global-access

3. 您将构建的内容

  1. 系统将创建一个多区域 MongoDB Atlas 集群(图 2 中所述的拓扑),其中 us-west1 区域有 1 个节点,us-west2 区域有 2 个节点。
  2. 一个使用方 VPC 和关联的虚拟机,用于访问 us-west1 和 us-west2 中的 MongoDB 集群。
  3. 一个 VPC 和两个子网,分别位于 us-west1 和 us-west2 区域,每个子网中至少有 64 个可用的 IP 地址(使用 /26 及更小掩码创建子网)。

MongoDB 客户端将安装在使用方 VPC 中的 vm1 上。当 us-west1 中的主节点发生故障时,客户端将能够通过 us-west2 中的新主节点进行读写。

图 2. ab6c2791514c4481.png

学习内容

  • 如何创建部署在两个区域的 VPC 和子网
  • 如何部署多区域 MongoDB Atlas 集群
  • 如何创建专用端点
  • 如何连接到 MongoDB
  • 如何执行和验证多区域 MongoDB 故障切换

所需条件

  • Google Cloud 项目
  • 为每个区域提供一个 /26 子网
  • 项目所有者或组织所有者有权访问 MongoDB Atlas,以创建集群层级为 M10 或更高级别的 MongoDB 集群。(请使用 GETATLAS 获取运行 PoV 的免费赠金)

4. 准备工作

更新项目以支持 Codelab

此 Codelab 使用 $variables 来帮助在 Cloud Shell 中实现 gcloud 配置。

在 Cloud Shell 中,执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

5. 使用方设置

创建使用方 VPC

在 Cloud Shell 中,执行以下操作:

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

创建使用方子网

在 Cloud Shell 中,执行以下操作:

gcloud compute networks subnets create vm-subnet --project=$projectname --range=10.10.10.0/29 --network=consumer-vpc --region=us-west1

在 Cloud Shell 中,为 us-west1 创建使用方端点:

gcloud compute networks subnets create psc-endpoint-us-west1 --project=$projectname --range=192.168.10.0/26 --network=consumer-vpc --region=us-west1

在 Cloud Shell 中,为 us-west2 创建使用方端点:

gcloud compute networks subnets create psc-endpoint-us-west2 --project=$projectname --range=172.16.10.0/26 --network=consumer-vpc --region=us-west2

Cloud Router 和 NAT 配置

由于虚拟机实例没有外部 IP 地址,因此本 Codelab 中使用 Cloud NAT 来安装软件包。

在 Cloud Shell 中,创建 Cloud Router 路由器。

gcloud compute routers create consumer-cr --network consumer-vpc --region us-west1

在 Cloud Shell 中,创建 NAT 网关。

gcloud compute routers nats create consumer-nat --router=consumer-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

实例 vm1 配置

在下一部分中,您将创建 Compute Engine 实例 vm1。

在 Cloud Shell 中,创建实例 vm1。

gcloud compute instances create vm1 \
    --project=$projectname \
    --zone=us-west1-a \
    --machine-type=e2-micro \
    --network-interface=subnet=vm-subnet,no-address \
    --maintenance-policy=MIGRATE \
    --provisioning-model=STANDARD \
--create-disk=auto-delete=yes,boot=yes,device-name=vm1,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20230213,mode=rw,size=10,type=projects/$projectname/zones/us-west1-a/diskTypes/pd-balanced
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump -y
      sudo apt-get install dnsutils -y"

如需允许 IAP 连接到您的虚拟机实例,请创建一个防火墙规则,该规则:

  • 适用于您希望使用 IAP 可访问的所有 VM 实例。
  • 允许来自 IP 地址范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

在 Cloud Shell 中,创建 IAP 防火墙规则。

gcloud compute firewall-rules create ssh-iap-consumer-vpc \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

6. 创建多区域 MongoDB Atlas 集群

  • 我们需要先设置 Atlas 集群,然后才能开始设置 PSC。您可以通过以下两种方式之一订阅 MongoDB Atlas:
  • 通过 Google Cloud Marketplace(如果您有 Google Cloud 账号)。如需设置订阅,请参阅文档
  • Atlas 注册页面
  • 订阅 Atlas 后,点击“构建数据库”按钮,如下所示。

796f5bda844bf400.png

  • 创建新集群 → 专用

56c340661d86962c.png

  • 云服务提供商和区域 → Google Cloud
  • 多云、多区域和工作负载隔离 → 已选(蓝色对勾标记)

6c10293ffd9814ae.png

  • 可选举的节点 → us-west1(1 个节点)、us-west2(2 个节点)

e652bd944d785871.png

  • 集群层级 → M10,将所有其他设置保留为默认设置

ffa0195b96c2c5ff.png

  • 集群名称 → psc-mongodb-uswest1-uswest2

3720fb8c15ba5cc2.png

  • 选择 → 创建集群

ec5e3e6983c02e27.png

  • 数据库创建需要 7-10 分钟

d75778d5abf484aa.png

部署后的集群视图

1f0ec6a401578650.png

7. 为 us-west1 创建专用端点

  • 登录您的 Atlas 账号,然后前往您的项目。

创建新用户以允许对任何数据库执行读/写访问

依次选择“安全性”→“数据库访问权限”,然后选择“添加新的数据库用户”。以下示例中的用户名和密码已配置为 Codelab 中的用户名和密码。请务必选择内置角色“对任何数据库执行读写操作”。

f622ab14ddc96fc7.png

  • 在“安全性”→“网络访问”下,IP 访问列表不需要条目

在 MongoDB Atlas 中准备专用端点

  • 依次选择“网络访问”→“专用端点”→“专用集群”→“添加专用端点”88f5c1d9ae7e46d9.png

云服务提供商

  • 选择 Google Cloud,然后点击“下一步”

5503248bf4019a35.png

服务连接

  • 选择区域 us-west1,然后选择“下一步”

cb31aea7cad182f9.png

Endpoints

  • 如需创建 Private Service Connect 端点,请提供以下信息:
  • Google Cloud 项目 ID:选择“显示说明”了解详情
  • VPC 名称:consumer-vpc
  • 子网名称:psc-endpoint-us-west1
  • Private Service Connect 端点前缀:psc-endpoint-us-west1

21d76af5367832f4.png

设置端点

在下一部分中,系统会生成一个应保存在本地并命名为 setup_psc.sh 的 shell 脚本。保存后,修改 shell 脚本以允许 psc 获得全球访问权限。您可以在 Google Cloud 项目 Cloud Shell 中执行此操作。

  • shell 脚本示例,您的输出将具有不同的值

5c80cf7315a05c25.png

  • 从 MongoBD 控制台中复制 shell 脚本,并将内容保存在 Google Cloud Cloud Shell 终端中,确保将脚本保存为 setup_psc.sh

更新前示例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

更新 shell 脚本以支持全球访问权限

使用 nano 或 vi 编辑器,使用以下语法识别并更新 shell 脚本:

gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access

更新后的示例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

运行 Shell 脚本

找到并执行脚本 setup_psc.sh,完成后,系统会创建一个名为 atlasEndpoints-psc-endpoint-us-west1.json 的文件。该 JSON 文件包含部署的下一步所需的 IP 地址和 Private Service Connect 端点名称列表。

在 Cloud Shell 中,执行以下操作:

sh setup_psc.sh

脚本运行完毕后,使用 Cloud Shell 编辑器在本地下载 atlasEndpoints-psc-endpoint-us-west1.json

2856802dd6497f51.png b0059dc8e1558891.png

上传 JSON 文件

上传之前保存的 JSON 文件 atlasEndpoints-psc-endpoint-us-west1.json

3a74e8d9952d793a.png

4938fd8256eb81b4.png

选择“创建”

验证 Private Service Connect 端点

在 MongoDB 界面中,依次前往您的项目、安全性 → 网络访问权限 → 专用端点。选择“专用集群”标签页后,端点需要 10 分钟才能转换为“可用”。

可用状态

972aff09d180d9de.png

在 Google Cloud 控制台中,依次前往“网络服务”→“Private Service Connect”,然后选择“已连接的端点”标签页,其中会显示处于“待处理”状态的使用方端点正在转换为“已接受”状态,示例如下:

5472dd938604b3.png

8. 为 us-west2 创建专用端点

  • 登录您的 Atlas 账号,然后前往您的项目。

在 MongoDB Atlas 中准备专用端点

  • 依次选择“网络访问”→“专用端点”→“专用集群”→“添加专用端点”88f5c1d9ae7e46d9.png

云服务提供商

  • 选择 Google Cloud,然后点击“下一步”

5503248bf4019a35.png

服务连接

  • 选择区域(us-west2),然后选择“下一步”

fc0b7a8e4274be3b.png

Endpoints

  • 如需创建 Private Service Connect 端点,请提供以下信息:
  • Google Cloud 项目 ID:选择“显示说明”了解详情
  • VPC 名称:consumer-vpc
  • 子网名称:psc-endpoint-us-west2
  • Private Service Connect 端点前缀:psc-endpoint-us-west2

17b5a056587ede8a.png

设置端点

在下一部分中,系统会生成一个应保存在本地并命名为 setup_psc.sh 的 shell 脚本。保存后,修改 shell 脚本以允许 psc 获得全球访问权限。您可以在 Google Cloud 项目 Cloud Shell 中执行此操作。

  • shell 脚本示例,您的输出将具有不同的值

b021821e7d59f450.png

  • 从 MongoBD 控制台中复制 shell 脚本,并将内容保存在 Google Cloud Cloud Shell 终端中,确保将脚本保存为 setup_psc.sh

更新前的示例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

更新 shell 脚本以支持全球访问权限

使用 nano 或 vi 编辑器,使用以下语法识别并更新 shell 脚本:

gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

更新后的示例:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

运行 Shell 脚本

打开并执行脚本 setup_psc.sh,完成后,系统会创建一个名为 atlasEndpoints-psc-endpoint-us-west2.json 的文件。json 文件包含部署的下一步所需的 IP 地址和 Private Service Connect 端点名称列表。

在 Cloud Shell 中,执行以下操作:

sh setup_psc.sh

脚本运行完毕后,使用 Cloud Shell 编辑器在本地下载 atlasEndpoints-psc-endpoint-us-west2.json。

2856802dd6497f51.png 6e3d944944718f13.png

上传 JSON 文件

上传之前保存的 JSON 文件 atlasEndpoints-psc-endpoint-us-west2.json

3a74e8d9952d793a.png

4938fd8256eb81b4.png

选择“创建”

验证 Private Service Connect 端点

在 MongoDB 界面中,依次前往您的项目、安全性 → 网络访问权限 → 专用端点。选择“专用集群”标签页后,端点会在 10 分钟后变为可用。

可用状态:

8801df4f6b39d20a.png

在 Google Cloud 控制台中,依次前往“网络服务”→“Private Service Connect”,然后选择“已连接的端点”标签页,其中会显示使用方端点从“待处理”转换为“已接受”的状态,如下例所示。在使用方端点中部署了 100 个端点,需要先转换为“已接受”状态,然后才能执行下一步。

6131abcdef5c1f49.png

9. 通过专用端点连接到 MongoDB Atlas

接受专用服务连接后,系统需要额外的时间(10-15 分钟)来更新 MongoDB 集群。在 MongoDB 界面中,灰色轮廓表示集群更新,因此无法连接到专用端点。

c1524d2c0c5765d1.png

找到相应部署,然后选择“连接”(请注意,灰色框不再显示)

3eea96af20bfad20.png

选择连接类型 → 私有端点,然后选择“选择连接方法”

16a9090e495640c7.png

选择“使用 MongoDB Shell 连接”

35e422af16cb5ce0.png

选择“我未安装 MongoDB Shell,Ubuntu 20.4”,并确保将第 1 步和第 3 步的内容复制到记事本中。

51be47403c00bab4.png

10. 安装 mongosh 应用

在安装之前,您需要根据第 1 步和第 3 步中获取的先前复制的值创建命令字符串。之后,您将使用 Cloud Shell 通过 SSH 连接到 vm1,然后在主数据库 (us-west1) 中安装和验证 mongosh 应用。在 consumer-vpc 中创建 vm1 时,安装了 Ubuntu 20.4 映像。

选择连接方法:第 1 步,复制下载网址

5da980ff86265dd8.png

命令字符串示例,请替换为您的自定义值:

https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

选择连接方法(第 3 步)。

698286bdf3dee3c7.png

命令字符串示例,请将其中的值替换为您的自定义值:

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

登录 vm1

在 Cloud Shell 中,执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

在 Cloud Shell 中使用 IAP 登录 vm1,如果超时,请重试。

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

通过操作系统执行安装

通过 Cloud Shell 操作系统登录执行安装,可参阅更多详细信息,使用自定义字符串更新以下语法

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

该操作应返回

OK

.

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

sudo apt-get update -y

wget https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

sudo dpkg -i mongodb-mongosh_1.7.1_amd64.deb

连接到 MongoDB 部署

在 Cloud Shell 中登录后,执行以下操作。配置的用户名和密码为 codelab。

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

示例如下:

d5d0324a273b4d5e.png

针对数据库执行命令

在 Cloud Shell 中登录后,执行以下操作。

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne({"Name":"cosmo"})

11. 故障切换的主动 MongoDB 区域,us-west1

在执行故障切换之前,我们先验证一下 us-west1 是主节点,us-west2 有两个辅助节点。

依次前往“数据库”→“psc-mongodb-uswest1-uswest2”→“概览”

64ca0395807bb3ac.png

在下一部分中,登录位于 us-west1 的 vm1,将主 MongoDB 集群区域 us-west1 切换到故障转移状态,然后验证数据库是否仍可从 us-west2 中的 MongoDB 集群访问。

您可以通过 Atlas 界面同时测试主副本故障切换和区域故障切换。

  • 登录 Atlas 界面。
  • 点击集群名称 psc-mongodb-uswest1-uswest2 旁边的 [...] →“测试服务中断”。

3a50da4381817975.png

  • 依次选择“区域性服务中断”→“选择地区”。

b8dfff376477bcbb.png

  • 依次选择主区域 us-west1 →“模拟区域性服务中断”。

76494a750a040bc5.png

选择集群后,3-4 分钟后集群将显示服务中断模拟

关闭窗口

3a9f0359bd4e288f.png

bac1b2db0d754bbf.png

验证 us-west1 处于停机状态,并且 us-west2 现在已接管为主服务器

依次前往“数据库”→“psc-mongodb-uswest1-uswest2”→“概览”

86fd7d5230715645.png

通过新主副本 us-west2 验证与集群的连接

登录位于 us-west1 的 vm1,然后访问 us-west2 中的 MongoDB,以验证 Private Service Connect 全局访问权限。

如果您的 Cloud Shell 会话终止,请执行以下操作:

在 Cloud Shell 中,执行以下操作:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

在 Cloud Shell 中使用 IAP 登录 vm1,如果超时,请重试。

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

连接到 MongoDB 部署

在 Cloud Shell 中登录后,执行以下操作。

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

示例如下:

d262800a557b41a3.png

针对数据库执行命令

在 Cloud Shell 中登录后,执行以下操作。

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne()

exit

20c2571d84c0661d.png

成功:您已验证 PSC 全球访问权限可让使用方端点在各个区域之间实现无缝连接,从而实现高可用性或应对区域性服务中断。在本 Codelab 中,位于 us-west1 的主节点发生了 MongoDB 区域故障切换,因此辅助区域 us-west2 接管了主区域。虽然该集群导致了区域性中断,但位于 us-west1 的使用方虚拟机 vm1 成功连接到了 us-west2 中的新主集群。

12. 清理

在 Cloud 控制台中删除使用方端点

依次前往“网络服务”→“Private Service Connect”→“已连接的端点”

使用过滤条件 psc-endpoint 可避免非实验版使用端点被删除。选择所有端点 → 删除

192548e374b444a1.png

删除与使用方端点关联的静态内部 IP 地址

依次前往“VPC 网络”→“consumer-vpc”→“静态内部 IP 地址”

使用过滤条件 psc-endpoint 可避免系统删除非实验性消费者端点,并将每页行数增加到 100 行。选择所有端点 → 发布

4cebf164c4fecd83.png

在 Cloud Shell 中,删除 Codelab 组件。

gcloud compute instances delete vm1 --zone=us-west1-a --quiet 

gcloud compute networks subnets delete psc-endpoint-us-west1 vm-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete psc-endpoint-us-west2 --region=us-west2 --quiet

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute routers delete consumer-cr --region=us-west1 --quiet 

gcloud compute networks delete consumer-vpc --quiet

在 Atlas 界面中,找到集群 psc-mongodb-uswest1-uswest2 → 结束模拟

f82e28ac984d9e20.png

依次选择“结束服务中断模拟”->“退出”

38feaf055abdceea.png

集群现在正在将 us-west1 恢复为主节点,此过程将需要 3 到 4 分钟。完成后,终止集群,并注意灰色轮廓,它表示状态已更改。

f249a61bcc966d41.png

9427a9349daa1fea.png

插入集群名称 → 终止

9ef6d3a6387c5b4b.png

删除与 us-west1 和 us-west2 关联的专用端点

在 Atlas 界面中,依次选择“安全性”→“网络访问”→“专用端点”→“选择终止”

56415ea954b2fec9.png

13. 恭喜

恭喜,您已成功配置并验证了一个 Private Service Connect 端点,该端点可跨区域访问 MongoDB。您已成功创建使用方 VPC、多区域 MongoDB 和使用方端点。位于 us-west1 的虚拟机在区域故障转移后,成功连接到 us-west1 和 us-west2 中的 MongoDB。

Cosmopup 认为 Codelab 很棒!

8c2a10eb841f7b01.jpeg

后续操作

查看下列 Codelab…

深入阅读和视频

参考文档