การสลับไปใช้ภูมิภาคอื่นสำหรับปลายทางภายนอกระดับภูมิภาคโดยใช้การตรวจสอบประสิทธิภาพการทำงานของ Cloud DNS

1. บทนำ

บริการ Cloud DNS มีโซลูชันระบบชื่อโดเมน (DNS) ที่มีประสิทธิภาพสูง ยืดหยุ่น และครอบคลุมทั่วโลก ซึ่งช่วยให้คุณเผยแพร่โซนและระเบียนได้โดยไม่ต้องมีโครงสร้างพื้นฐาน DNS ที่จัดการด้วยตนเอง

Cloud DNS รองรับความสามารถในการตรวจสอบประสิทธิภาพการทำงานและการเฟลโอเวอร์อัตโนมัติภายในนโยบายการกำหนดเส้นทางสำหรับปลายทางภายนอก ซึ่งเป็นสิ่งสำคัญอันดับแรก อย่างไรก็ตาม โปรดทราบว่าการตรวจสอบสถานะของปลายทางภายนอกเหล่านี้จะใช้ได้เฉพาะภายในโซนสาธารณะ และปลายทางเองต้องเข้าถึงได้แบบสาธารณะผ่านอินเทอร์เน็ต

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

  • วิธีสร้างตัวจัดสรรภาระงานของแอปพลิเคชันภายนอกระดับภูมิภาคด้วยกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ
  • วิธีกำหนดค่าการตรวจสอบสถานะของ Cloud DNS สำหรับการกำหนดเส้นทาง DNS ภายนอก
  • วิธีสร้างนโยบายการกำหนดเส้นทางการล้มเหลว

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

  • มีความรู้พื้นฐานเกี่ยวกับ DNS
  • มีความรู้พื้นฐานเกี่ยวกับ Google Compute Engine
  • มีความรู้พื้นฐานเกี่ยวกับ Application Load Balancer
  • โปรเจ็กต์ Google Cloud ที่มีสิทธิ์เจ้าของ
  • โดเมนสาธารณะที่คุณเป็นเจ้าของ ซึ่งคุณสามารถสร้างโซนสาธารณะของ Cloud DNS ได้
  • ปัจจุบันไม่ได้บังคับใช้นโยบายขององค์กรต่อไปนี้ภายในโปรเจ็กต์ Google Cloud: VM ที่มีการป้องกันและกลุ่มปลายทางของเครือข่ายอินเทอร์เน็ต

2. โทโพโลยี Codelab

f7c2062b86d93268.jpeg

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

คุณจะสร้างเว็บไซต์ใน 2 ภูมิภาค โดยแต่ละภูมิภาคจะมี Application Load Balancer ภายนอกเป็นส่วนหน้า จากนั้นคุณจะกำหนดค่าการตรวจสอบสถานะของ Cloud DNS ด้วยนโยบายการกำหนดเส้นทางการล้มเหลว

3. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

จาก Google Cloud Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน

เปิดใช้งาน Cloud Shell

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้

ภาพหน้าจอของเทอร์มินัล Google Cloud Shell ที่แสดงว่าสภาพแวดล้อมเชื่อมต่อแล้ว

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานทั้งหมดใน Codelab นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร

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

เปิดใช้ API

ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่าโปรเจ็กต์และกำหนดค่าตัวแปรแล้ว

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]

# Define variables for regions and the domain
export REGION_A=us-central1
export REGION_B=us-west1
export DNS_ZONE=dnscodelab-zone
Export DNS_DOMAIN=gcp.<yourpublicdomain>.com
echo $projectid
echo $REGION_A
echo $REGION_B
echo $DNS_ZONE
echo $DNS_DOMAIN

เปิดใช้บริการทั้งหมดที่จำเป็น

gcloud services enable compute.googleapis.com 
gcloud services enable dns.googleapis.com

5. สร้างโครงสร้างพื้นฐานของ Cloud Load Balancing

ในส่วนนี้ คุณจะสร้าง VPC, เครือข่ายย่อย, กฎไฟร์วอลล์, VM และกลุ่มอินสแตนซ์ที่ไม่มีการจัดการที่จำเป็นใน 2 ภูมิภาคที่แตกต่างกันเพื่อรองรับ Load Balancer หลักและสำรอง

