การเข้าถึง MongoDB Atlas แบบหลายภูมิภาคด้วย Private Service Connect

1. บทนำ

Private Service Connect (PSC) ช่วยให้การใช้บริการอย่างปลอดภัยและเป็นส่วนตัวง่ายขึ้น โมเดลนี้ช่วยให้สถาปัตยกรรมเครือข่ายง่ายขึ้นอย่างมากด้วยการอนุญาตให้ผู้ใช้บริการเชื่อมต่อกับผู้ผลิตบริการแบบส่วนตัวในองค์กรต่างๆ และไม่จำเป็นต้องใช้การเพียร์ Virtual Private Cloud รูปที่ 1 แสดงแอตทริบิวต์การ Peering ของ VPC และ PSC

รูปที่ 1 4f9551fc32ed83f5.png

ในฐานะผู้ใช้บริการ คุณจะเลือกวิธีจัดสรร IP ส่วนตัวให้กับบริการได้อย่างยืดหยุ่น ในขณะเดียวกันก็ไม่ต้องรับภาระในการจัดการช่วงซับเน็ตสำหรับ VPC ของผู้ผลิต ตอนนี้คุณสามารถกำหนด IP เสมือนที่เลือกจาก VPC ให้กับบริการดังกล่าวได้โดยใช้ Service Connect

ใน 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 ได้ แต่กฎการส่งต่อยังคงต้องอยู่ในภูมิภาคเดียวกันกับ Service Attachment ที่เชื่อมต่ออยู่
  • ไม่จำเป็นต้องกำหนดค่าใน Service Attachment ของผู้ผลิตเพื่อเปิดใช้การเข้าถึงทั่วโลก ซึ่งเป็นตัวเลือกสำหรับผู้บริโภคโดยเฉพาะ

นอกจากนี้ คุณยังเปิดหรือปิดการเข้าถึงทั่วโลกสำหรับอุปกรณ์ปลายทางที่มีอยู่ได้ทุกเมื่อ การรับส่งข้อมูลจะไม่ถูกรบกวนสำหรับการเชื่อมต่อที่ใช้งานอยู่เมื่อเปิดใช้การเข้าถึงทั่วโลกในอุปกรณ์ปลายทางที่มีอยู่ เปิดใช้การเข้าถึงส่วนกลางในกฎการส่งต่อที่มีอยู่ด้วยคำสั่งต่อไปนี้

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) โดยมี 1 โหนดในภูมิภาค us-west1 และ 2 โหนดในภูมิภาค us-west2 ตามลำดับ
  2. VPC ของผู้ใช้และ VM ที่เชื่อมโยงเพื่อเข้าถึงคลัสเตอร์ MongoDB ใน us-west1 และ us-west2
  3. VPC และซับเน็ต 2 รายการในภูมิภาค us-west1 และ us-west2 ตามลำดับ โดยมีที่อยู่ IP ที่ว่างอย่างน้อย 64 รายการในแต่ละซับเน็ต (สร้างซับเน็ตที่มี /26 และต่ำกว่า)

ระบบจะติดตั้งไคลเอ็นต์ MongoDB ใน vm1 ใน VPC สำหรับผู้บริโภค เมื่อโหนดหลักล้มเหลวใน us-west1 ไคลเอ็นต์จะอ่าน/เขียนผ่านโหนดหลักใหม่ใน us-west2 ได้

รูปที่ 2 ab6c2791514c4481.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้าง VPC และซับเน็ตที่ติดตั้งใช้งานใน 2 ภูมิภาค
  • วิธีการทำให้ใช้งานได้คลัสเตอร์ MongoDB Atlas แบบหลายภูมิภาค
  • วิธีสร้าง Private Endpoint
  • วิธีเชื่อมต่อกับ MongoDB
  • วิธีการดำเนินการและตรวจสอบเฟลโอเวอร์ของ MongoDB หลายภูมิภาค

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • ระบุซับเน็ต /26 ต่อภูมิภาค
  • เจ้าของโปรเจ็กต์หรือเจ้าขององค์กรมีสิทธิ์เข้าถึง MongoDB Atlas เพื่อสร้างคลัสเตอร์ MongoDB ที่มีระดับคลัสเตอร์ M10 ขึ้นไป (โปรดใช้ GETATLAS เพื่อรับเครดิตฟรีสำหรับเรียกใช้ PoV)

4. ก่อนเริ่มต้น

อัปเดตโปรเจ็กต์เพื่อรองรับ Codelab

Codelab นี้ใช้ $variables เพื่อช่วยในการติดตั้งใช้งานการกำหนดค่า gcloud ใน Cloud Shell

ใน 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

