1. บทนำ
อัปเดตล่าสุด: 22-09-2022
นโยบายการกำหนดเส้นทาง DNS คืออะไร
นโยบายการกำหนดเส้นทางของ Cloud DNS ช่วยให้ผู้ใช้กำหนดค่าการเปลี่ยนเส้นทางการเข้าชมตาม DNS ได้ โดยขึ้นอยู่กับเกณฑ์ที่เฉพาะเจาะจง เช่น น้ำหนัก ตำแหน่งทางภูมิศาสตร์ หรือการตรวจสอบสถานะ
Cloud DNS รองรับนโยบายการกำหนดเส้นทางต่อไปนี้
- นโยบายการกำหนดเส้นทางการหมุนเวียนแบบระบุน้ำหนัก
- นโยบายการกำหนดเส้นทางตามตำแหน่งทางภูมิศาสตร์
- นโยบายการกำหนดเส้นทางที่กำหนดขอบเขตทางภูมิศาสตร์
- นโยบายการกำหนดเส้นทางเฟลโอเวอร์
ในแล็บนี้ คุณจะได้กำหนดค่าและทดสอบนโยบายการกำหนดเส้นทางการล้มเหลว
นโยบายการกำหนดเส้นทางเฟลโอเวอร์
Cloud DNS รองรับการตรวจสอบสถานะสำหรับตัวจัดสรรภาระงาน TCP/UDP ภายในที่เปิดใช้การเข้าถึงส่วนกลาง นโยบายการกำหนดเส้นทางการล้มเหลวช่วยให้คุณกำหนดค่า IP หลักและ IP สำรองสำหรับระเบียนทรัพยากรได้ ในการทำงานปกติ Cloud DNS จะตอบคำค้นหาด้วยที่อยู่ IP ที่จัดสรรไว้ในชุดหลัก เมื่อที่อยู่ IP ทั้งหมดในชุดหลักล้มเหลว (สถานะสุขภาพเปลี่ยนเป็นไม่สมบูรณ์) Cloud DNS จะเริ่มแสดงที่อยู่ IP ในชุดสำรอง
การตรวจสุขภาพ
นโยบายการกำหนดเส้นทาง DNS จะขึ้นอยู่กับการตรวจสอบประสิทธิภาพการทำงานแบบรวม(UHC) ของ Internal Load Balancer ดั้งเดิม ระบบจะถือว่า Internal Load Balancer มีประสิทธิภาพดีหากแบ็กเอนด์ 20% (หรือมากกว่า) มีประสิทธิภาพดี การตรวจสอบสถานะสำหรับตัวจัดสรรภาระงาน TCP/UDP ภายในและ HTTP(S) ภายในจะให้ข้อมูลที่แตกต่างกัน สำหรับตัวจัดสรรภาระงาน HTTP(S) ภายใน UHC จะแสดงสถานะความสมบูรณ์ของพร็อกซี Envoy ทั้งหมด แต่สำหรับตัวจัดสรรภาระงาน TCP/UDP ภายใน Cloud DNS จะรับสัญญาณความสมบูรณ์โดยตรงจากอินสแตนซ์แบ็กเอนด์แต่ละรายการ ดูรายละเอียดการตรวจสอบสถานะได้ที่นี่
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้สร้างเว็บไซต์ที่ทำงานใน 2 ภูมิภาคและเชื่อมโยงนโยบายการกำหนดเส้นทาง DNS สำหรับการล้มเหลวกับเว็บไซต์ การตั้งค่าจะมีลักษณะดังนี้
ทรัพยากรที่ใช้งานอยู่ -
- ตัวจัดสรรภาระงานภายใน L4 ใน REGION_1
- VM ที่เรียกใช้เว็บเซิร์ฟเวอร์ Apache ใน REGION_1
แหล่งข้อมูลสำรอง -
- ตัวจัดสรรภาระงานภายใน L4 ใน REGION_2
- VM ที่เรียกใช้เว็บเซิร์ฟเวอร์ Apache ใน REGION_2
การตั้งค่าเป็นดังที่แสดงด้านล่าง

สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างนโยบายการกำหนดเส้นทางการทำงานล้มเหลว
- ทริกเกอร์ DNS Failover
- วิธีกำหนดเส้นทางการรับส่งข้อมูลไปยังชุดสำรอง
สิ่งที่คุณต้องมี
- ความรู้พื้นฐานเกี่ยวกับ DNS
- ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine
- ความรู้พื้นฐานเกี่ยวกับตัวจัดสรรภาระงานภายใน L4
2. การตั้งค่าและข้อกำหนด
- ลงชื่อเข้าใช้ 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 นี้ได้ภายในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไร
3. เวอร์ชัน Google Cloud SDK
ณ เวลาที่เขียน 401.0.0 คือ SDK ของ Google Cloud เวอร์ชันล่าสุด คำสั่งทั้งหมดในแล็บนี้ได้รับการทดสอบโดยใช้ Google Cloud SDK เวอร์ชันล่าสุด ก่อนดำเนินการต่อ โปรดตรวจสอบว่า Cloud Shell ใช้ SDK เวอร์ชันล่าสุด
การตรวจสอบเวอร์ชัน SDK
ใช้คำสั่ง gcloud version เพื่อตรวจสอบเวอร์ชัน SDK เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud version | grep "Google Cloud SDK"
ตัวอย่างเอาต์พุต
Google Cloud SDK 401.0.0
ขั้นตอนถัดไป
- หาก SDK เป็นเวอร์ชัน
401.0.0ขึ้นไป ให้ข้ามไปยังส่วนถัดไป - หากเวอร์ชัน SDK ต่ำกว่า
401.0.0ให้เรียกใช้คำสั่งที่ระบุไว้ด้านล่างเพื่ออัปเดต SDK
คำสั่งที่ไม่บังคับ
sudo apt-get update && sudo apt-get install google-cloud-sdk
4. ก่อนเริ่มต้น
ก่อนที่จะเริ่มติดตั้งใช้งานสถาปัตยกรรมที่เราอธิบายไว้ข้างต้น โปรดตรวจสอบว่าได้กำหนดค่า Cloud Shell อย่างถูกต้องและเปิดใช้ API ที่จำเป็นทั้งหมดแล้ว
ตั้งค่ารหัสโปรเจ็กต์
ใน Cloud Shell ให้ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์แล้ว หากพรอมต์ Cloud Shell มีลักษณะเหมือนเอาต์พุตด้านล่างและคุณไม่ได้วางแผนที่จะเปลี่ยนรหัสโปรเจ็กต์ ให้ข้ามไปยังขั้นตอนถัดไป (ตั้งค่าตัวแปรสภาพแวดล้อม)
USER@cloudshell:~ (PROJECT_ID)$
หากยังต้องการเปลี่ยนรหัสโปรเจ็กต์ ให้ใช้คำสั่งที่ระบุไว้ด้านล่าง พรอมต์ของ Cloud Shell จะเปลี่ยนจาก (PROJECT_ID) เป็น (YOUR-PROJECT-ID)
คำสั่งที่ไม่บังคับ
gcloud config set project [YOUR-PROJECT-ID]
ตัวอย่างเอาต์พุต
Updated property [core/project]. USER@cloudshell:~ (YOUR-PROJECT-ID)$
ตั้งค่าตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อม
เราจะใช้คำสั่ง export เพื่อตั้งค่าตัวแปรสภาพแวดล้อม เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
export REGION_1=us-west1
export REGION_1_ZONE=us-west1-a
export REGION_2=us-east4
export REGION_2_ZONE=us-east4-a
ยืนยัน
ตอนนี้เราได้ตั้งค่าตัวแปรสภาพแวดล้อมแล้ว มายืนยันโดยใช้คำสั่ง echo กัน เอาต์พุตของแต่ละคำสั่งควรเป็นค่าที่เรากำหนดค่าไว้ข้างต้นโดยใช้คำสั่ง export เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
echo $REGION_1
echo $REGION_1_ZONE
echo $REGION_2
echo $REGION_2_ZONE
เปิดใช้บริการทั้งหมดที่จำเป็น
ใช้คำสั่ง gcloud services enable เพื่อเปิดใช้ Compute API และ DNS API เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
เปิดใช้ Compute API
คำสั่ง
gcloud services enable compute.googleapis.com
เปิดใช้ DNS API
คำสั่ง
gcloud services enable dns.googleapis.com
ยืนยัน
ตอนนี้เมื่อเปิดใช้บริการแล้ว ให้ยืนยันโดยใช้คำสั่ง gcloud services list เพื่อแสดงรายการ API ที่เปิดใช้ทั้งหมด
คำสั่ง
gcloud services list | grep -E 'compute|dns'
ตัวอย่างเอาต์พุต
NAME: compute.googleapis.com NAME: dns.googleapis.com
5. สร้างเครือข่าย VPC, ซับเน็ต และกฎไฟร์วอลล์
ในส่วนนี้ เราจะสร้างเครือข่าย VPC, ซับเน็ต 2 รายการ (รายการละ 1 รายการในแต่ละภูมิภาค) และกฎไฟร์วอลล์ที่จำเป็น
สร้างเครือข่าย VPC
ใช้คำสั่ง gcloud compute networks create เพื่อสร้างเครือข่าย VPC เราจะตั้งค่าโหมดซับเน็ตเป็นกำหนดเองเนื่องจากเราจะสร้างซับเน็ตของเราเองในขั้นตอนถัดไป เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute networks create my-vpc --subnet-mode custom
สร้างซับเน็ต
ใช้คำสั่ง gcloud compute networks subnets create เพื่อสร้างซับเน็ต 2 รายการ โดยรายการหนึ่งอยู่ใน REGION_1 และอีกรายการอยู่ใน REGION_2 เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
ซับเน็ต REGION_1
คำสั่ง
gcloud compute networks subnets create ${REGION_1}-subnet \
--network my-vpc \
--range 10.1.0.0/24 \
--region $REGION_1
ซับเน็ต REGION_2
คำสั่ง
gcloud compute networks subnets create ${REGION_2}-subnet \
--network my-vpc \
--range 10.2.0.0/24 \
--region $REGION_2
สร้างกฎไฟร์วอลล์
คุณต้องอนุญาตการรับส่งข้อมูลในพอร์ต 80 จากเครือข่ายย่อย VPC และจากช่วง IP ของการตรวจสอบสถานะของตัวจัดสรรภาระงาน
นอกจากนี้ คุณยังต้องสร้างกฎไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูล SSH ใน VM ของไคลเอ็นต์ด้วย
ใช้คำสั่ง gcloud compute firewall-rules create เพื่อสร้างกฎไฟร์วอลล์ เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
อนุญาตการรับส่งข้อมูลในพอร์ต 80
คำสั่ง
gcloud compute firewall-rules create allow-http-lb-hc \ --allow tcp:80 --network my-vpc \ --source-ranges 10.1.0.0/24,10.2.0.0/24,35.191.0.0/16,130.211.0.0/22 \ --target-tags=allow-http
อนุญาตการรับส่งข้อมูล SSH ใน VM ไคลเอ็นต์
คำสั่ง
gcloud compute firewall-rules create allow-ssh \ --allow tcp:22 --network my-vpc \ --source-ranges 0.0.0.0/0 \ --target-tags=allow-ssh
6. สร้าง Cloud NAT
คุณต้องมีเกตเวย์ Cloud NAT ในทั้ง 2 ภูมิภาคเพื่อให้ VM ส่วนตัวดาวน์โหลดและติดตั้งแพ็กเกจจากอินเทอร์เน็ตได้
- VM เว็บเซิร์ฟเวอร์ของเราจะต้องดาวน์โหลดและติดตั้งเว็บเซิร์ฟเวอร์ Apache
- VM ไคลเอ็นต์จะต้องดาวน์โหลดและติดตั้งแพ็กเกจ dnsutils ซึ่งเราจะใช้สำหรับการทดสอบ
เกตเวย์ Cloud NAT แต่ละรายการจะเชื่อมโยงกับเครือข่าย VPC, ภูมิภาค และ Cloud Router รายการเดียว ดังนั้นก่อนที่จะสร้างเกตเวย์ NAT เราต้องสร้าง Cloud Router ในแต่ละภูมิภาค
สร้าง Cloud Router
ใช้คำสั่ง gcloud compute routers create เพื่อสร้าง Cloud Router ในภูมิภาค us-west1 และ us-east4 เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
Cloud Router ของ Region_1
คำสั่ง
gcloud compute routers create "${REGION_1}-cloudrouter" \
--region $REGION_1 --network=my-vpc --asn=65501
Cloud Router ของ Region_2
คำสั่ง
gcloud compute routers create "${REGION_2}-cloudrouter" \
--region $REGION_2 --network=my-vpc --asn=65501
สร้างเกตเวย์ NAT
ใช้คำสั่ง gcloud compute routers nat create เพื่อสร้างเกตเวย์ NAT ในภูมิภาค us-west1 และ us-east4 เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
เกตเวย์ NAT ของ Region_1
คำสั่ง
gcloud compute routers nats create "${REGION_1}-nat-gw" \
--router="${REGION_1}-cloudrouter" \
--router-region=$REGION_1 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips
เกตเวย์ NAT ของ Region_2
คำสั่ง
gcloud compute routers nats create "${REGION_2}-nat-gw" \
--router="${REGION_2}-cloudrouter" \
--router-region=$REGION_2 \
--nat-all-subnet-ip-ranges --auto-allocate-nat-external-ips
7. สร้าง VM ของ Compute Engine
ในส่วนนี้ คุณจะสร้างเว็บเซิร์ฟเวอร์ กลุ่มอินสแตนซ์ที่ไม่มีการจัดการสำหรับเว็บเซิร์ฟเวอร์ และ VM ไคลเอ็นต์
สร้าง VM เว็บเซิร์ฟเวอร์
ใช้คำสั่ง gcloud compute instances create เพื่อสร้างเว็บเซิร์ฟเวอร์ เราต้องสร้างเว็บเซิร์ฟเวอร์ 2 เครื่อง เครื่องหนึ่งใน REGION_1 และอีกเครื่องหนึ่งใน REGION_2 เราใช้สคริปต์เริ่มต้นเพื่อติดตั้งและกำหนดค่า Apache ในเว็บเซิร์ฟเวอร์
REGION_1 Web Server
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute instances create "${REGION_1}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-http \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
REGION_2 Web Server
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute instances create "${REGION_2}-instance" \
--image-family=debian-11 --image-project=debian-cloud \
--zone=$REGION_2_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_2}-subnet,no-address \
--tags=allow-http \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
สร้างกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ
ในส่วนนี้ เราจะสร้างกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ 2 กลุ่ม เราจะใช้กลุ่มอินสแตนซ์เหล่านี้ในส่วนถัดไปเพื่อกำหนดค่าบริการแบ็กเอนด์ของ ILB เมื่อสร้างกลุ่มอินสแตนซ์แล้ว เราจะเพิ่ม VM เว็บเซิร์ฟเวอร์ลงในกลุ่มอินสแตนซ์เหล่านี้
สร้างกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ
ใช้คำสั่ง gcloud compute instance-groups unmanaged create เพื่อสร้างกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ 2 กลุ่ม กลุ่มหนึ่งสำหรับเว็บเซิร์ฟเวอร์ us-west1 และอีกกลุ่มหนึ่งสำหรับเว็บเซิร์ฟเวอร์ us-east4
กลุ่มอินสแตนซ์ Region_1
คำสั่ง
gcloud compute instance-groups unmanaged create \
"${REGION_1}-instance-group" --zone=$REGION_1_ZONE
กลุ่มอินสแตนซ์ Region_2
คำสั่ง
gcloud compute instance-groups unmanaged create \
"${REGION_2}-instance-group" --zone=$REGION_2_ZONE
เพิ่ม VM ลงในกลุ่มอินสแตนซ์
ใช้คำสั่ง gcloud compute instance-groups unmanaged add-instances เพื่อเพิ่มอินสแตนซ์ลงในกลุ่มอินสแตนซ์ที่เราเพิ่งสร้าง เพิ่มเว็บเซิร์ฟเวอร์ REGION_1 ไปยังกลุ่มอินสแตนซ์ REGION_1 และเว็บเซิร์ฟเวอร์ REGION_2 ไปยังกลุ่มอินสแตนซ์ REGION_2
กลุ่มอินสแตนซ์ Region_1
คำสั่ง
gcloud compute instance-groups unmanaged add-instances \
"${REGION_1}-instance-group" --instances $REGION_1-instance \
--zone=$REGION_1_ZONE
กลุ่มอินสแตนซ์ Region_2
คำสั่ง
gcloud compute instance-groups unmanaged add-instances \
"${REGION_2}-instance-group" --instances $REGION_2-instance \
--zone=$REGION_2_ZONE
สร้าง VM ไคลเอ็นต์
เราจะใช้ VM นี้เพื่อเรียกใช้การทดสอบและยืนยันการกำหนดค่า DNS เราใช้สคริปต์เริ่มต้นเพื่อติดตั้งแพ็กเกจ dnsutils เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute instances create client-instance --image-family=debian-11 \
--image-project=debian-cloud \
--zone=$REGION_1_ZONE \
--network-interface=network=my-vpc,subnet=${REGION_1}-subnet,no-address \
--tags=allow-ssh \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install dnsutils -y'
8. สร้างตัวจัดสรรภาระงานภายใน L4
หากต้องการสร้าง L4 ILB เราต้องสร้างการตรวจสอบประสิทธิภาพการทำงาน บริการแบ็กเอนด์ และกฎการส่งต่อ
สร้างการตรวจสอบประสิทธิภาพการทำงาน
ใช้คำสั่ง gcloud compute health-checks create เพื่อสร้างการตรวจสอบประสิทธิภาพการทำงาน เรากำลังสร้างการตรวจสอบประสิทธิภาพการทำงานของ HTTP ขั้นพื้นฐานและพอร์ตเป้าหมายคือพอร์ต 80 เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute health-checks create http http-hc --port 80
กำหนดค่าบริการแบ็กเอนด์
ใช้คำสั่ง gcloud compute backend-services create เพื่อสร้างบริการแบ็กเอนด์ เมื่อสร้างบริการแบ็กเอนด์แล้ว เราจะเพิ่มกลุ่มอินสแตนซ์ที่ไม่มีการจัดการลงในบริการแบ็กเอนด์โดยใช้คำสั่ง gcloud compute backend-services add-backend เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
สร้างบริการแบ็กเอนด์
คำสั่ง
gcloud compute backend-services create $REGION_1-backend-service \ --load-balancing-scheme=INTERNAL --protocol=TCP \ --health-checks=http-hc --region=$REGION_1
gcloud compute backend-services create $REGION_2-backend-service \ --load-balancing-scheme=INTERNAL --protocol=TCP \ --health-checks=http-hc --region=$REGION_2
เพิ่มแบ็กเอนด์
คำสั่ง
gcloud compute backend-services add-backend $REGION_1-backend-service \ --instance-group=$REGION_1-instance-group \ --region=$REGION_1 \ --instance-group-zone=$REGION_1_ZONE
gcloud compute backend-services add-backend $REGION_2-backend-service \ --instance-group=$REGION_2-instance-group \ --region=$REGION_2 \ --instance-group-zone=$REGION_2_ZONE
สร้างกฎการส่งต่อ
ใช้คำสั่ง gcloud compute forwarding-rules create เพื่อสร้างกฎการส่งต่อในทั้ง 2 ภูมิภาค เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
กฎการส่งต่อ REGION_1
คำสั่ง
gcloud compute forwarding-rules create $REGION_1-ilb \
--region=$REGION_1 \
--load-balancing-scheme=internal \
--network=my-vpc \
--subnet=$REGION_1-subnet \
--ip-protocol=TCP \
--ports=80 \
--backend-service=$REGION_1-backend-service \
--backend-service-region=$REGION_1 \
--allow-global-access
กฎการส่งต่อ REGION_2
gcloud compute forwarding-rules create $REGION_2-ilb \
--region=$REGION_2 \
--load-balancing-scheme=internal \
--network=my-vpc \
--subnet=$REGION_2-subnet \
--ip-protocol=TCP \
--ports=80 \
--backend-service=$REGION_2-backend-service \
--backend-service-region=$REGION_2 \
--allow-global-access
9. กำหนดค่า DNS
ในส่วนนี้ เราจะสร้างโซนส่วนตัวและชุดระเบียน DNS ที่มีนโยบายการกำหนดเส้นทางการล้มเหลว
สร้างโซน DNS ส่วนตัว
ใช้คำสั่ง gcloud dns managed-zones create เพื่อสร้างโซนส่วนตัวสำหรับ example.com เราจะใช้โซนนี้เพื่อสร้างชุดระเบียนทรัพยากรที่มีนโยบายการกำหนดเส้นทางการล้มเหลว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud dns managed-zones create example-com \ --dns-name example.com. --description="My private zone" \ --visibility=private --networks my-vpc
สร้างระเบียน DNS ด้วยนโยบายการกำหนดเส้นทางการล้มเหลว
ใช้คำสั่ง gcloud dns record-sets create เพื่อสร้างระเบียน DNS ที่มีนโยบายการกำหนดเส้นทางการล้มเหลว เป้าหมายหลักคือตัวจัดสรรภาระงานใน REGION_1 Cloud DNS รองรับเฉพาะเป้าหมายการสำรองข้อมูลตามภูมิศาสตร์เท่านั้น ชุดการสำรองข้อมูลคือนโยบายตำแหน่งทางภูมิศาสตร์ที่มีตัวจัดสรรภาระงาน REGION_2 เป็นเป้าหมายสำหรับทั้ง REGION_1 และ REGION_2 เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud dns record-sets create failover.example.com --ttl 5 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com \
--enable-health-checking
ตัวอย่างเอาต์พุต
NAME: failover.example.com. TYPE: A TTL: 5 DATA: Primary: "10.1.0.4, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-west1, regionalL4ilb" Backup: us-west1: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb";us-east4: "10.2.0.3, 80, tcp, https://www.googleapis.com/compute/v1/projects/my-clouddns-codelab/global/networks/my-vpc, my-clouddns-codelab, us-east4, regionalL4ilb"
10. ทดสอบการแปลง DNS
ก่อนทดสอบการตั้งค่าการสลับไปใช้ข้อมูลสำรอง ให้จดบันทึกที่อยู่ IP สำหรับทั้งตัวจัดสรรภาระงานภายใน เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute forwarding-rules list --filter="name:($REGION_1-ilb $REGION_2-ilb)"
ตัวอย่างเอาต์พุต
ในตัวอย่างนี้ us-west1-ilb มีที่อยู่ IP เป็น 10.1.0.4 และ us-east4-ilb มีที่อยู่ IP เป็น 10.2.0.3
NAME: us-west1-ilb REGION: us-west1 IP_ADDRESS: 10.1.0.4 IP_PROTOCOL: TCP TARGET: us-west1/backendServices/us-west1-backend-service NAME: us-east4-ilb REGION: us-east4 IP_ADDRESS: 10.2.0.3 IP_PROTOCOL: TCP TARGET: us-east4/backendServices/us-east4-backend-service
ตอนนี้เราจะเข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์และทดสอบการแปลง DNS ในคอนโซลเว็บ ให้ไปที่ "Compute Engine | อินสแตนซ์ VM"

