1. บทนำ
ยินดีต้อนรับสู่ Codelab ของการเพิ่มประสิทธิภาพการจัดสรรภาระงานขั้นสูง
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีกำหนดค่าตัวเลือกการจัดสรรภาระงานขั้นสูงสำหรับตัวจัดสรรภาระงานแอปพลิเคชันภายนอกทั่วโลก ก่อนเริ่มต้น เราขอแนะนำให้อ่านเอกสารเกี่ยวกับการจัดสรรภาระงานบนระบบคลาวด์ก่อน ( https://cloud.google.com/load-balancing/docs/load-balancing-overview)
รูปที่ 1 เวิร์กโฟลว์ในการเลือกปลายทางด้วยตัวจัดสรรภาระงานแอปพลิเคชันภายนอกทั่วโลก
โทโปโลยีและกรณีการใช้งานของ Codelab
รูปที่ 2 โทโพโลยีการกำหนดเส้นทางของตัวจัดสรรภาระงาน HTTP
ระหว่างห้องทดลองโค้ดนี้ คุณจะตั้งค่าอินสแตนซ์ที่มีการจัดการ 2 กลุ่ม คุณจะสร้างตัวจัดสรรภาระงาน https ภายนอกทั่วโลก ตัวจัดสรรภาระงานจะใช้ฟีเจอร์หลายอย่างจากรายการความสามารถขั้นสูงที่ตัวจัดสรรภาระงานแบบ Envoy รองรับ เมื่อติดตั้งใช้งานแล้ว คุณจะต้องสร้างการจําลองการโหลดบางส่วนและยืนยันว่าการกําหนดค่าที่คุณตั้งไว้ทํางานอย่างเหมาะสม
สิ่งที่คุณจะได้เรียนรู้
- วิธีกำหนดค่า ServiceLbPolicy เพื่อปรับแต่งตัวจัดสรรภาระงาน
สิ่งที่ต้องมี
- ความรู้เกี่ยวกับการจัดสรรภาระงาน HTTPS ภายนอก ส่วนแรกของ Codelab นี้คล้ายกับ Codelab เกี่ยวกับ HTTPs LB ภายนอกที่มีการจัดการการรับส่งข้อมูลขั้นสูง (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv) เราขอแนะนำให้อ่านคู่มือดังกล่าวก่อน
2. ก่อนเริ่มต้น
ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
เปิดใช้ API
เปิดใช้บริการที่จำเป็นทั้งหมด
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. สร้างเครือข่าย VPC
สร้างเครือข่าย VPC
จาก Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
สร้างกฎไฟร์วอลล์ VPC
หลังจากสร้าง VPC แล้ว คุณจะต้องสร้างกฎไฟร์วอลล์ ระบบจะใช้กฎไฟร์วอลล์เพื่ออนุญาตให้ IP ทั้งหมดเข้าถึง IP ภายนอกของเว็บไซต์แอปพลิเคชันทดสอบบนพอร์ต 80 สําหรับการรับส่งข้อมูล HTTP
จาก Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
เอาต์พุต
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
ในโค้ดแล็บนี้ เราจะปรับประสิทธิภาพของ VM ดังนั้นเราจะสร้างกฎไฟร์วอลล์เพื่ออนุญาต SSH ด้วย
จาก Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \ --network=httplbs \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
เอาต์พุต
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. ตั้งค่าอินสแตนซ์ที่มีการจัดการ
คุณจะต้องตั้งค่าอินสแตนซ์ที่มีการจัดการ ซึ่งรวมถึงรูปแบบของทรัพยากรแบ็กเอนด์ที่ตัวจัดสรรภาระงาน HTTP ใช้ ก่อนอื่น เราจะสร้างเทมเพลตอินสแตนซ์ซึ่งกำหนดการกำหนดค่าสำหรับ VM ที่จะสร้างสำหรับแต่ละภูมิภาค ถัดไป เราจะสร้างกลุ่มอินสแตนซ์ที่มีการจัดการซึ่งอ้างอิงเทมเพลตอินสแตนซ์สําหรับแบ็กเอนด์ในแต่ละภูมิภาค
กลุ่มอินสแตนซ์ที่มีการจัดการอาจมีขอบเขตระดับโซนหรือระดับภูมิภาค สำหรับแบบฝึกหัดในห้องทดลองนี้ เราจะสร้างกลุ่มอินสแตนซ์ที่มีการจัดการในระดับโซน
ในส่วนนี้ คุณจะเห็นสคริปต์เริ่มต้นที่สร้างไว้ล่วงหน้าซึ่งจะอ้างอิงเมื่อสร้างอินสแตนซ์ สคริปต์เริ่มต้นนี้จะติดตั้งและเปิดใช้ความสามารถของเว็บเซิร์ฟเวอร์ที่เราจะใช้จำลองเว็บแอปพลิเคชัน คุณลองใช้สคริปต์นี้ได้
สร้างเทมเพลตอินสแตนซ์
ขั้นตอนแรกคือการสร้างเทมเพลตอินสแตนซ์
จาก Cloud Shell
gcloud compute instance-templates create test-template \ --network=httplbs \ --tags=allow-ssh,http-server \ --image-family=debian-9 \ --image-project=debian-cloud \ --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'
เอาต์พุต
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
ตอนนี้คุณสามารถยืนยันว่าสร้างเทมเพลตอินสแตนซ์สำเร็จแล้วด้วยคำสั่ง gcloud ต่อไปนี้
จาก Cloud Shell
gcloud compute instance-templates list
เอาต์พุต
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
สร้างอินสแตนซ์
ตอนนี้เราต้องสร้างกลุ่มอินสแตนซ์ที่มีการจัดการจากเทมเพลตอินสแตนซ์ที่เราสร้างไว้ก่อนหน้านี้
จาก Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
จาก Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
เรายืนยันได้ว่ากลุ่มอินสแตนซ์สร้างขึ้นสําเร็จด้วยคําสั่ง gcloud ต่อไปนี้
จาก Cloud Shell
gcloud compute instance-groups list
เอาต์พุต
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
ยืนยันฟังก์ชันการทํางานของเว็บเซิร์ฟเวอร์
อินสแตนซ์แต่ละรายการได้รับการกําหนดค่าให้เรียกใช้เว็บเซิร์ฟเวอร์ Apache ด้วยสคริปต์ PHP แบบง่ายที่แสดงผลดังตัวอย่างด้านล่าง
หน้าที่แสดงจาก: us-east1-a-mig-ww2h
หากต้องการตรวจสอบว่าเว็บเซิร์ฟเวอร์ทำงานอย่างถูกต้อง ให้ไปที่ Compute Engine -> อินสแตนซ์ VM ตรวจสอบว่าได้สร้างอินสแตนซ์ใหม่ (เช่น us-east1-a-mig-xxx) ตามคําจํากัดความของกลุ่มอินสแตนซ์แล้ว
จากนั้นส่งคำขอเว็บในเบราว์เซอร์เพื่อตรวจสอบว่าเว็บเซิร์ฟเวอร์ทำงานอยู่ (อาจใช้เวลา 1 นาทีในการเริ่มต้น) ในหน้าอินสแตนซ์ VM ในส่วน Compute Engine ให้เลือกอินสแตนซ์ที่สร้างโดยกลุ่มอินสแตนซ์ แล้วคลิก IP ภายนอก (สาธารณะ) ของอินสแตนซ์นั้น
หรือไปที่ http://<IP_Address> ในเบราว์เซอร์
5. ตั้งค่าตัวจัดสรรภาระงาน
สร้างการตรวจสอบประสิทธิภาพการทำงาน
ก่อนอื่นเราต้องสร้างการตรวจสอบประสิทธิภาพพื้นฐานเพื่อให้แน่ใจว่าบริการของเราทำงานได้อย่างถูกต้อง เราจะสร้างการตรวจสอบประสิทธิภาพการทำงานพื้นฐาน แต่คุณปรับแต่งขั้นสูงได้อีกมากมาย
จาก Cloud Shell
gcloud compute health-checks create http http-basic-check \ --port 80
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
จองที่อยู่ IP ภายนอก
ในขั้นตอนนี้ คุณจะต้องจองที่อยู่ IP แบบคงที่ที่พร้อมใช้งานทั่วโลกซึ่งจะแนบกับตัวจัดสรรภาระงานในภายหลัง
จาก Cloud Shell
gcloud compute addresses create lb-ipv4-2 \ --ip-version=IPV4 \ --global
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
อย่าลืมจดที่อยู่ IP ที่จองไว้
gcloud compute addresses describe lb-ipv4-2 \ --format="get(address)" \ --global
สร้างบริการแบ็กเอนด์
ตอนนี้เราต้องสร้างบริการแบ็กเอนด์สําหรับกลุ่มอินสแตนซ์ที่มีการจัดการที่เราสร้างขึ้นก่อนหน้านี้
จาก Cloud Shell
gcloud compute backend-services create east-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
เพิ่ม MIG ไปยังบริการแบ็กเอนด์
เมื่อสร้างบริการแบ็กเอนด์แล้ว เราต้องเพิ่มกลุ่มอินสแตนซ์ที่มีการจัดการซึ่งสร้างไว้ก่อนหน้านี้ลงในบริการแบ็กเอนด์แต่ละรายการ
จาก Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
จาก Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
คุณสามารถยืนยันว่าเพิ่มแบ็กเอนด์แล้วโดยเรียกใช้คําสั่งต่อไปนี้
จาก Cloud Shell
gcloud compute backend-services list
เอาต์พุต
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
สร้างแมป URL
ตอนนี้เราจะสร้างแผนที่ URL
gcloud compute url-maps create web-map-http \ --default-service=east-backend-service \ --global
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
สร้างฟรอนต์เอนด์ HTTP
ขั้นตอนสุดท้ายในการสร้างตัวจัดสรรภาระงานคือการสร้างส่วนหน้า ซึ่งจะแมปที่อยู่ IP ที่คุณจองไว้ก่อนหน้านี้กับแผนที่ URL ของตัวจัดสรรภาระงานที่คุณสร้างขึ้น
จาก Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \ --url-map=web-map-http
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
ถัดไปคุณต้องสร้างกฎการส่งต่อร่วมซึ่งจะแมปที่อยู่ IP ที่จองไว้ก่อนหน้านี้กับพร็อกซี HTTP
จาก Cloud Shell
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme EXTERNAL_MANAGED \ --address=lb-ipv4-2 \ --global \ --target-http-proxy=http-lb-proxy-adv \ --ports=80
เมื่อถึงจุดนี้ คุณสามารถตรวจสอบว่าตัวจัดสรรภาระงานทํางานกับที่อยู่ IP ที่คุณจดไว้ก่อนหน้านี้
6. ยืนยันว่าโหลดบาลานเซอร์ทํางานอยู่
คุณต้องสร้างโหลดบางส่วนเพื่อยืนยันว่าฟีเจอร์การกระจายโหลดทํางาน โดยเราจะสร้าง VM ใหม่เพื่อจำลองการโหลด
Create Siege-vm
ตอนนี้คุณจะสร้าง siege-vm ที่จะใช้ในการสร้างโหลด
จาก Cloud Shell
gcloud compute instances create siege-vm \ --network=httplbs \ --zone=us-east1-a \ --machine-type=e2-medium \ --tags=allow-ssh,http-server \ --metadata=startup-script='sudo apt-get -y install siege'
เอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
จากนั้นคุณสามารถ SSH เข้าสู่ VM ที่สร้างไว้ เมื่อสร้างแล้ว ให้คลิก SSH เพื่อเปิดใช้งานเทอร์มินัลและเชื่อมต่อ
เมื่อเชื่อมต่อแล้ว ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโหลด ใช้ที่อยู่ IP ที่คุณจองไว้ก่อนหน้านี้สำหรับตัวจัดสรรภาระงาน HTTP ภายนอก
จาก Cloud Shell
siege -c 20 http://$lb-ipv4-2
เอาต์พุต
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
ตรวจสอบการกระจายโหลด
เมื่อ Siege ทำงานแล้ว ก็ได้เวลาตรวจสอบว่ามีการกระจายการเข้าชมไปยังกลุ่มอินสแตนซ์ที่จัดการ 2 กลุ่มอย่างเท่าๆ กัน
หยุดการปิดล้อม
เมื่อพิสูจน์แล้วว่าการแยกการเข้าชมขั้นสูงทํางานได้ ก็ถึงเวลาหยุดการจู่โจม โดยให้กลับไปที่เทอร์มินัล SSH ของ siege-vm แล้วกด CTRL+C เพื่อหยุดการเรียกใช้ siege
7. กำหนดค่านโยบาย LB ของบริการ
สร้างนโยบาย LB ของบริการ
เมื่อตั้งค่าพื้นฐานเสร็จแล้ว เราจะสร้างนโยบาย LB ของบริการและลองใช้ฟีเจอร์ขั้นสูง ตัวอย่างเช่น เราจะกำหนดค่าบริการให้ใช้การตั้งค่าการจัดสรรภาระงานขั้นสูงบางอย่าง ในตัวอย่างนี้ เราจะสร้างนโยบายเพื่อใช้ฟีเจอร์การระบายความจุอัตโนมัติ แต่คุณสามารถลองใช้ฟีเจอร์อื่นๆ ได้
จาก Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \ --auto-capacity-drain --location=global
เรายืนยันได้ว่าสร้างนโยบายเรียบร้อยแล้วด้วยคำสั่ง gcloud ต่อไปนี้
จาก Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
เอาต์พุต
NAME http-policy
แนบนโยบาย LB ของบริการกับบริการแบ็กเอนด์
ตอนนี้เราจะแนบนโยบายใหม่ไปกับบริการแบ็กเอนด์ที่มีอยู่ด้านบน
จาก Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. ปรับแต่งประสิทธิภาพของแบ็กเอนด์
เมื่อถึงจุดนี้ นโยบาย lb บริการใหม่จะมีผลกับบริการแบ็กเอนด์ของคุณ ซึ่งในทางเทคนิคแล้วคุณก็สามารถล้างข้อมูลได้โดยตรง แต่เราจะทำการปรับเปลี่ยนเพิ่มเติมในเวอร์ชันที่ใช้งานจริงเพื่อแสดงให้คุณเห็นวิธีการทํางานของนโยบายใหม่ด้วย
ฟีเจอร์การลดขีดจํากัดอัตโนมัติจะนำ MIG แบ็กเอนด์ออกจากโหลดบาลานเซอร์โดยอัตโนมัติเมื่อจำนวนแบ็กเอนด์ที่ทำงานได้อย่างสมบูรณ์ทั้งหมดลดลงต่ำกว่าเกณฑ์ (25%) ในการทดสอบฟีเจอร์นี้ เราจะ SSH เข้าสู่ VM ใน us-east1-b-mig และทำให้ VM ไม่ทำงาน เมื่อมีเกณฑ์ 25% คุณจะต้อง SSH ลงใน VM 4 รายการและปิดเซิร์ฟเวอร์ Apache
โดยเลือก VM 4 เครื่องแล้ว SSH เข้าไปโดยคลิก SSH เพื่อเปิดเทอร์มินัลและเชื่อมต่อ จากนั้นเรียกใช้คำสั่งต่อไปนี้
sudo apachectl stop
เมื่อถึงจุดนี้ ระบบจะเรียกใช้ฟีเจอร์การลดกำลังการผลิตอัตโนมัติและ us-east1-b-mig จะไม่ได้รับการร้องขอใหม่
9. ตรวจสอบว่าฟีเจอร์การลดกำลังการผลิตอัตโนมัติทํางานอยู่
เริ่ม Siege อีกครั้ง
เราจะนำ VM ปิดมาใช้ซ้ำอีกครั้งเพื่อยืนยันฟีเจอร์ใหม่ ลองใช้ SSH เพื่อเข้าถึง VM ที่คุณสร้างในขั้นตอนก่อนหน้ากัน เมื่อสร้างแล้ว ให้คลิก SSH เพื่อเปิดเทอร์มินัลและเชื่อมต่อ
เมื่อเชื่อมต่อแล้ว ให้เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างโหลด ใช้ที่อยู่ IP ที่คุณจองไว้ก่อนหน้านี้สำหรับตัวจัดสรรภาระงาน HTTP ภายนอก
จาก Cloud Shell
siege -c 20 http://$lb-ipv4-2
เอาต์พุต
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
เมื่อถึงจุดนี้ คุณจะเห็นคําขอทั้งหมดที่ส่งไปยัง us-east1-a-mig
หยุดการปิดล้อม
เมื่อพิสูจน์แล้วว่าการแยกการเข้าชมขั้นสูงทํางานได้ ก็ถึงเวลาหยุดการจู่โจม โดยให้กลับไปที่เทอร์มินัล SSH ของ siege-vm แล้วกด CTRL+C เพื่อหยุดการเรียกใช้ siege
10. ขั้นตอนการล้างข้อมูล
เมื่อสร้างสภาพแวดล้อมการทดสอบเสร็จแล้ว ก็ถึงเวลารื้อถอน โปรดเรียกใช้คําสั่งต่อไปนี้เพื่อลบสภาพแวดล้อมการทดสอบ
จาก Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. ยินดีด้วย
ยินดีด้วยที่ทํา Codelab จนเสร็จสมบูรณ์
สิ่งที่เราได้พูดถึง
- การสร้างตัวจัดสรรภาระงานแอปพลิเคชันภายนอกที่มีนโยบาย lb ของบริการ
- กำหนดค่าบริการแบ็กเอนด์ของคุณด้วยฟีเจอร์การระบายความจุอัตโนมัติ
ขั้นตอนถัดไป
- ลองใช้ฟีเจอร์อื่นๆ ที่นโยบาย LB ของบริการมีให้