1. מבוא
אתם יכולים להגדיר מאזן עומסים ברשת כדי להפיץ את התנועה בין מופעי ה-Backend של מאזן העומסים על סמך המשקלים שמדווחים על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
כדי להשתמש באיזון עומסים משוקלל, צריך להגדיר את שני הדברים הבאים:
- צריך להגדיר את מדיניות איזון העומסים לפי אזור (localityLbPolicy) של שירות ה-Backend ל-WEIGHTED_MAGLEV.
- צריך להגדיר את שירות ה-Backend באמצעות בדיקת תקינות של HTTP/HTTP2/HTTPS. התגובות של בדיקת תקינות HTTP צריכות להכיל שדה כותרת מותאם אישית של תגובת HTTP X-Load-Balancing-Endpoint-Weight כדי לציין את המשקלים עם ערכים שלמים מ-0 עד 1,000 בייצוג עשרוני לכל מופע של קצה עורפי.
אם אתם משתמשים באותה קבוצת מכונות כקצה עורפי לכמה מאזני עומסים ברשת שמבוססים על שירות לקצה העורפי, באמצעות איזון עומסים משוקלל, מומלץ להשתמש בנתיב בקשה ייחודי לכל בדיקת תקינות של השירות לקצה העורפי. מידע נוסף זמין במאמר בנושא קריטריונים להצלחה של בדיקות תקינות של HTTP, HTTPS ו-HTTP/2.
בדיקת תקינות של HTTP צריכה להחזיר תגובה מסוג HTTP 200 (OK) כדי שהבדיקות יעברו והמופע של ה-Backend ייחשב כתקין. במצבים שבהם כל מופעי ה-backend עוברים את בדיקות התקינות ומחזירים X-Load-Balancing-Endpoint-Weight עם משקל אפס, מאזן העומסים מחלק את החיבורים החדשים בין ה-backend התקינים, ומתייחס אליהם עם משקל שווה. מאזן העומסים יכול גם לחלק חיבורים חדשים בין שרתי קצה עורפיים לא תקינים. מידע נוסף זמין במאמר בנושא חלוקת התנועה.
דוגמאות לאיזון עומסים משוקלל מופיעות במאמר בחירת קצה עורפי ומעקב אחר חיבורים.
אפשר להשתמש באיזון עומסים משוקלל בתרחישים הבאים:
- אם חלק מהחיבורים מעבדים יותר נתונים מאחרים, או שחלק מהחיבורים פעילים יותר זמן מאחרים, יכול להיות שחלוקת העומס בשרת העורפי לא תהיה אחידה. אם מציינים משקל נמוך יותר לכל מכונה, מכונה עם עומס גבוה יכולה לצמצם את החלק שלה בחיבורים חדשים, תוך המשך טיפול בחיבורים קיימים.
- אם עומס היתר על שרת קצה עורפי גבוה מדי, והקצאה של חיבורים נוספים עלולה לשבש את החיבורים הקיימים, שרת הקצה העורפי מקצה לעצמו משקל אפס. כשמציינים משקל אפס, מופסק הטיפול בבקשות לחיבורים חדשים במופע של השרת העורפי, אבל הוא ממשיך לטפל בחיבורים קיימים.
- אם ה-Backend מנתק את החיבורים הקיימים לפני תחזוקה, הוא מקצה לעצמו משקל אפס. האות של משקל אפס גורם למופע העורפי להפסיק לטפל בחיבורים חדשים, אבל הוא ממשיך לטפל בחיבורים קיימים.
מה תלמדו
- איך מגדירים מאזן עומסים ברשת כדי להפיץ את התנועה בין מופעי ה-Backend של מאזן העומסים על סמך המשקלים שמדווחים על ידי בדיקת תקינות של HTTP באמצעות איזון עומסים משוקלל.
הגדרת סביבה בקצב אישי
- נכנסים ל-Google Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או חשבון Google Workspace, אתם צריכים ליצור חשבון.
- שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך להתייחס אליה. ברוב ה-codelab, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-
PROJECT_ID
). אם לא אהבתם את המזהה שנוצר, תוכלו ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש אחר ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך כל הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תהיה עלות בכלל. כדי להשבית את המשאבים ולא לחייב אתכם אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
הפעלת Cloud Shell
אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.
ב-Google Cloud Console, לוחצים על סמל 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. במדריך הזה, מגדירים מופע אחד של קצה עורפי לדיווח על משקל של אפס, מופע שני של קצה עורפי לדיווח על משקל של 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 שמכילה את המשקל של מכונת ה-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.
- כדי ליצור את שירות ה-Backend, מריצים את הפקודה
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
בשם של שירות ה-Backend שרוצים ליצור.
- מוסיפים את קבוצת המכונות לשירות הקצה העורפי.
- כדי להוסיף את קבוצת המכונות, מריצים את הפקודה
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