透過 Private Service Connect 存取多區域 MongoDB Atlas

1. 簡介

Private Service Connect (PSC) 可簡化安全私密的服務使用方式。這個模型可讓服務使用者私密連線至不同機構的服務供應商,因此網路架構會變得簡單許多,而且不需要虛擬私有雲對等互連。圖 1 說明 VPC 對等互連和 PSC 屬性。

圖 1. 4f9551fc32ed83f5.png

身為服務用戶,您可以彈性選擇如何將私人 IP 分配給服務,同時免除管理生產端 VPC 子網路範圍的負擔。您現在可以使用服務連結,將所選虛擬私人雲端網路的虛擬 IP 指派給這類服務。

在本程式碼研究室中,您將建構完整的 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. 用戶端虛擬私有雲和相關聯的 VM,用於存取 us-west1 和 us-west2 中的 MongoDB 叢集。
  3. 在 us-west1 和 us-west2 地區分別建立一個 VPC 和兩個子網路,每個子網路至少有 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. 事前準備

更新專案以支援程式碼研究室

本程式碼研究室會使用 $variables 協助在 Cloud Shell 中實作 gcloud 設定。

在 Cloud Shell 中執行下列操作:

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

5. 消費者設定

建立消費者虛擬私有雲

在 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 設定

由於 VM 執行個體沒有外部 IP 位址,因此本程式碼研究室會使用 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 連線至您的 VM 執行個體,請根據以下條件建立防火牆規則:

  • 套用至所有您希望能透過 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 的範例。請務必選取內建的「Role」讀取權限,並將其寫入任何資料庫。

f622ab14ddc96fc7.png

  • 在「安全性」→「網路存取」下方,IP 存取清單不需要輸入項目

在 MongoDB Atlas 中準備私人端點

  • 依序選取「網路存取」→「私人端點」→「專屬叢集」→「新增私人端點」88f5c1d9ae7e46d9.png

雲端服務供應商

  • 選取 Google Cloud,然後點選下一步

5503248bf4019a35.png

服務連結

  • 選取地區 us-west1,然後點選「下一步」

cb31aea7cad182f9.png

端點

  • 如要建立私人服務連線端點,請提供下列資訊:
  • Google Cloud 專案 ID:選取「顯示操作說明」即可瞭解詳情
  • 虛擬私有雲名稱:consumer-vpc
  • 子網路名稱:psc-endpoint-us-west1
  • Private Service Connect 端點前置字串:psc-endpoint-us-west1

21d76af5367832f4.png

設定端點

在下一個部分,系統會產生一個殼層指令碼,您應將其儲存在本機上,並命名為 setup_psc.sh。儲存後,請編輯 Shell 指令碼,允許 psc 全域存取權。您可以在 Google Cloud 專案的 Cloud Shell 中執行這項操作。

  • 範例殼層指令碼,您的輸出內容會顯示不同的值

5c80cf7315a05c25.png

  • 從 MongoDB 控制台複製 Shell 指令碼,並將內容儲存在 Google 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

更新殼層指令碼以支援全域存取權

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

執行殼層指令碼

前往並執行指令碼 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 UI 中,前往專案,然後依序前往「Security」(安全性) →「Network access」(網路存取) →「Private endpoint」(私人端點)。選取分頁、專屬叢集,端點轉換為可用狀態需要 10 分鐘。

可用狀態

972aff09d180d9de.png

在 Google Cloud 控制台中,前往「Network services」→「Private Services Connect」,選取「Connected endpoint」分頁標籤,顯示消費者端點從「Pending」變更為「Accepted」的狀態,如下所示:

5472dd938604b3.png

8. 建立 us-west2 私人端點

  • 登入 Atlas 帳戶,然後前往專案。

在 MongoDB Atlas 中準備私人端點

  • 依序選取「網路存取」→「私人端點」→「專屬叢集」→「新增私人端點」88f5c1d9ae7e46d9.png

雲端服務供應商

  • 選取 Google Cloud,然後點選下一步

5503248bf4019a35.png

服務連結

  • 選取地區 (us-west2),然後點選「下一步」

fc0b7a8e4274be3b.png

