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

ในโค้ดแล็บนี้ คุณจะได้ใช้การตรวจสอบสถานะของ Cloud DNS สำหรับปลายทางภายนอกเพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลไปยังตัวจัดสรรภาระงานแอปพลิเคชันภายนอกระดับภูมิภาคสำรอง หากแบ็กเอนด์ของตัวจัดสรรภาระงานหลักไม่มีประสิทธิภาพ
คุณจะสร้างเว็บไซต์ใน 2 ภูมิภาค โดยแต่ละภูมิภาคจะมี Application Load Balancer ภายนอกเป็นส่วนหน้า จากนั้นคุณจะกำหนดค่าการตรวจสอบสถานะของ Cloud DNS ด้วยนโยบายการกำหนดเส้นทางการล้มเหลว
3. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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

- จำลองการทำงานเมื่อเกิดข้อผิดพลาด: เข้าสู่ระบบ VM หลัก (
vm-a) และปิด Apache เพื่อจำลองการหยุดทำงาน
ใน Cloud Shell
gcloud compute ssh vm-a --zone=$REGION_A-a --command="sudo systemctl stop apache2"
- ยืนยันสถานะไม่สมบูรณ์: รอ 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
- ตรวจสอบการล้มเหลว: ค้นหาโดเมนอีกครั้ง ตอนนี้ควรเปลี่ยนเส้นทางไปยัง 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>
เอาต์พุตจากเบราว์เซอร์

- จำลองการเปลี่ยนกลับ (ไม่บังคับ): SSH และเริ่ม Apache ใน VM หลัก แล้วรอให้การตรวจสอบสถานภาพ DNS ทำเครื่องหมายปลายทางหลักว่ามีสถานภาพปกติ ระบบควรกำหนดเส้นทางการรับส่งข้อมูลกลับไปยัง IP หลักโดยอัตโนมัติ
- ไม่บังคับ: คุณวิเคราะห์การบันทึกการตรวจสอบสถานภาพของ 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 ภายนอกระดับภูมิภาค