เฟลโอเวอร์แบบหลายภูมิภาคโดยใช้นโยบายการกำหนดเส้นทาง 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) แบบเนทีฟ ตัวจัดสรรภาระงานภายในจะถือว่ามีประสิทธิภาพดีหากแบ็กเอนด์ 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
  • วิธีกระจายการเข้าชมไปยังชุดข้อมูลสำรอง

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

  • ความรู้พื้นฐานเกี่ยวกับ 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 ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

  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 และ 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"

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 สำรองในกรณีที่หลักไม่ผ่านการตรวจสอบประสิทธิภาพการทำงานเท่านั้น 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