เฟลโอเวอร์แบบหลายภูมิภาคโดยใช้นโยบายการกำหนดเส้นทาง Cloud DNS และการตรวจสอบประสิทธิภาพการทำงานสำหรับตัวจัดสรรภาระงาน TCP/UDP ภายใน

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

การตั้งค่าเป็นดังที่แสดงด้านล่าง

d0a91d3d3698f544.png

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

  • วิธีสร้างนโยบายการกำหนดเส้นทางการทำงานล้มเหลว
  • ทริกเกอร์ DNS Failover
  • วิธีกำหนดเส้นทางการรับส่งข้อมูลไปยังชุดสำรอง

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

  • ความรู้พื้นฐานเกี่ยวกับ DNS
  • ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine
  • ความรู้พื้นฐานเกี่ยวกับตัวจัดสรรภาระงานภายใน L4

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 ในแถบเครื่องมือด้านขวาบน

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 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

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

  1. หาก SDK เป็นเวอร์ชัน 401.0.0 ขึ้นไป ให้ข้ามไปยังส่วนถัดไป
  2. หากเวอร์ชัน 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"

5c824940bf414501.png

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

b916eb32c60a4156.png

ตอนนี้เราอยู่ใน 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