1. מבוא
ברוכים הבאים ל-Codelab בנושא אופטימיזציות מתקדמות של איזון עומסים.
ב-codelab הזה נסביר איך להגדיר אפשרויות מתקדמות של איזון עומסים עבור מאזן העומסים הגלובלי החיצוני של אפליקציות. לפני שמתחילים, מומלץ לעיין במסמך בנושא איזון עומסים בענן ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

איור 1. תהליך העבודה של בחירת נקודת יעד באמצעות מאזן עומסים גלובלי חיצוני של אפליקציות.
טופולוגיה ותרחישים לדוגמה של Codelab

איור 2. טופולוגיית ניתוב של מאזן עומסים מסוג HTTP
במהלך שיעור ה-Lab הזה תגדירו שתי קבוצות של מכונות וירטואליות מנוהלות. תצרו מאזן עומסים גלובלי חיצוני מסוג 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
ב-Codelab הזה נשפר את תקינות מכונות ה-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. קודם ניצור תבניות של מופעים שמגדירות את התצורה של מכונות וירטואליות שייווצרו לכל אזור. בשלב הבא, לכל בק-אנד באזור, ניצור קבוצה של מופעי מכונה מנוהלים שמפנה לתבנית של הגדרות מכונה.
ההיקף של קבוצות מנוהלות של מופעי מכונה יכול להיות אזורי או אזורי. בשיעור Lab הזה ניצור קבוצות של מופעי מכונה מנוהלים (MIG) אזוריים.
בקטע הזה אפשר לראות סקריפט לטעינה בזמן ההפעלה שנוצר מראש, שיהיה רלוונטי ליצירת המכונה. סקריפט לטעינה בזמן ההפעלה הזה מתקין ומפעיל יכולות של שרת אינטרנט, שנשתמש בהן כדי לדמות אפליקציית אינטרנט. מוזמנים לעיין בסקריפט הזה.
יצירת תבניות של מכונות
השלב הראשון הוא ליצור תבנית של הגדרות מכונה.
מ-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 instances (מכונות וירטואליות). מוודאים שהמופעים החדשים (למשל, us-east1-a-mig-xxx) נוצרו בהתאם להגדרות של קבוצת המכונות.
עכשיו, שולחים בקשת אינטרנט בדפדפן כדי לוודא ששרת האינטרנט פועל (יכול להיות שייקח דקה עד שהוא יתחיל לפעול). בדף VM instances (מכונות וירטואליות) בקטע 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 שהוזמנה קודם לשרת ה-proxy של 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. אימות הפעולה התקינה של מאזן העומסים
כדי לוודא שתכונת איזון העומסים פועלת, צריך ליצור עומס מסוים. לשם כך, ניצור מכונה וירטואלית חדשה כדי לדמות עומס.
יצירת 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 למכונה הווירטואלית שיצרתם. אחרי שיוצרים את המכונה, לוחצים על 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, הגיע הזמן לוודא שהתנועה מתחלקת באופן שווה בין שתי קבוצות המופעים המנוהלות.
Stop the Siege
עכשיו, אחרי שהוכחתם שחלוקת התנועה המתקדמת פועלת, הגיע הזמן להפסיק את המצור. כדי לעשות זאת, חוזרים לטרמינל ה-SSH של siege-vm ומקישים על CTRL+C כדי להפסיק את הפעלת siege.
7. הגדרת מדיניות של איזון עומסים בשירות
יצירת מדיניות של איזון עומסים בשירות
אחרי שסיימנו את ההגדרה הבסיסית, ניצור מדיניות של איזון עומסים בשירות וננסה את התכונות המתקדמות. לדוגמה, נגדיר את השירות כך שישתמש בכמה הגדרות מתקדמות של איזון עומסים. בדוגמה הזו, אנחנו ניצור מדיניות רק כדי להשתמש בתכונה של ניצול אוטומטי של הקיבולת. אבל אפשר לנסות תכונות אחרות.
מ-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
צירוף מדיניות של איזון עומסים בשירות לשירות קצה עורפי
עכשיו נצרף את המדיניות החדשה לשירות לקצה העורפי הקיים שצוין למעלה.
מ-Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. שינוי הגדרות התקינות של שרת הקצה
בשלב הזה, מדיניות איזון העומסים החדשה של השירות הוחלה על שירות לקצה העורפי. לכן, מבחינה טכנית, אפשר לדלג ישירות לניקוי. אבל כחלק מה-Codelab, נבצע גם כמה שינויים נוספים ב-Production כדי להראות לכם איך המדיניות החדשה פועלת.
התכונה 'הפחתה אוטומטית של הקיבולת' תסיר באופן אוטומטי קבוצת מופעים מנוהלת (MIG) בעורף הדף ממאזן העומסים, אם המספר הכולל של קצוות העורף התקינים ירד מתחת לסף מסוים (25%). כדי לבדוק את התכונה הזו, נתחבר ב-SSH למכונות הווירטואליות ב-us-east1-b-mig ונגרום להן להיות במצב לא תקין. כדי להגיע לסף של 25%, תצטרכו להתחבר באמצעות SSH לארבע מהמכונות הווירטואליות ולהשבית את שרת Apache.
כדי לעשות זאת, בוחרים ארבע מכונות וירטואליות ומתחברים אליהן באמצעות SSH על ידי לחיצה על SSH להפעלת טרמינל וחיבור. מריצים את הפקודה הבאה.
sudo apachectl stop
בשלב הזה, תופעל התכונה של ניהול קיבולת אוטומטי, ולא יתקבלו בקשות חדשות ב-us-east1-b-mig.
9. איך מוודאים שהתכונה 'ניצול אוטומטי של קיבולת' פועלת
הפעלה מחדש של המצור
כדי לאמת את התכונה החדשה, נשתמש שוב במכונה הווירטואלית של siege. נבצע SSH למכונה הווירטואלית שיצרתם בשלב הקודם. אחרי שיוצרים את המכונה, לוחצים על 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.
Stop the Siege
עכשיו, אחרי שהוכחתם שחלוקת התנועה המתקדמת פועלת, הגיע הזמן להפסיק את המצור. כדי לעשות זאת, חוזרים לטרמינל ה-SSH של siege-vm ומקישים על CTRL+C כדי להפסיק את הפעלת siege.
10. שלבי הניקוי
עכשיו, אחרי שסיימנו עם סביבת ה-Lab, הגיע הזמן להסיר אותה. כדי למחוק את סביבת הבדיקה, מריצים את הפקודות הבאות.
מ-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.
מה נכלל
- יצירת מאזן עומסים חיצוני של אפליקציות עם מדיניות של מאזן עומסים של שירות.
- מגדירים את תכונת הניקוז האוטומטי של הקיבולת בשירות הקצה העורפי.
השלבים הבאים
- אפשר לנסות תכונות אחרות שמופיעות במדיניות של איזון העומסים בשירות.