1. מבוא
אתם יכולים להגדיר מאזן עומסי רשת כדי להפיץ את תעבורת הנתונים בין שרתי ה-Backend של מאזן העומסים על סמך המשקלים שמדווחים על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
כדי להשתמש באיזון עומסים משוקלל, צריך להגדיר את שני הדברים הבאים:
- צריך להגדיר את מדיניות איזון העומסים של הלוקאליות (localityLbPolicy) של שירות לקצה העורפי ל-WEIGHTED_MAGLEV.
- צריך להגדיר את שירות לקצה העורפי עם בדיקת תקינות מסוג HTTP/HTTP2/HTTPS. התגובות של בדיקת תקינות ה-HTTP צריכות להכיל שדה כותרת תגובה מותאם אישית של HTTP X-Load-Balancing-Endpoint-Weight כדי לציין את המשקלים עם ערכים שלמים מ-0 עד 1,000 בייצוג עשרוני לכל שרת עורפי (backend instance).
אם אתם משתמשים באותה קבוצת מכונות כקצה עורפי לכמה מאזני עומסים ברשת שמבוססים על שירות לקצה העורפי, באמצעות איזון עומסים משוקלל, מומלץ להשתמש בנתיב בקשה ייחודי לכל בדיקת תקינות של השירות לקצה העורפי. מידע נוסף זמין במאמר בנושא קריטריונים להצלחה של בדיקות תקינות של HTTP, HTTPS ו-HTTP/2.
בדיקת תקינות מסוג HTTP צריכה להחזיר תגובה מסוג HTTP 200 (OK) כדי שהבדיקות יעברו והמופע של הבק-אנד ייחשב תקין. במצבים שבהם כל מופעי ה-backend עוברים את בדיקות התקינות ומחזירים X-Load-Balancing-Endpoint-Weight עם משקל אפס, מאזן העומסים מחלק את החיבורים החדשים בין ה-backend התקינים, ומתייחס אליהם עם משקל שווה. מאזן העומסים יכול גם לחלק חיבורים חדשים בין שרתי קצה עורפיים לא תקינים. מידע נוסף זמין במאמר בנושא חלוקת התנועה.
דוגמאות לאיזון עומסים משוקלל מופיעות במאמר בחירת קצה עורפי ומעקב אחר חיבורים.
אפשר להשתמש באיזון עומסים משוקלל בתרחישים הבאים:
- אם חלק מהחיבורים מעבדים יותר נתונים מאחרים, או שחלק מהחיבורים פעילים יותר זמן מאחרים, יכול להיות שחלוקת העומס בשרת העורפי לא תהיה אחידה. על ידי סימון משקל נמוך יותר לכל מופע, מופע עם עומס גבוה יכול לצמצם את החלק שלו בחיבורים חדשים, תוך המשך טיפול בחיבורים קיימים.
- אם עומס היתר על שרת קצה עורפי גבוה מדי, והקצאה של חיבורים נוספים עלולה לשבש את החיבורים הקיימים, שרת הקצה העורפי הזה מקצה לעצמו משקל אפס. כשמציינים משקל אפס, מופסק הטיפול בחיבורים חדשים בשרת העורפי (backend instance), אבל הטיפול בחיבורים קיימים נמשך.
- אם מתבצע ניתוק של חיבורים קיימים בשרת קצה עורפי לפני תחזוקה, השרת מקצה לעצמו משקל אפס. האות של משקל אפס גורם לשרת העורפי (backend instance) להפסיק לטפל בחיבורים חדשים, אבל הוא ממשיך לטפל בחיבורים קיימים.
מה תלמדו
- איך מגדירים מאזן עומסי רשת כדי להפיץ את תעבורת הנתונים בין מופעי ה-Backend של מאזן העומסים על סמך המשקלים שמדווחים על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי להשבית את המשאבים ולא לחייב אתכם מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את כל הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.
2. התחלת ההגדרה
ב-Codelab נדרש פרויקט אחד.
במדריך הזה תיצרו קבוצת מכונות וירטואליות עם שלוש מכונות וירטואליות ותקצו משקלים לכל מכונה וירטואלית. יוצרים בדיקת תקינות של HTTP כדי לדווח על משקלים של שרתי עורפיים. מאזן עומסי רשת משוקלל מופעל בשירות לקצה העורפי עם מדיניות איזון עומסים מקומי כ-WEIGHTED_MAGLEV.
לפני שמתחילים
- סקירה כללית על איזון עומסים חיצוני ברשת שמבוסס על שירות לקצה עורפי
- מתקינים את Google Cloud CLI. סקירה כללית מלאה של הכלי זמינה במאמר סקירה כללית על ה-CLI של gcloud. אפשר למצוא פקודות שקשורות לאיזון עומסים במדריך העזר ל-API ול-CLI של gcloud. אם לא הפעלתם את Google Cloud CLI בעבר, קודם מריצים את gcloud init כדי לבצע אימות.
- מפעילים את ה-API של Compute.
gcloud services enable compute.googleapis.com
הערה: אי אפשר להשתמש במסוף Google Cloud כדי להגדיר את מדיניות איזון העומסים לפי אזור ולהקצות משקלים למופעי מכונות וירטואליות. במקום זאת, צריך להשתמש ב-Google Cloud CLI.
יצירת רשת VPC, רשתות משנה וכללי חומת אש
יוצרים רשת VPC, תת-רשת וכללי חומת אש שמאפשרים תעבורת נתונים נכנסת (ingress) כדי לאפשר חיבורים למכונות הווירטואליות של ה-backend של מאזן העומסים.
- יוצרים רשת VPC ורשת משנה. א. כדי ליצור את רשת ה-VPC, מריצים את הפקודה
gcloud compute networks create:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
ב. בדוגמה הזו, טווח כתובות ה-IPv4 הראשי של רשת המשנה הוא 10.10.0.0/24.
כדי ליצור את רשת המשנה, מריצים את הפקודה gcloud compute networks subnets create :
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
מחליפים את מה שכתוב בשדות הבאים:
-
NETWORK_NAME: השם של רשת ה-VPC שרוצים ליצור. -
SUBNET_NAME: השם של רשת המשנה שרוצים ליצור.
- יוצרים כלל חומת אש שמאפשר תעבורת נתונים נכנסת (ingress) כדי לאפשר מסירה של מנות שנשלחות ליציאות TCP ביעד 80 ו-443 למכונות הווירטואליות של ה-Backend. בדוגמה הזו, כלל חומת האש מאפשר חיבורים מכל כתובת IP של מקור. כלל חומת האש חל על מכונות וירטואליות עם תג הרשת
network-lb-tag. כדי ליצור את הכלל בחומת האש, מריצים את הפקודהgcloud compute firewall-rules create:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
מחליפים את FIREWALL_RULE_NAME בשם של הכלל בחומת האש שרוצים ליצור.
יצירת מכונות וירטואליות והקצאת משקלים
יוצרים שלוש מכונות וירטואליות ומקצים להן משקלים:
- מגדירים שלוש מכונות VM בקצה העורפי כדי להחזיר את המשקלים בכותרת X-Load-Balancing-Endpoint-Weight עם תגובות HTTP. במדריך הזה, מגדירים שרת עורפי (backend instance) אחד לדיווח על משקל של אפס, שרת עורפי (backend instance) שני לדיווח על משקל של 100 ושרת עורפי (backend instance) שלישי לדיווח על משקל של 900. כדי ליצור את המכונות, מריצים את הפקודה
gcloud compute instances create:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \
--zone=us-central1-a \
--tags=network-lb-tag \
--image-family=debian-10 \
--image-project=debian-cloud \
--subnet=
SUBNET_NAME
\
--metadata=load-balancing-weight=900,startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
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
lb_weight="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
tee /etc/apache2/conf-enabled/headers.conf
systemctl restart apache2'
יצירת קבוצת מופעים
במדריך הזה, מספקים הוראות ליצירה של קבוצת מופעים לא מנוהלת שמכילה את כל שלושת מופעי מכונות ה-VM(instance-0, instance-100, and instance-900).
- כדי ליצור את קבוצת המכונות, מריצים את הפקודה
gcloud compute instance-groups unmanaged create:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
מחליפים את INSTANCE_GROUP בשם של קבוצת המכונות שרוצים ליצור.
יצירת בדיקת תקינות HTTP
במדריך הזה, אתם מספקים הוראות ליצירת בדיקת תקינות של HTTP כדי לקרוא את תגובת ה-HTTP שמכילה את המשקל של מכונת ה-VM של ה-Backend.
- כדי ליצור בדיקת תקינות של HTTP, מריצים את הפקודה
gcloud compute health-checks create:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
מחליפים את HTTP_HEALTH_CHECK_NAME בשם של בדיקת תקינות ה-HTTP שרוצים ליצור.
יצירת שירות לקצה העורפי
בדוגמה הבאה מוסבר איך ליצור שירות לקצה העורפי חיצוני אזורי שמוגדר לשימוש באיזון עומסים משוקלל.
- יוצרים שירות לקצה העורפי עם בדיקת תקינות HTTP ומגדירים את מדיניות איזון העומסים של המיקום ל-WEIGHTED_MAGLEV.
- כדי ליצור את שירות לקצה העורפי, מריצים את הפקודה
gcloud compute backend-services create:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
- מחליפים את
BACKEND_SERVICE_NAMEבשם של שירות לקצה העורפי שרוצים ליצור.
- מוסיפים את קבוצת המכונות לשירות הקצה העורפי.
- כדי להוסיף את קבוצת המכונות, מריצים את הפקודה
gcloud compute backend-services add-backend:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- שומרים כתובת IP חיצונית אזורית למאזן העומסים.
- כדי לשמור כתובת IP אחת או יותר, מריצים את הפקודה
gcloud compute addresses create:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
מחליפים את ADDRESS_NAME בשם של כתובת ה-IP שרוצים ליצור. משתמשים בפקודה compute addresses describe כדי לראות את התוצאה. שימו לב לכתובת ה-IP החיצונית הסטטית השמורה (IP_ADDRESS').
gcloud compute addresses describe ADDRESS_NAME
- יוצרים כלל העברה באמצעות כתובת ה-IP החיצונית האזורית השמורה 'IP_ADDRESS'. מקשרים את כלל ההעברה לשירות לקצה העורפי.
- כדי ליצור את כלל ההעברה, מריצים את הפקודה
gcloud compute forwarding-rules create:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- מחליפים את
FORWARDING_RULEבשם של כלל ההעברה שרוצים ליצור.IP_ADDRESS:כתובת ה-IP להקצאה למכונה. משתמשים בכתובת ה-IP החיצונית הסטטית השמורה, ולא בשם הכתובת.
אימות המשקלים של העורף באמצעות API של שירות לקצה העורפי
מוודאים שהמשקלים של ה-backend מדווחים בצורה תקינה לבדיקת תקינות ה-HTTP.
- כדי לקבל משקלים של קצה עורפי (יחד עם סטטוסים של תקינות) משירות קצה עורפי, מריצים את הפקודה
gcloud compute backend-services get-health:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
הפלט אמור להיראות כך:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name}
status:
healthStatus:
- forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
forwardingRuleIp: 34.135.46.66
healthState: HEALTHY
instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0
ipAddress: 10.10.0.5
port: 80
weight: '0'
- forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
forwardingRuleIp: 34.135.46.66
healthState: HEALTHY
instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100
ipAddress: 10.10.0.6
port: 80
weight: '100'
- forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
forwardingRuleIp: 34.135.46.66
healthState: HEALTHY
instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900
ipAddress: 10.10.0.7
port: 80
weight: '900'
kind: compute#backendServiceGroupHealth