เครือข่าย VPC

จาก Cloud Shell

gcloud compute networks create external-lb-vpc --subnet-mode=custom

สร้าง 2 เครือข่ายย่อยใน REGION_A (หลัก) และ REGION_B (สำรอง) เพื่อโฮสต์เว็บเซิร์ฟเวอร์แบ็กเอนด์

สร้างซับเน็ต

จาก Cloud Shell

gcloud compute networks subnets create subnet-a --network=external-lb-vpc --region=$REGION_A --range=10.10.1.0/24

gcloud compute networks subnets create subnet-b --network=external-lb-vpc --region=$REGION_B --range=10.20.1.0/24

สร้างซับเน็ตเฉพาะพร็อกซีในแต่ละภูมิภาคสำหรับ Application Load Balancer ภายนอกระดับภูมิภาคที่เกี่ยวข้องซึ่งจะสร้างในภายหลัง

ซับเน็ตเฉพาะพร็อกซีที่เจาะจงนี้เป็นข้อกำหนดที่จำเป็นสำหรับตัวจัดสรรภาระงานระดับภูมิภาคที่ใช้ Envoy ทั้งหมดที่ติดตั้งใช้งานภายในภูมิภาคเดียวกันของเครือข่าย external-lb-vpc พร็อกซีเหล่านี้จะยกเลิกการเชื่อมต่อของไคลเอ็นต์และสร้างการเชื่อมต่อใหม่กับบริการแบ็กเอนด์

จาก Cloud Shell

gcloud compute networks subnets create proxy-only-subnet-a \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$REGION_A \
--network=external-lb-vpc \
--range=10.129.0.0/23

gcloud compute networks subnets create proxy-only-subnet-b \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$REGION_B \
--network=external-lb-vpc \
--range=10.130.0.0/23

สร้างกฎไฟร์วอลล์เครือข่าย

fw-allow-health-check. กฎขาเข้าที่ใช้กับอินสแตนซ์ที่กำลังจัดสรรภาระงาน ซึ่งอนุญาตการรับส่งข้อมูล TCP ทั้งหมดจากระบบตรวจสอบสถานะของ Google Cloud (ใน 130.211.0.0/22 และ 35.191.0.0/16) ตัวอย่างนี้ใช้แท็กเป้าหมาย load-balanced-backend เพื่อระบุ VM ที่กฎไฟร์วอลล์มีผล

fw-allow-proxies กฎขาเข้าที่ใช้กับอินสแตนซ์ที่กำลังจัดสรรภาระงาน ซึ่งอนุญาตการรับส่งข้อมูล TCP ในพอร์ต 80 จากพร็อกซีที่มีการจัดการของ Application Load Balancer ภายนอกระดับภูมิภาค ตัวอย่างนี้ใช้แท็กเป้าหมาย load-balanced-backend เพื่อระบุ VM ที่กฎไฟร์วอลล์มีผล

จาก Cloud Shell

gcloud compute firewall-rules create fw-allow-health-check \
    --network=external-lb-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=load-balanced-backend \
    --rules=tcp
gcloud compute firewall-rules create fw-allow-proxies \
  --network=external-lb-vpc \
  --action=allow \
  --direction=ingress \
  --source-ranges=10.129.0.0/23,10.130.0.0/23 \
  --target-tags=load-balanced-backend \
  --rules=tcp:80

หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้

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

จาก Cloud Shell

gcloud compute firewall-rules create allow-ssh \
    --allow tcp:22 --network external-lb-vpc \
    --source-ranges 35.235.240.0/20  \
    --description "SSH with IAP" \
    --target-tags=allow-ssh

6. สร้าง Cloud NAT และ Cloud Router

คุณต้องมีเกตเวย์ Cloud NAT ในทั้ง 2 ภูมิภาคเพื่อให้ VM ส่วนตัวดาวน์โหลดและติดตั้งแพ็กเกจจากอินเทอร์เน็ตได้

  • VM เว็บเซิร์ฟเวอร์ของเราจะต้องดาวน์โหลดและติดตั้งเว็บเซิร์ฟเวอร์ Apache
  • VM ไคลเอ็นต์จะต้องดาวน์โหลดและติดตั้งแพ็กเกจ dnsutils ซึ่งเราจะใช้สำหรับการทดสอบ

