1. מבוא
אנחנו שמחים שבחרת ב-Codelab של האופטימיזציות המתקדמות של איזון העומסים!
בקודלאב הזה תלמדו איך להגדיר אפשרויות מתקדמות של איזון עומסים למאזן העומסים הגלובלי החיצוני של אפליקציות. לפני שמתחילים, מומלץ לעיין במסמך בנושא איזון עומסים בענן ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).
איור 1. תהליך העבודה של בחירת נקודת קצה של יעד באמצעות מאזן העומסים החיצוני הגלובלי של אפליקציות.
טופולוגיה של Codelab ותרחישים לדוגמה
איור 2. הטופולוגיה של הניתוב של מאזן עומסים של HTTP
במהלך סדנת הקוד הזו תגדירו שתי קבוצות של מופעי מכונה מנוהלים. תיצורו מאזן עומסים חיצוני גלובלי מסוג HTTPS. במאזן העומסים ייעשה שימוש בכמה תכונות מרשימת היכולות המתקדמות שנתמכות במאזן העומסים שמבוסס על הגבל. לאחר הפריסה, תצטרכו ליצור עומס מדומה ולבדוק שההגדרות שהגדרתם פועלות כראוי.
מה תלמדו
- איך מגדירים את ServiceLbPolicy כדי לשפר את מאזן העומסים.
מה צריך להכין
- ידע באיזון עומסים של תוספי HTTPS חיצוניים. החלק הראשון של ה-Codelab הזה דומה מאוד ל-External HTTPs LB with Advanced Traffic Management (Envoy) Codelab ( 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 הזה נשנה את סטטוס התקינות של המכונות הווירטואליות. לכן נצטרך ליצור גם כללי חומת אש כדי לאפשר 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. קודם נגדיר תבניות למכונות וירטואליות, שבהן נגדיר את ההגדרות של המכונות הווירטואליות שייווצרו בכל אזור. בשלב הבא, לכל קצה עורפי בכל אזור, נוצר קבוצה של מכונות מנוהלות שמפנה לתבנית של מכונה.
היקף הקבוצות של המכונות המנוהלות יכול להיות אזורי או אזורי. במעבדה הזו ניצור קבוצות של מופעי מכונה מנוהלים ברמת תחום (zone).
בקטע הזה מוצג סקריפט לטעינה בזמן ההפעלה שנוצר מראש, שאליו יהיה הפניה בזמן יצירת המכונה. סקריפט ההפעלה הזה מתקין ומפעיל יכולות של שרת אינטרנט, שבהן נשתמש כדי לדמות אפליקציית אינטרנט. אפשר לבדוק את הסקריפט הזה.
יצירת תבניות המכונות
השלב הראשון הוא ליצור תבנית למכונה.
מ-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 פשוט שמייצר גרסה מוצגת (render) שנראת בערך כך:
הצגת הדף מאת: us-east1-a-mig-ww2h
כדי לוודא ששרתי האינטרנט פועלים כמו שצריך, עוברים אל Compute Engine -> מכונות וירטואליות. חשוב לוודא שהמכונות החדשות (למשל us-east1-a-mig-xxx) נוצרו בהתאם להגדרות של קבוצות המכונות.
עכשיו, שולחים אליו בקשת אינטרנט בדפדפן כדי לוודא ששרת האינטרנט פועל (הפעלה יכולה להימשך דקה). בדף מכונות ה-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 ששמורה קודם לשרתי ה-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, שבה נשתמש כדי ליצור עומס.
מ-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 כדי להפסיק את הרצת המצור.
7. הגדרת מדיניות Service Lb
יצירת מדיניות של Service LB
עכשיו, אחרי שסיימתם את ההגדרה הבסיסית, אנחנו ניצור מדיניות Service 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
צירוף מדיניות Service LB לשירות לקצה העורפי
עכשיו נצרף את המדיניות החדשה לשירות הקיים של הקצה העורפי שלמעלה.
מ-Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. שיפור בריאות הקצה העורפי
בשלב הזה, המדיניות החדשה לגבי פאונד הוחלה על השירות לקצה העורפי. כך שאפשר לדלג ישירות לניקוי. אבל כחלק מהקודלאב, נבצע גם כמה שינויים נוספים בסביבת הייצור כדי להראות לכם איך המדיניות החדשה פועלת.
התכונה 'ניקוי אוטומטי של קיבולת' תסיר באופן אוטומטי MIG לקצה עורפי מאזן העומסים כשהמספר הכולל של הקצוות העורפיים התקינים יירד מתחת לסף מסוים (25%). כדי לבדוק את התכונה הזו, נעבור ל-SSH לתוך המכונות הווירטואליות ב-us-east1-b-mig ונהפוך אותן ללא בריאות. אם הסף הוא 25%, תצטרכו להתחבר ב-SSH לארבע מהמכונות הווירטואליות ולכבות את שרת Apache.
כדי לעשות זאת, בוחרים ארבע מכונות וירטואליות ומתחברים אליהן באמצעות SSH. לשם כך, לוחצים על SSH כדי להפעיל טרמינל ולהתחבר. לאחר מכן מריצים את הפקודה הבאה.
sudo apachectl stop
בשלב הזה, התכונה של ניצול אוטומטי של קיבולת תופעל, והמכונה us-east1-b-mig לא תקבל בקשות חדשות.
9. איך לוודא שתכונת ניקוז הקיבולת האוטומטית פועלת
הפעלה מחדש של המצור
כדי לאמת את התכונה החדשה, נשתמש שוב במכונה הווירטואלית של המצור. נשתמש ב-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 כדי להפסיק את ההתקפה.
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.
אילו נושאים דיברנו?
- יצירת מאזן עומסים חיצוני של אפליקציות עם מדיניות של מאזן עומסים של שירות.
- מגדירים את שירות הקצה העורפי עם התכונה של ניצול אוטומטי של קיבולת.
השלבים הבאים
- כדאי לנסות תכונות אחרות שמדיניות ה-Service LB מספקת.