1. מבוא
אפשר להגדיר מאזן עומסי רשת שיפזר את תעבורת הנתונים בין המופעים בקצה העורפי של מאזן העומסים על סמך המשקלים שדווחו על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
כדי לשמור על איזון עומסים משוקלל, צריך להגדיר את שני התנאים הבאים:
- צריך להגדיר את מדיניות מאזן העומסים ברשות מוניציפאלית (localityLbPolicy) של שירות הקצה העורפי כ-WEIGHTED_MAGLEV.
- צריך להגדיר את השירות לקצה העורפי עם בדיקת תקינות של HTTP/HTTP2/HTTPS. התגובות לבדיקת תקינות של HTTP חייבות להכיל שדה כותרת תגובת HTTP מותאם אישית X-Load-Balancing-Endpoint- מסומן, כדי לציין את המשקלים עם ערכי מספרים שלמים מ-0 עד 1,000 בייצוג עשרוני לכל מופע של הקצה העורפי.
אם אתם משתמשים באותה קבוצת מכונות בתור קצה עורפי במספר מאזני עומסים ברשת מבוססי שירות לקצה העורפי שמשתמשים באיזון עומסים משוקלל, מומלץ להשתמש בנתיב בקשה ייחודי לכל בדיקת תקינות של השירות לקצה העורפי. מידע נוסף זמין במאמר קריטריונים להצלחה בבדיקות תקינות של HTTP, HTTPS ו-HTTP/2.
בדיקת התקינות של HTTP אמורה להחזיר תגובת HTTP 200 (OK) כדי לעבור את בדיקות התקינות, והמכונה של הקצה העורפי נחשבת תקינה. במצבים שבהם כל המופעים של הקצה העורפי עוברים את בדיקות התקינות שלהם ומחזירים את X-Load-Balancing-Endpoint-weight במשקל אפס, מאזן העומסים מחלק חיבורים חדשים בין הקצוות העורפיים הבריאים ומטפל בהם במשקל שווה. מאזן העומסים יכול גם להפיץ חיבורים חדשים בין קצוות עורפיים לא תקינים. מידע נוסף מופיע במאמר התפלגות תנועה.
לדוגמאות של איזון עומסים משוקלל, ראו בחירת קצה עורפי ומעקב חיבורים.
אפשר להשתמש באיזון עומסים משוקלל בתרחישים הבאים:
- אם חיבורים מסוימים מעבדים יותר נתונים מאחרים, או אם חיבורים מסוימים פעילים יותר מאחרים, התפלגות העומסים בקצה העורפי עשויה להיות לא שווה. סימון של משקל נמוך יותר לכל מכונה מאפשר למכונה עם עומס גבוה לצמצם את החלק שלה בחיבורים חדשים, ובמקביל להמשיך לספק שירות לחיבורים קיימים.
- אם קצה עורפי עמוס מדי והקצאת חיבורים נוספים עלולה לנתק חיבורים קיימים, קצוות עורפיים כאלה מקצה משקל לעצמו. כשמסמנים אפס משקל, מכונה של קצה עורפי מפסיקה לספק שירות לחיבורים חדשים, אבל ממשיכה לספק שירות לחיבורים קיימים.
- אם קצה עורפי מרוקן את החיבורים הקיימים לפני התחזוקה, הוא מקצה לעצמו אפס משקל. כשמסמנים אפס משקל, המכונה העורפית מפסיקה לספק שירות לחיבורים חדשים, אבל ממשיכה לספק שירות לחיבורים קיימים.
מה תלמדו
- איך להגדיר מאזן עומסים ברשת כך שיחלק את תעבורת הנתונים בין המופעים בקצה העורפי של מאזן העומסים על סמך המשקלים שדווחו על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט. - לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
במסוף 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 כדי לבצע אימות.
- מפעילים את Compute API.
gcloud services enable compute.googleapis.com
הערה: אי אפשר להשתמש במסוף Google Cloud כדי להגדיר את המדיניות של מאזן העומסים ברשות מוניציפאלית ולהקצות משקולות למכונות וירטואליות. במקום זאת, צריך להשתמש ב-Google Cloud CLI.
יצירת כללי רשת VPC, רשתות משנה וכללי חומת אש
יצירת רשת VPC, רשת משנה ותעבורת נתונים נכנסת (ingress) מאפשרות כללי חומת אש כדי לאפשר חיבורים למכונות הווירטואליות בקצה העורפי של מאזן העומסים.
- יצירת רשת 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 של היעד למכונות הווירטואליות בקצה העורפי. בדוגמה הזו, כלל חומת האש מאפשר חיבורים מכל כתובת 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
בשם של כלל חומת האש שרוצים ליצור.
יצירת מכונות וירטואליות והקצאת משקולות
יצירת שלוש מכונות וירטואליות והקצאת משקלים:
- מגדירים שלוש מכונות וירטואליות בקצה העורפי כדי להחזיר את המשקולות בכותרת X-Load-Balancing-Endpoint-weight עם תגובות HTTP. במדריך הזה תגדירו מופע של קצה עורפי שידווח על משקל אפס, שמופע קצה עורפי אחר ידווח על משקל 100 ומופע קצה עורפי שלישי שידווח על משקל 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'
יצירה של קבוצת מופעי מכונה
במדריך הזה נסביר איך ליצור קבוצת מכונות לא מנוהלות שמכילות את כל שלוש המכונות הווירטואליות(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 שמכילה את משקל המכונה הווירטואלית בקצה העורפי.
- כדי ליצור את בדיקת התקינות של 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 של שירות לקצה העורפי
מוודאים שהמשקולות של הקצה העורפי מדווחות בצורה תקינה לבדיקת התקינות של 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