Cloud NAT ใช้ใน Codelab สำหรับการติดตั้งแพ็กเกจซอฟต์แวร์เนื่องจากอินสแตนซ์ VM ไม่มีที่อยู่ IP ภายนอก

สร้าง Cloud Router ภายใน Cloud Shell

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

สร้างเกตเวย์ NAT ภายใน Cloud Shell

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

สร้างอินสแตนซ์ vm1 ภายใน Cloud Shell

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 ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้

  • มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
  • อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP

สร้างกฎไฟร์วอลล์ IAP ภายใน Cloud Shell

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 ได้ 2 วิธีดังนี้
  • ผ่าน 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. การสร้าง Private Endpoint สำหรับ us-west1

  • เข้าสู่ระบบบัญชี Atlas แล้วไปที่โปรเจ็กต์

สร้างผู้ใช้ใหม่เพื่อให้สิทธิ์การเข้าถึงแบบอ่าน/เขียนไปยังฐานข้อมูล

ความปลอดภัย → การเข้าถึงฐานข้อมูล เลือกเพิ่มผู้ใช้ฐานข้อมูลใหม่ ตัวอย่างต่อไปนี้คือชื่อผู้ใช้และรหัสผ่านที่กำหนดค่าเป็น codelab ตรวจสอบว่าได้เลือกบทบาทแบบอ่านและเขียนที่มีในตัวไปยังฐานข้อมูลแล้ว

f622ab14ddc96fc7.png

  • ในส่วนความปลอดภัย → การเข้าถึงเครือข่าย รายการการเข้าถึง IP ไม่จำเป็นต้องมีรายการ

เตรียมปลายทางส่วนตัวใน MongoDB Atlas

  • เลือกการเข้าถึงเครือข่าย → ปลายทางส่วนตัว → คลัสเตอร์เฉพาะ → เพิ่มปลายทางส่วนตัว 88f5c1d9ae7e46d9.png

ผู้ให้บริการคลาวด์

  • เลือก Google Cloud แล้วคลิกถัดไป

5503248bf4019a35.png

ไฟล์แนบบริการ

  • เลือกภูมิภาค us-west1 แล้วคลิกถัดไป

cb31aea7cad182f9.png

ปลายทาง

  • หากต้องการสร้างปลายทาง Private Service Connect ให้ระบุข้อมูลต่อไปนี้
  • รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google: เลือก 'แสดงวิธีการ' เพื่อดูรายละเอียด
  • ชื่อ VPC: consumer-vpc
  • ชื่อซับเน็ต: psc-endpoint-us-west1
  • คำนำหน้าของปลายทาง Private Service Connect: psc-endpoint-us-west1

21d76af5367832f4.png

ตั้งค่าอุปกรณ์ปลายทาง

ในส่วนต่อไปนี้ ระบบจะสร้างสคริปต์ของ Shell ที่ควรบันทึกไว้ในเครื่องชื่อ setup_psc.sh เมื่อบันทึกแล้ว ให้แก้ไขสคริปต์ของ Shell เพื่ออนุญาตการเข้าถึงแบบสากลของ psc คุณดำเนินการนี้ได้ภายใน Cloud Shell ของโปรเจ็กต์ Google Cloud

  • สคริปต์ของ Shell ตัวอย่าง เอาต์พุตจะมีค่าแตกต่างกัน

5c80cf7315a05c25.png

  • คัดลอกสคริปต์ของ Shell จากคอนโซล MongoDB และบันทึกเนื้อหาในเทอร์มินัล 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 Editor เพื่อดาวน์โหลด 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

ใน UI ของ 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

ปลายทาง

  • หากต้องการสร้างปลายทาง Private Service Connect ให้ระบุข้อมูลต่อไปนี้
  • รหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google: เลือก 'แสดงวิธีการ' เพื่อดูรายละเอียด
  • ชื่อ VPC: consumer-vpc
  • ชื่อซับเน็ต: psc-endpoint-us-west2
  • คำนำหน้าของปลายทาง Private Service Connect: psc-endpoint-us-west2

17b5a056587ede8a.png

ตั้งค่าอุปกรณ์ปลายทาง

ในส่วนต่อไปนี้ ระบบจะสร้างสคริปต์ของ Shell ที่ควรบันทึกไว้ในเครื่องชื่อ setup_psc.sh เมื่อบันทึกแล้ว ให้แก้ไขสคริปต์ของ Shell เพื่ออนุญาตการเข้าถึงแบบสากลของ psc คุณดำเนินการนี้ได้ภายใน Cloud Shell ของโปรเจ็กต์ Google Cloud

  • สคริปต์ของ Shell ตัวอย่าง เอาต์พุตจะมีค่าแตกต่างกัน