เกตเวย์ Cloud NAT แต่ละรายการจะเชื่อมโยงกับเครือข่าย VPC, ภูมิภาค และ Cloud Router รายการเดียว ดังนั้นก่อนที่จะสร้างเกตเวย์ NAT เราต้องสร้าง Cloud Router ในแต่ละภูมิภาค

สร้าง Cloud Router

จาก Cloud Shell

gcloud compute routers create "$REGION_A-cloudrouter" \
--region $REGION_A --network=external-lb-vpc --asn=65501

gcloud compute routers create "$REGION_B-cloudrouter" \
--region $REGION_B --network=external-lb-vpc --asn=65501

สร้างเกตเวย์ NAT

จาก Cloud Shell

gcloud compute routers nats create "$REGION_A-nat-gw" \
--router="$REGION_A-cloudrouter" \
--router-region=$REGION_A \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

gcloud compute routers nats create "$REGION_B-nat-gw" \
--router="$REGION_B-cloudrouter" \
--router-region=$REGION_B \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips

สร้าง VM ของแบ็กเอนด์และกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ

สร้าง VM ในแต่ละภูมิภาคและติดตั้งเว็บเซิร์ฟเวอร์ (เช่น Apache)

จาก Cloud Shell

# Primary (Region A)
gcloud compute instances create vm-a \
--zone=$REGION_A-a \
--image-family=debian-12 --image-project=debian-cloud \
--subnet=subnet-a \
--no-address \
--tags=load-balanced-backend,allow-ssh \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://metadata.google.internal/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" - $REGION_A Primary Backend |\
tee /var/www/html/index.html
systemctl restart apache2'


# Backup (Region B)
gcloud compute instances create vm-b \
--zone=$REGION_B-a \
--image-family=debian-12 --image-project=debian-cloud \
--subnet=subnet-b \
--no-address \
--tags=load-balanced-backend,allow-ssh \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://metadata.google.internal/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" - $REGION_B Backup Backend |\
tee /var/www/html/index.html
systemctl restart apache2'

สร้างกลุ่มอินสแตนซ์ที่ไม่มีการจัดการและเพิ่มอินสแตนซ์ VM ลงในกลุ่มสำหรับแต่ละภูมิภาค

จาก Cloud Shell

# Primary (Region A)
gcloud compute instance-groups unmanaged create ig-a --zone=$REGION_A-a

gcloud compute instance-groups unmanaged add-instances ig-a --zone=$REGION_A-a --instances=vm-a

# Backup (Region B)
gcloud compute instance-groups unmanaged create ig-b --zone=$REGION_B-a

gcloud compute instance-groups unmanaged add-instances ig-b --zone=$REGION_B-a --instances=vm-b

7. กำหนดค่า Application Load Balancer ภายนอกระดับภูมิภาค

คุณจะกำหนดค่า Application Load Balancer ภายนอกระดับภูมิภาคที่สมบูรณ์ทั้งใน REGION_A (หลัก) และ REGION_B (สำรอง)

สร้างการตรวจสอบสถานะและบริการแบ็กเอนด์

Regional External Application Load Balancer ใช้ Envoy และต้องกำหนดค่าการตรวจสอบประสิทธิภาพการทำงานระดับภูมิภาค

สร้างการตรวจสอบประสิทธิภาพการทำงานของ HTTP (ใช้โดยตัวจัดสรรภาระงานเพื่อตรวจสอบสถานะของอินสแตนซ์)

ใน Cloud Shell

gcloud compute health-checks create http http-lb-hc-primary-region \
--port 80 \
--region=$REGION_A

​​gcloud compute health-checks create http http-lb-hc-backup-region \
--port 80 \
--region=$REGION_B

สร้าง Backend Service ระดับภูมิภาคและแนบกลุ่มอินสแตนซ์ในแต่ละภูมิภาค**

ใน Cloud Shell

# Primary (Region A)
gcloud compute backend-services create be-svc-a \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-lb-hc-primary-region \
--health-checks-region=$REGION_A \
--region=$REGION_A

gcloud compute backend-services add-backend be-svc-a \
--instance-group=ig-a \
--instance-group-zone=$REGION_A-a \
--region=$REGION_A