端點

  • 如要建立私人服務連線端點,請提供下列資訊:
  • Google Cloud 專案 ID:選取「顯示操作說明」即可瞭解詳情
  • 虛擬私有雲名稱:consumer-vpc
  • 子網路名稱:psc-endpoint-us-west2
  • Private Service Connect 端點前置字串:psc-endpoint-us-west2

17b5a056587ede8a.png

設定端點

在下一個部分,系統會產生一個殼層指令碼,您應將其儲存在本機上,並命名為 setup_psc.sh。儲存後,請編輯 Shell 指令碼,允許 psc 全域存取權。您可以在 Google Cloud 專案的 Cloud Shell 中執行這項操作。

  • 範例殼層指令碼,您的輸出內容會顯示不同的值

b021821e7d59f450.png

  • 從 MongoDB 控制台複製 Shell 指令碼,並將內容儲存在 Google 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

更新殼層指令碼以支援全域存取權

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

執行殼層指令碼

前往並執行指令碼 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 UI 中,前往專案,然後依序前往「Security」(安全性) →「Network access」(網路存取) →「Private endpoint」(私人端點)。選取分頁、專屬叢集,端點會在 10 分鐘後轉換為可用。

可用狀態:

8801df4f6b39d20a.png

在 Google Cloud 控制台中,前往「Network services」→「Private Services Connect」,選取「Connected endpoint」分頁標籤,查看消費者端點的狀態是否已從「Pending」變更為「Accepted」,如下所示。在消費者端點中部署了總共 100 個端點,需要先改為已接受,才能進入下一個步驟。

6131abcdef5c1f49.png

9. 透過私人端點連線至 MongoDB Atlas

私人服務連線接受後,系統需要額外時間 (10 到 15 分鐘) 才能更新 MongoDB 叢集。在 MongoDB 使用者介面中,灰色輪廓代表叢集更新,因此無法連線至私人端點。

c1524d2c0c5765d1.png

找出部署作業並選取「連線」(請注意,灰色方塊已不再顯示)

3eea96af20bfad20.png

選擇連線類型 → 私人端點,然後選取「選擇連線方法」

16a9090e495640c7.png

選取「Connect with the 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

透過 OS 執行安裝作業

透過 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 登入 OS 中執行下列操作。

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 UI。
  • 按一下叢集名稱 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,驗證私人服務連線全球存取權。

如果 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 登入 OS 中執行下列操作。

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 登入 OS 中執行下列操作。

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

exit

20c2571d84c0661d.png

成功:您已驗證 PSC 全球存取權可讓消費者端在各區域之間順暢連線,以便在發生區域性停機時提高可用性。在程式碼研究室中,MongoDB 地區容錯移轉發生在位於 us-west1 的主要節點,因此次要區域 us-west2 接管了主要節點。雖然叢集導致區域性中斷,位於 us-west1 的消費者 vm1 仍可成功連線至 us-west2 中的新主要叢集。

12. 清理

在 Cloud 控制台中刪除消費者端點

前往「網路服務」→「Private Service Connect」→「已連線的端點」

使用 psc-endpoint 篩選器,避免系統可能刪除非實驗室消費者端點。選取所有端點 → 刪除

192548e374b444a1.png

刪除與消費者端點相關聯的靜態內部 IP 位址

前往「VPC network」→「consumer-vpc」→「STATIC INTERNAL IP ADDRESSES」

使用 psc-endpoint 篩選器,避免系統刪除非實驗室消費者端點,並將每頁的資料列數增加至 100 列。選取所有端點 → 發布

4cebf164c4fecd83.png

在 Cloud Shell 中刪除程式碼研究室元件。

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 UI 中,依序前往「Security」→「Network Access」→「Private Endpoint」→ 選取「Terminate」

56415ea954b2fec9.png

13. 恭喜

恭喜!您已成功設定及驗證 Private Service Connect 端點,可在全球各地存取 MongoDB。您已成功建立消費端 VPC、多區域 MongoDB 和消費端端點。位於 us-west1 的 VM 在區域容錯移轉時,成功連線至 us-west1 和 us-west2 中的 MongoDB。

Cosmopup 認為程式碼研究室很棒!

8c2a10eb841f7b01.jpeg

後續步驟

查看一些程式碼研究室…

其他參考資料和影片

參考文件