คลิกปุ่ม SSH เพื่อเข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์จากคอนโซล

ตอนนี้เราอยู่ใน VM ไคลเอ็นต์แล้ว ให้ใช้คำสั่ง dig เพื่อแก้ไขชื่อโดเมน failover.example.com
โดยลูปได้รับการกำหนดค่าให้เรียกใช้คำสั่ง 10 ครั้งโดยมีตัวตั้งเวลาปิด 6 วินาที
คำสั่ง
for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done
เนื่องจากตั้งค่า TTL ในระเบียน DNS เป็น 5 วินาที จึงได้เพิ่มตัวตั้งเวลาปิดเป็น 6 วินาที ตัวตั้งเวลาปิดจะช่วยให้คุณได้รับการตอบกลับ DNS ที่ไม่ได้แคชสำหรับคำขอ DNS แต่ละรายการ คำสั่งนี้จะใช้เวลาดำเนินการประมาณ 1 นาที
ในเอาต์พุต คุณจะเห็นที่อยู่ IP ของตัวจัดสรรภาระงานในชุดบันทึกทรัพยากรหลัก ในการตั้งค่าของเรา นี่จะเป็น IP ของตัวจัดสรรภาระงานในภูมิภาค us-west1
11. ทดสอบเฟลโอเวอร์
เราจะจำลองการเฟลโอเวอร์โดยนำแท็กเครือข่ายออกจาก VM ใน REGION_1 การดำเนินการนี้จะบล็อกการเข้าถึงพอร์ต 80 และส่งผลให้การตรวจสอบประสิทธิภาพการทำงานเริ่มล้มเหลว
นำแท็กเครือข่ายออก
ใช้คำสั่ง gcloud compute instances remove-tags เพื่อนำแท็กเครือข่ายออกจาก VM เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute instances remove-tags $REGION_1-instance \ --zone=$REGION_1_ZONE --tags=allow-http
การตรวจสอบประสิทธิภาพการทำงานจะล้มเหลวใน 10 วินาที เรียกใช้การทดสอบการแปลง DNS อีกครั้ง
การแปลง DNS
เรียกใช้คำสั่งต่อไปนี้จากอินสแตนซ์ไคลเอ็นต์
คำสั่ง
for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done
ในเอาต์พุต คุณจะเห็นที่อยู่ IP ของตัวจัดสรรภาระงานในชุดข้อมูลสำรองของระเบียนทรัพยากร ในการตั้งค่าของเรา นี่จะเป็น IP ของตัวจัดสรรภาระงานในภูมิภาค us-east4
12. ทดสอบการเพิ่มการเข้าชมทีละน้อย
โดยค่าเริ่มต้น นโยบายเฟลโอเวอร์จะแสดงผล IP ของปลายทางหลักสำหรับคำขอ DNS ทั้งหมด และจะแสดงผล IP ของข้อมูลสำรองก็ต่อเมื่อ IP หลักไม่ผ่านการตรวจสอบสถานะ Cloud DNS ช่วยให้ผู้ใช้กำหนดค่าอัตราส่วนการส่งข้อมูลทีละน้อยได้ ซึ่งจะช่วยให้ Cloud DNS ส่งการรับส่งข้อมูลบางส่วนไปยังเป้าหมายสำรองได้ แม้ว่าเป้าหมายหลักจะอยู่ในสถานะปกติก็ตาม อัตราส่วนต้องมีค่าอยู่ระหว่าง 0 ถึง 1 ค่าเริ่มต้นคือ 0
หากต้องการทดสอบ ให้เพิ่มแท็กเครือข่ายกลับไปยังเว็บเซิร์ฟเวอร์ REGION_1
เพิ่มแท็กเครือข่าย
เพิ่มแท็กลงใน VM ของเว็บเซิร์ฟเวอร์อีกครั้งเพื่อให้การรับส่งข้อมูล HTTP ไปยัง VM ของภูมิภาคหลัก เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud compute instances add-tags $REGION_1-instance \ --zone $REGION_1_ZONE --tags allow-http
การตรวจสอบประสิทธิภาพการทำงานจะผ่านใน 10 วินาที
ตรวจสอบว่าการแปลง DNS ชี้ไปยังตัวปรับสมดุลภาระงานหลัก ในการตั้งค่าของเรา นี่จะเป็นที่อยู่ IP ของตัวจัดสรรภาระงานในภูมิภาค us-west1
เรียกใช้คำสั่งต่อไปนี้จากอินสแตนซ์ไคลเอ็นต์
คำสั่ง
dig +short failover.example.com
อัปเดตระเบียน DNS
ตอนนี้เราจะแก้ไขระเบียน DNS สำหรับ failover.example.com เพื่อส่งการรับส่งข้อมูล 30% ไปยังชุดสำรองแม้ว่าชุดหลักจะทำงานได้ดีก็ตาม เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
คำสั่ง
gcloud dns record-sets update failover.example.com --ttl 30 --type A \
--routing-policy-type=FAILOVER \
--routing-policy-primary-data=$REGION_1-ilb \
--routing-policy-backup-data="${REGION_1}=${REGION_2}-ilb;${REGION_2}=${REGION_2}-ilb" \
--routing-policy-backup-data-type=GEO \
--zone=example-com --enable-health-checking \
--backup-data-trickle-ratio=0.3
การแปลง DNS
เรียกใช้คำสั่งต่อไปนี้จาก VM ไคลเอ็นต์ คุณจะเห็นว่าระเบียน DNS failover.example.com จะแปลงเป็น IP ของตัวจัดสรรภาระงานหลักประมาณ 70% ของเวลา และแปลงเป็น IP ของตัวจัดสรรภาระงานสำรองประมาณ 30% ของเวลา
for i in {1..10}; do echo $i; dig failover.example.com +short; sleep 6; done
13. ขั้นตอนการล้างข้อมูล
หากต้องการล้างข้อมูลทรัพยากรที่ใช้ใน Lab นี้ ให้เรียกใช้คำสั่งต่อไปนี้จาก Cloud Shell
gcloud dns record-sets delete failover.example.com --type=A \ --zone=example-com --quiet gcloud dns managed-zones delete example-com --quiet gcloud compute forwarding-rules delete $REGION_1-ilb \ --region=$REGION_1 --quiet gcloud compute forwarding-rules delete $REGION_2-ilb \ --region=$REGION_2 --quiet gcloud compute backend-services delete $REGION_1-backend-service \ --region=$REGION_1 --quiet gcloud compute backend-services delete $REGION_2-backend-service \ --region=$REGION_2 --quiet gcloud compute health-checks delete http-hc --quiet gcloud compute instances delete client-instance --zone=$REGION_1_ZONE --quiet gcloud compute instance-groups unmanaged delete $REGION_1-instance-group \ --zone=$REGION_1_ZONE --quiet gcloud compute instance-groups unmanaged delete $REGION_2-instance-group \ --zone=$REGION_2_ZONE --quiet gcloud compute instances delete $REGION_1-instance \ --zone=$REGION_1_ZONE --quiet gcloud compute instances delete $REGION_2-instance \ --zone=$REGION_2_ZONE --quiet gcloud compute routers nats delete $REGION_1-nat-gw \ --router=$REGION_1-cloudrouter --region=$REGION_1 --quiet gcloud compute routers nats delete $REGION_2-nat-gw \ --router=$REGION_2-cloudrouter --region=$REGION_2 --quiet gcloud compute routers delete $REGION_1-cloudrouter \ --region=$REGION_1 --quiet gcloud compute routers delete $REGION_2-cloudrouter \ --region=$REGION_2 --quiet gcloud compute firewall-rules delete allow-ssh allow-http-lb-hc --quiet gcloud compute networks subnets delete $REGION_1-subnet \ --region=$REGION_1 --quiet gcloud compute networks subnets delete $REGION_2-subnet \ --region=$REGION_2 --quiet gcloud compute networks delete my-vpc --quiet
14. ขอแสดงความยินดี
ขอแสดงความยินดี คุณได้ติดตั้งใช้งานและทดสอบนโยบายการกำหนดเส้นทางการล้มเหลวของ Cloud DNS เรียบร้อยแล้ว
สิ่งที่เราได้พูดถึง
- วิธีกำหนดค่านโยบายการกำหนดเส้นทางเฟลโอเวอร์ของ Cloud DNS
- ทดสอบการทำงานของ DNS Failover
- วิธีส่งการเข้าชมไปยังชุดสำรองทีละน้อย
สิ่งต่อไปที่ควรทำ
- ลองตั้งค่า IP หลายรายการสำหรับชุดที่ใช้งานอยู่และชุดสำรอง
- ลองเพิ่ม VM แบ็กเอนด์หลายรายการลงในกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ
- ลองตั้งค่าตัวจัดสรรภาระงานหลายตัวในภูมิภาคต่างๆ สำหรับนโยบายตำแหน่งทางภูมิศาสตร์ในชุดข้อมูลสำรอง
ดูข้อมูลเพิ่มเติม
https://cloud.google.com/dns/docs/zones/manage-routing-policies