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

1. 简介

Private Service Connect (PSC) 可简化安全私密地使用服务的方式。此模型允许服务使用方以私密方式连接到跨组织的服务提供方,从而无需使用虚拟私有云对等互连,大幅简化了网络架构。图 1 展示了 VPC 对等互连和 PSC 属性。

图 1. 4f9551fc32ed83f5.png

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

在此 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 区域,另外两个节点位于 us-west2 区域。
  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 可访问的所有虚拟机实例。
  • 允许来自 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 集群

  • 在开始设置 PSC 之前,我们需要先设置一个 Atlas 集群。您可以通过以下两种方式之一订阅 MongoDB Atlas:
  • 如果您有 Google Cloud 账号,可以通过 Google Cloud Marketplace 购买。如需设置订阅,请参阅文档
  • 通过 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

设置端点

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

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

5c80cf7315a05c25.png

  • 从 MongoDB 控制台复制 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

设置端点

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

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

b021821e7d59f450.png

  • 从 MongoDB 控制台复制 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

Private Service Connect 连接获得接受后,还需要额外的时间(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,然后安装 mongosh 应用并验证主 (us-west1) 数据库。在 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 → Test Outage。

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。选择所有端点 → RELEASE

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 界面中,依次前往“Security”(安全性)→“Network Access”(网络访问权限)→“Private Endpoint”(专用端点)→ 选择“Terminate”(终止)

56415ea954b2fec9.png

13. 恭喜

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

Cosmopup 认为 Codelab 非常棒!

8c2a10eb841f7b01.jpeg

后续操作

查看下列 Codelab…

深入阅读和视频

参考文档