# Backup (Region B)
gcloud compute backend-services create be-svc-b \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-lb-hc-backup-region \
--health-checks-region=$REGION_B \
--region=$REGION_B

gcloud compute backend-services add-backend be-svc-b --instance-group=ig-b --instance-group-zone=$REGION_B-a --region=$REGION_B

สร้างคอมโพเนนต์ส่วนหน้า

สร้างแผนที่ URL และพร็อกซี HTTP เป้าหมายในทั้ง 2 ภูมิภาค

ใน Cloud Shell

#Primary (Region A)
gcloud compute url-maps create url-map-a \
--default-service=be-svc-a \
--region=$REGION_A
gcloud compute target-http-proxies create http-proxy-a \
--url-map=url-map-a \
--url-map-region=$REGION_A \
--region=$REGION_A
#Backup (Region B)
gcloud compute url-maps create url-map-b \
--default-service=be-svc-b \
--region=$REGION_B

gcloud compute target-http-proxies create http-proxy-b \
--url-map=url-map-b \
--url-map-region=$REGION_B \
--region=$REGION_B

สำรองที่อยู่ IP แบบคงที่ (ภายนอก) สำหรับกฎการส่งต่อ

ใน Cloud Shell

# Primary IP (Region A)
gcloud compute addresses create rxlb-ip-a --region=$REGION_A

# Backup IP (Region B)
gcloud compute addresses create rxlb-ip-b --region=$REGION_B

สร้างกฎการส่งต่อสำหรับตัวจัดสรรภาระงาน 2 รายการดังนี้

ใน Cloud Shell

# Primary (Region A)
gcloud compute forwarding-rules create http-fwd-rule-a \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network=external-lb-vpc \
--region=$REGION_A \
--target-http-proxy-region=$REGION_A \
--address=rxlb-ip-a \
--target-http-proxy=http-proxy-a \
--ports=80

# Backup (Region B)
gcloud compute forwarding-rules create http-fwd-rule-b \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network=external-lb-vpc \
--region=$REGION_B \
--target-http-proxy-region=$REGION_B \
--address=rxlb-ip-b \
--target-http-proxy=http-proxy-b \
--ports=80

กำหนดค่า Cloud DNS สำหรับการเฟลโอเวอร์

สร้างการตรวจสอบสถานะ Cloud DNS สำหรับปลายทางภายนอก

คุณต้องสร้างการตรวจสอบประสิทธิภาพการทำงานทั่วโลกโดยเฉพาะสำหรับที่อยู่ IP สาธารณะของตัวจัดสรรภาระงาน ซึ่งแตกต่างจากการตรวจสอบประสิทธิภาพการทำงานภายในของตัวจัดสรรภาระงาน

ก่อนอื่นเรามาพิจารณาที่อยู่ IP ภายนอกของตัวจัดสรรภาระงานเพื่อกำหนดค่านโยบายการทำงานล้มเหลวและส่งออกเป็นตัวแปร

ใน Cloud Shell

PRIMARY_IP=$(gcloud compute addresses describe rxlb-ip-a --region=$REGION_A --format='get(address)')

BACKUP_IP=$(gcloud compute addresses describe rxlb-ip-b --region=$REGION_B --format='get(address)')

สร้างการตรวจสอบประสิทธิภาพการทำงานของ DNS ทั่วโลก (ต้องใช้ภูมิภาคต้นทาง 3 แห่ง)

ใน Cloud Shell

gcloud beta compute health-checks create http dns-failover-health-check \
    --global \
    --source-regions=$REGION_A,$REGION_B,europe-west1 \
    --request-path=/ \
    --check-interval=30s \
    --port=80 \
    --enable-logging

สร้างโซนที่มีการจัดการแบบสาธารณะและนโยบายการกำหนดเส้นทางเฟลโอเวอร์

สร้างโซนที่มีการจัดการสาธารณะ (ใช้โดเมน DNS ที่คุณเป็นเจ้าของ)

ใน Cloud Shell

gcloud dns managed-zones create codelab-publiczone --dns-name=$DNS_DOMAIN --description="Codelab DNS Failover Zone"

