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) แบบเนทีฟ ตัวจัดสรรภาระงานภายในจะถือว่ามีประสิทธิภาพดีหากแบ็กเอนด์ 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
- วิธีกระจายการเข้าชมไปยังชุดข้อมูลสำรอง
สิ่งที่คุณต้องมี
- ความรู้พื้นฐานเกี่ยวกับ 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน ดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Codelab นี้ทำได้ในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย
3. เวอร์ชันของ Google Cloud SDK
ณ เวลาเขียนอีเมล 401.0.0
คือ Google Cloud SDK เวอร์ชันล่าสุด คำสั่งทั้งหมดในห้องทดลองนี้ได้รับการทดสอบโดยใช้ 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 และ 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 และอีก 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 ภูมิภาค 1
คำสั่ง
gcloud compute routers create "${REGION_1}-cloudrouter" \ --region $REGION_1 --network=my-vpc --asn=65501
Cloud Router ภูมิภาค 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_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_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 และอีก 1 รายการใน REGION_2 เราใช้สคริปต์เริ่มต้นเพื่อติดตั้งและกำหนดค่า Apache ในเว็บเซิร์ฟเวอร์
เว็บเซิร์ฟเวอร์ REGION_1
เรียกใช้คำสั่งต่อไปนี้ใน 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
เรียกใช้คำสั่งต่อไปนี้ใน 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
ในการสร้าง ILB ของ L4 เราต้องสร้างการตรวจสอบประสิทธิภาพการทำงาน บริการแบ็กเอนด์ และกฎการส่งต่อ
สร้างการตรวจสอบประสิทธิภาพการทำงาน
ใช้คำสั่ง 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 สำรองในกรณีที่หลักไม่ผ่านการตรวจสอบประสิทธิภาพการทำงานเท่านั้น Cloud DNS ช่วยให้ผู้ใช้กำหนดค่า Trickle Ratio ซึ่งอนุญาตให้ 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. ขั้นตอนการทำความสะอาด
ในการล้างข้อมูลทรัพยากรที่ใช้ในห้องทดลองนี้ ให้เรียกใช้คำสั่งต่อไปนี้จาก CloudShell
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
- การตั้งค่าวิธีกระจายการเข้าชมไปยังข้อมูลสำรอง
สิ่งที่ต้องทำต่อไป
- ลองตั้งค่า IP หลายรายการสำหรับชุดที่ใช้งานอยู่และชุดสำรอง
- ลองเพิ่ม VM แบ็กเอนด์หลายรายการลงในกลุ่มอินสแตนซ์ที่ไม่มีการจัดการ
- ลองตั้งค่าตัวจัดสรรภาระงานหลายตัวในภูมิภาคต่างๆ สำหรับนโยบายตำแหน่งทางภูมิศาสตร์ในชุดข้อมูลสำรอง
ดูข้อมูลเพิ่มเติม
https://cloud.google.com/dns/docs/zones/manage-routing-policies