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

1. บทนำ

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

รูปที่ 1 4f9551fc32ed83f5.png

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

ในโค้ดแล็บนี้ คุณจะได้สร้างสถาปัตยกรรม 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
  • Flag --allow-psc-global-access เปิดใช้การเข้าถึงแบบรวมในปลายทาง Private Service Connect
  • การเข้าถึงแบบทั่วโลกช่วยให้ลูกค้าอยู่ในภูมิภาคอื่นจากกฎการส่งต่อ Private Service Connect ได้ แต่กฎการส่งต่อต้องยังอยู่ในภูมิภาคเดียวกับไฟล์แนบบริการที่เชื่อมต่ออยู่
  • ไม่จำเป็นต้องมีการกําหนดค่าในไฟล์แนบบริการของโปรดิวเซอร์เพื่อเปิดใช้การเข้าถึงทั่วโลก ตัวเลือกนี้ใช้ได้กับผู้บริโภคเท่านั้น

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

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

การปิดใช้การเข้าถึงแบบทั่วโลก

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

สิ่งที่ต้องมี

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

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

อัปเดตโปรเจ็กต์ให้รองรับ Codelab

Codelab นี้ใช้ตัวแปร $เพื่อช่วยให้การติดตั้งใช้งานการกําหนดค่า 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

สร้างปลายทางสำหรับผู้บริโภคของ us-west1 ใน Cloud Shell โดยทำดังนี้

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

สร้างปลายทางสำหรับผู้บริโภคของ us-west2 ใน Cloud Shell โดยทำดังนี้

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

การกำหนดค่าเราเตอร์ระบบคลาวด์และ NAT

ระบบใช้ Cloud NAT ในโค้ดแล็บสำหรับการติดตั้งแพ็กเกจซอฟต์แวร์ เนื่องจากอินสแตนซ์ 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. การสร้างปลายทางส่วนตัวสำหรับ us-west1

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

สร้างผู้ใช้ใหม่เพื่ออนุญาตให้เข้าถึงฐานข้อมูลแบบอ่าน/เขียน

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

f622ab14ddc96fc7.png

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

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

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

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

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

5503248bf4019a35.png

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

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

cb31aea7cad182f9.png

ปลายทาง

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

21d76af5367832f4.png

ตั้งค่าปลายทาง

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

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

5c80cf7315a05c25.png

  • คัดลอกสคริปต์เชลล์จากคอนโซล MongoBD และบันทึกเนื้อหาในเทอร์มินัล Cloud Shell ของ Google Cloud โปรดตรวจสอบว่าได้บันทึกสคริปต์เป็น 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 เพื่อระบุและอัปเดตสคริปต์เชลล์โดยใช้ไวยากรณ์ด้านล่าง

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

ใน 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 Cloud: เลือก "แสดงวิธีการ" เพื่อดูรายละเอียด
  • ชื่อ VPC: consumer-vpc
  • ชื่อซับเน็ต: psc-endpoint-us-west2
  • คำนำหน้าปลายทาง Private Service Connect: psc-endpoint-us-west2

17b5a056587ede8a.png

ตั้งค่าปลายทาง

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

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

b021821e7d59f450.png

  • คัดลอกสคริปต์เชลล์จากคอนโซล MongoBD และบันทึกเนื้อหาในเทอร์มินัล Cloud Shell ของ Google Cloud โปรดตรวจสอบว่าได้บันทึกสคริปต์เป็น 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 เพื่อระบุและอัปเดตสคริปต์เชลล์โดยใช้ไวยากรณ์ด้านล่าง

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

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

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

8801df4f6b39d20a.png

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

6131abcdef5c1f49.png

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

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

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

ดำเนินการติดตั้งจากระบบปฏิบัติการ

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

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

ลบปลายทางของผู้บริโภคจากคอนโซลระบบคลาวด์

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

ใช้ตัวกรอง psc-endpoint เพื่อป้องกันการลบปลายทางของผู้บริโภคที่ไม่ใช่ห้องทดลอง เลือกปลายทางทั้งหมด → ลบ

192548e374b444a1.png

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

ไปที่เครือข่าย VPC → consumer-vpc → ที่อยู่ IP ภายในแบบคงที่

ใช้ตัวกรอง 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

ลบปลายทางส่วนตัวที่เชื่อมโยงกับ us-west1 และ us-west2

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

56415ea954b2fec9.png

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

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

Cosmopup คิดว่า Codelab เจ๋งสุดๆ

8c2a10eb841f7b01.jpeg

ขั้นตอนถัดไป

ลองดู Codelab เหล่านี้...

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

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