สร้างระเบียน A ด้วยนโยบายการกำหนดเส้นทางการล้มเหลว นโยบายนี้ชี้ไปยัง IP หลักและใช้การตรวจสอบประสิทธิภาพการทำงานเพื่อพิจารณาว่าจะเฟลโอเวอร์ไปยัง IP สำรองเมื่อใด

คำสั่งด้านล่างใช้ชื่อกฎการส่งต่อของตัวจัดสรรภาระงานเพื่ออ้างอิงที่อยู่ IP สำหรับนโยบายการกำหนดเส้นทาง

gcloud beta dns record-sets create codelab.gcp.axiszulu.com. \
--type=A \
--ttl=5 \
--zone=codelab-publiczone \
--routing_policy_type=FAILOVER \
--routing-policy-primary-data=$PRIMARY_IP \
--routing-policy-backup-data-type=GEO \
--routing-policy-backup-item=location=$REGION_B,external_endpoints=$BACKUP_IP \
--health-check=dns-failover-health-check

8. การทดสอบการทำงานล้มเหลวระดับภูมิภาค

  1. การตรวจสอบครั้งแรก: ใช้เครื่องมือ (เช่น dig หรือเว็บเบราว์เซอร์) เพื่อค้นหาโดเมน ซึ่งควรจะเปลี่ยนเส้นทางไปยัง IP หลัก ($PRIMARY_IP) และแสดงหน้า "Region A - Primary Backend"
dig codelab.gcp.axiszulu.com

OUTPUT
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> codelab.gcp.axiszulu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16096
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;codelab.gcp.axiszulu.com.      IN      A

;; ANSWER SECTION:
codelab.gcp.axiszulu.com. 5     IN      A   <PRIMARY_IP>

เอาต์พุตจากเบราว์เซอร์

65b44db03cc084e4.png

  1. จำลองการทำงานเมื่อเกิดข้อผิดพลาด: เข้าสู่ระบบ VM หลัก (vm-a) และปิด Apache เพื่อจำลองการหยุดทำงาน

ใน Cloud Shell

gcloud compute ssh vm-a --zone=$REGION_A-a --command="sudo systemctl stop apache2"
  1. ยืนยันสถานะไม่สมบูรณ์: รอ 2-3 นาทีเพื่อให้การตรวจสอบสถานะ DNS ทำเครื่องหมายปลายทางหลักว่าไม่สมบูรณ์
# check health status
gcloud compute backend-services get-health be-svc-a --region=${REGION_A}

Output:
backend: https://www.googleapis.com/compute/v1/projects/precise-airship-466617-c3/zones/us-central1-a/instanceGroups/ig-a
status:
  healthStatus:
  - healthState: UNHEALTHY
    instance: https://www.googleapis.com/compute/v1/projects/precise-airship-466617-c3/zones/us-central1-a/instances/vm-a
    ipAddress: 10.10.1.2
    port: 80
  kind: compute#backendServiceGroupHealth
  1. ตรวจสอบการล้มเหลว: ค้นหาโดเมนอีกครั้ง ตอนนี้ควรเปลี่ยนเส้นทางไปยัง IP สำรอง ($BACKUP_IP) และแสดงหน้า "Region B - Backup Backend"
dig codelab.gcp.axiszulu.com

OUTPUT
; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> codelab.gcp.axiszulu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16096
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;codelab.gcp.axiszulu.com.      IN      A

;; ANSWER SECTION:
codelab.gcp.axiszulu.com. 5     IN      A   <BACKUP_IP>

เอาต์พุตจากเบราว์เซอร์

ae84a2ea0a367025.png

  1. จำลองการเปลี่ยนกลับ (ไม่บังคับ): SSH และเริ่ม Apache ใน VM หลัก แล้วรอให้การตรวจสอบสถานภาพ DNS ทำเครื่องหมายปลายทางหลักว่ามีสถานภาพปกติ ระบบควรกำหนดเส้นทางการรับส่งข้อมูลกลับไปยัง IP หลักโดยอัตโนมัติ
  2. ไม่บังคับ: คุณวิเคราะห์การบันทึกการตรวจสอบสถานภาพของ Cloud DNS ได้โดยเรียกใช้คำสั่งด้านล่างใน Cloud Shell