b021821e7d59f450.png

  • คัดลอกสคริปต์ของ Shell จากคอนโซล MongoDB และบันทึกเนื้อหาในเทอร์มินัล 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

ใน UI ของ MongoDB ให้ไปที่โปรเจ็กต์ ตามด้วยความปลอดภัย → การเข้าถึงเครือข่าย → ปลายทางส่วนตัว เมื่อเลือกแท็บ คลัสเตอร์เฉพาะ และการเปลี่ยนผ่านของอุปกรณ์ปลายทางแล้ว อุปกรณ์ปลายทางจะพร้อมใช้งานหลังจากผ่านไป 10 นาที

สถานะที่ใช้ได้

8801df4f6b39d20a.png

ในคอนโซล Google Cloud ให้ไปที่บริการเครือข่าย → Private Service Connect แล้วเลือกแท็บ "ปลายทางที่เชื่อมต่อ" ซึ่งแสดงปลายทางของผู้บริโภคที่เปลี่ยนสถานะเป็น "รอดำเนินการ" → "ยอมรับ" ดังตัวอย่างด้านล่าง ระบบจะติดตั้งใช้งานอุปกรณ์ปลายทางทั้งหมด 100 เครื่องในอุปกรณ์ปลายทางของผู้บริโภค และต้องเปลี่ยนไปเป็น "ยอมรับ" ก่อนที่จะไปยังขั้นตอนถัดไป

6131abcdef5c1f49.png

9. เชื่อมต่อกับ MongoDB Atlas จากปลายทางส่วนตัว

เมื่อยอมรับการเชื่อมต่อบริการส่วนตัวแล้ว คุณจะต้องใช้เวลาเพิ่มเติม (10-15 นาที) เพื่ออัปเดตคลัสเตอร์ MongoDB ใน UI ของ MongoDB เส้นขอบสีเทาแสดงถึงการอัปเดตคลัสเตอร์ จึงไม่สามารถเชื่อมต่อกับ Private Endpoint ได้

c1524d2c0c5765d1.png

ระบุการติดตั้งใช้งานและเลือกเชื่อมต่อ (โปรดทราบว่าไม่มีกล่องสีเทาอีกต่อไป)

3eea96af20bfad20.png

เลือกประเภทการเชื่อมต่อ → ปลายทางส่วนตัว แล้วเลือกเลือกวิธีการเชื่อมต่อ

16a9090e495640c7.png

เลือก เชื่อมต่อด้วย MongoDB Shell

35e422af16cb5ce0.png

เลือก "ฉันไม่ได้ติดตั้ง MongoDB Shell, Ubuntu 20.4" และตรวจสอบว่าได้คัดลอกเนื้อหาจากขั้นตอนที่ 1 และขั้นตอนที่ 3 ไปยัง Notepad แล้ว

51be47403c00bab4.png

10. ติดตั้งแอปพลิเคชัน mongosh

ก่อนการติดตั้ง คุณจะต้องสร้างสตริงคำสั่งตามค่าที่คัดลอกไว้ก่อนหน้านี้ในขั้นตอนที่ 1 และ 3 หลังจากนั้น คุณจะ SSH เข้าสู่ vm1 โดยใช้ Cloud Shell ตามด้วยการติดตั้งและการตรวจสอบแอปพลิเคชัน mongosh ในฐานข้อมูลหลัก (us-west1) ระบบได้ติดตั้งอิมเมจ Ubuntu 20.4 เมื่อสร้าง vm1 ใน consumer-vpc

เลือกวิธีการเชื่อมต่อ: ขั้นตอนที่ 1 คัดลอก URL การดาวน์โหลด

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

เข้าสู่ระบบ vm1 โดยใช้ IAP ใน Cloud Shell แล้วลองอีกครั้งหากหมดเวลา

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 ให้ทำดังนี้

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

11. เฟลโอเวอร์รีเจียน MongoDB ที่ใช้งานอยู่ ซึ่งก็คือ us-west1

ก่อนที่จะดำเนินการเฟลโอเวอร์ ให้ตรวจสอบว่า us-west1 เป็นโหนดหลักและ us-west2 มีโหนดรอง 2 โหนด

ไปที่ฐานข้อมูล → psc-mongodb-uswest1-uswest2 → ภาพรวม

64ca0395807bb3ac.png

ในส่วนต่อไปนี้ ให้เข้าสู่ระบบ vm1 ที่อยู่ใน us-west1 เฟลโอเวอร์ภูมิภาคคลัสเตอร์ MongoDB หลัก us-west1 และตรวจสอบว่ายังเข้าถึงฐานข้อมูลจากคลัสเตอร์ MongoDB ใน us-west2 ได้

