Codelab של אופטימיזציות מתקדמות של איזון עומסים

1. מבוא

ברוכים הבאים ל-Codelab בנושא אופטימיזציות מתקדמות של איזון עומסים.

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

c3fb1d3f027e8640.png

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

טופולוגיה ותרחישים לדוגמה של Codelab

2f7368df335d3de9.png

איור 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.

מה נכלל

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

השלבים הבאים

  • אפשר לנסות תכונות אחרות שמופיעות במדיניות של איזון העומסים בשירות.