gcloud logging read "logName=projects/${projectid}/logs/compute.googleapis.com%2Fhealthchecks" \
--limit=10 \
--project=${projectid} \
--freshness=1d \
--format="table(timestamp:label=TIME, \
jsonPayload.healthCheckProbeResult.ipAddress:label=BACKEND_IP, \
jsonPayload.healthCheckProbeResult.previousDetailedHealthState:label=PREVIOUS_STATE, \
jsonPayload.healthCheckProbeResult.detailedHealthState:label=CURRENT_STATE, \
jsonPayload.healthCheckProbeResult.probeResultText:label=RESULT_TEXT)"

9. ขั้นตอนการล้างข้อมูล

ลบคอมโพเนนต์ทั้งหมดเพื่อหลีกเลี่ยงการเรียกเก็บเงินเพิ่มเติม

จาก Cloud Shell

# Delete VMs
gcloud compute instances delete vm-a --zone=$REGION_A-a --quiet
gcloud compute instances delete vm-b --zone=$REGION_B-a --quiet
# Delete Load Balancer Components (Primary)
gcloud compute forwarding-rules delete http-fwd-rule-a --region=$REGION_A --quiet
gcloud compute target-http-proxies delete http-proxy-a --region=$REGION_A --quiet
gcloud compute url-maps delete url-map-a --region=$REGION_A --quiet
gcloud compute backend-services delete be-svc-a --region=$REGION_A --quiet
gcloud compute addresses delete rxlb-ip-a --region=$REGION_A --quiet
# Delete Load Balancer Components (Backup)
gcloud compute forwarding-rules delete http-fwd-rule-b --region=$REGION_B --quiet
gcloud compute target-http-proxies delete http-proxy-b --region=$REGION_B --quiet
gcloud compute url-maps delete url-map-b --region=$REGION_B --quiet
gcloud compute backend-services delete be-svc-b --region=$REGION_B --quiet
gcloud compute addresses delete rxlb-ip-b --region=$REGION_B --quiet
# Delete Instance Groups and LB Health Checks
gcloud compute instance-groups unmanaged delete ig-a --zone=$REGION_A-a --quiet
gcloud compute instance-groups unmanaged delete ig-b --zone=$REGION_B-a --quiet
gcloud compute health-checks delete http-lb-hc-primary-region --region=$REGION_A --quiet
gcloud compute health-checks delete http-lb-hc-backup-region --region=$REGION_B --quiet

# Delete Cloud DNS Records Zone and DNS Heath Checks
gcloud dns record-sets delete $DNS_DOMAIN --type=A --zone=codelab-publiczone --quiet
gcloud dns managed-zones delete codelab-publiczone --quiet

gcloud compute health-checks delete dns-failover-health-check --global --quiet

# Delete Cloud NAT and Cloud Routers
gcloud compute routers nats delete $REGION_A-nat-gw \
--router=$REGION_A-cloudrouter --region=$REGION_A --quiet

gcloud compute routers nats delete $REGION_B-nat-gw \
--router=$REGION_B-cloudrouter --region=$REGION_B --quiet

gcloud compute routers delete $REGION_A-cloudrouter \
--region=$REGION_A --quiet

gcloud compute routers delete $REGION_B-cloudrouter \
--region=$REGION_B --quiet


# Delete Subnets and Firewall Rules
gcloud compute firewall-rules delete fw-allow-health-check --quiet
gcloud compute firewall-rules delete fw-allow-proxies --quiet
gcloud compute firewall-rules delete allow-ssh --quiet
gcloud compute networks subnets delete subnet-a \
--region=$REGION_A --quiet

gcloud compute networks subnets delete subnet-b \
--region=$REGION_B --quiet
gcloud compute networks subnets delete proxy-only-subnet-a \
--region=$REGION_A --quiet

gcloud compute networks subnets delete proxy-only-subnet-b \
--region=$REGION_B --quiet

gcloud compute networks delete external-lb-vpc --quiet

10. ยินดีด้วย

ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์

  • คุณกำหนดค่าและตรวจสอบการทำงานของการสลับไปใช้ระบบสำรองแบบหลายภูมิภาคที่ใช้งานอยู่ได้สำเร็จโดยใช้การตรวจสอบสถานะของ Cloud DNS และ Application Load Balancer ภายนอกระดับภูมิภาค