คุณทดสอบทั้งการเฟลโอเวอร์หลักและการเฟลโอเวอร์ระดับภูมิภาคได้จาก UI ของ Atlas

  • เข้าสู่ระบบ UI ของ 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

เข้าสู่ระบบ vm1 ที่อยู่ใน us-west1 และเข้าถึง mongodb ใน us-west2 เพื่อตรวจสอบการเข้าถึงส่วนกลางของ Private Service Connect

หากเซสชัน Cloud Shell สิ้นสุดลง ให้ทำดังนี้

ใน Cloud Shell ให้ทำดังนี้

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

เข้าสู่ระบบ vm1 โดยใช้ IAP ใน Cloud Shell แล้วลองอีกครั้งหากหมดเวลา

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 เฟลโอเวอร์ระดับภูมิภาคของ MongoDB เกิดขึ้นในโหนดหลักที่ตั้งอยู่ใน us-west1 ดังนั้นภูมิภาครอง us-west2 จึงเข้ามาแทนที่โหนดหลัก แม้ว่าคลัสเตอร์จะทำให้เกิดการหยุดทำงานระดับภูมิภาค แต่ VM1 สำหรับผู้บริโภคซึ่งอยู่ใน us-west1 ก็เข้าถึงคลัสเตอร์หลักใหม่ใน us-west2 ได้สำเร็จ

12. ล้างข้อมูล

ลบปลายทางผู้ใช้จาก Cloud Console

ไปที่บริการเครือข่าย → Private Service Connect → ปลายทางที่เชื่อมต่อ

ใช้ตัวกรอง psc-endpoint เพื่อป้องกันการลบปลายทางสำหรับผู้ใช้ทั่วไปที่ไม่ได้อยู่ในห้องทดลอง เลือกอุปกรณ์ปลายทางทั้งหมด → ลบ

192548e374b444a1.png

ลบที่อยู่ IP ภายในแบบคงที่ที่เชื่อมโยงกับปลายทางของผู้บริโภค

ไปที่เครือข่าย VPC → consumer-vpc → STATIC INTERNAL IP ADDRESSES

ใช้ตัวกรอง psc-endpoint เพื่อป้องกันการลบอุปกรณ์ปลายทางสำหรับผู้ใช้ทั่วไปที่ไม่ใช่ในห้องทดลอง และเพิ่มจำนวนแถวต่อหน้าเป็น 100 เลือกปลายทางทั้งหมด → เผยแพร่

4cebf164c4fecd83.png

ลบคอมโพเนนต์ของ Codelab จาก 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

จาก UI ของ Atlas ให้ระบุคลัสเตอร์ psc-mongodb-uswest1-uswest2 → สิ้นสุดการจำลอง

f82e28ac984d9e20.png

เลือกสิ้นสุดการจำลองการหยุดทำงาน —> ออก

38feaf055abdceea.png

ตอนนี้คลัสเตอร์กำลังเปลี่ยนกลับไปใช้ us-west1 เป็นคลัสเตอร์หลัก ซึ่งกระบวนการนี้จะใช้เวลา 3-4 นาที เมื่อเสร็จสมบูรณ์แล้ว ให้สิ้นสุดคลัสเตอร์และสังเกตเส้นขอบสีเทาที่แสดงการเปลี่ยนแปลงสถานะ

f249a61bcc966d41.png

9427a9349daa1fea.png

แทรกชื่อคลัสเตอร์ → สิ้นสุด

9ef6d3a6387c5b4b.png

ลบ Private Endpoint ที่เชื่อมโยงกับ us-west1 และ us-west2

จาก UI ของ Atlas ให้ไปที่ความปลอดภัย → การเข้าถึงเครือข่าย → Private Endpoint → เลือกสิ้นสุด

56415ea954b2fec9.png

13. ขอแสดงความยินดี

ยินดีด้วย คุณกำหนดค่าและตรวจสอบปลายทาง Private Service Connect ที่มีการเข้าถึง MongoDB ทั่วโลกในภูมิภาคต่างๆ เรียบร้อยแล้ว คุณสร้าง VPC ของผู้ใช้, MongoDB แบบหลายภูมิภาค และปลายทางของผู้ใช้เรียบร้อยแล้ว VM ที่อยู่ใน us-west1 เชื่อมต่อกับ MongoDB ในทั้ง us-west1 และ us-west2 ได้สำเร็จเมื่อมีการเฟลโอเวอร์ในระดับภูมิภาค

Cosmopup คิดว่า Codelab นั้นยอดเยี่ยม!!

8c2a10eb841f7b01.jpeg

สิ่งต่อไปที่ควรทำ

ลองใช้ Codelab เหล่านี้

อ่านเพิ่มเติมและวิดีโอ

เอกสารอ้างอิง