בדף הזה יש שתי דוגמאות ל-Application Load Balancer קלאסי:
כדי להגדיר ניהול תעבורה עבור מאזן עומסים גלובלי חיצוני של אפליקציות (ALB) ומאזן עומסים חיצוני של אפליקציות (ALB) ברמה האזורית, אפשר לעיין בדפים הבאים:
- הגדרה של ניהול תעבורה במאזן עומסים גלובלי חיצוני של אפליקציות (ALB)
- הגדרת ניהול תעבורה למאזן עומסים חיצוני אזורי של אפליקציות (ALB)
לפני שמתחילים
הגדרה של ניתוב שמבוסס על פרמטרים של שאילתה
בדוגמה הזו מוצג שימוש בפרמטרים של שאילתה כדי לבצע בדיקות A/B על ידי התאמה למחרוזת השאילתה.
הוספה של שתי קבוצות של שרתים עורפיים
כדי שהניתוב יהיה שימושי, צריך להגדיר כמה בק-אנדים.
כדי להגדיר שני קצוות עורפיים, מכונות ה-VM צריכות להיות בשתי קבוצות של מכונות. במדריך הזה מוסבר איך ליצור קבוצות של מכונות וירטואליות מנוהלות עם מכונות וירטואליות של Linux שמופעל בהן Apache, ואז להגדיר איזון עומסים.
קבוצות המופעים המנוהלות מספקות מכונות וירטואליות שמריצות את שרתי הבק-אנד של מאזן עומסים חיצוני מסוג HTTP. למטרות הדגמה, שרתי קצה עורפיים מציגים את שמות המארחים שלהם.
לצורך פשטות, שרתי הבק-אנד נמצאים באותו אזור. אם רוצים להגדיר מספר אזורים, צריך להגדיר תבנית של הגדרות מכונה עבור האזור השני.
המסוף
יוצרים תבנית של הגדרות מכונה. נכנסים לדף Instance templates במסוף Google Cloud .
- לוחצים על Create instance template.
- בשדה Name (שם), מזינים
lb-backend-template. - מוודאים שדיסק האתחול מוגדר לקובץ אימג' של Debian, כמו Debian GNU/Linux 12 (bookworm). בהוראות האלה נעשה שימוש בפקודות שזמינות רק ב-Debian, כמו
apt-get. - לוחצים על אפשרויות מתקדמות.
- לוחצים על Networking ומגדירים את השדה הבא:
- בשדה Network tags (תגי רשת), מזינים
allow-health-check.
- בשדה Network tags (תגי רשת), מזינים
לוחצים על ניהול. מזינים את הסקריפט הבא בשדה סקריפט לטעינה בזמן ההפעלה.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
לוחצים על יצירה.
יוצרים קבוצה של מופעי מכונה מנוהלים. נכנסים לדף Instance groups במסוף Google Cloud .
- לוחצים על יצירת קבוצת מופעים.
- בוחרים באפשרות New managed instance group (stateless) (קבוצת מופעי מכונה מנוהלים חדשה (בלי שמירת מצב)). מידע נוסף מופיע במאמר קבוצות של מכונות וירטואליות בלי שמירת מצב או עם שמירת מצב.
- בשדה Name (שם), מזינים
first-example-ig. - בקטע מיקום, בוחרים באפשרות אזור אחד.
- בקטע Region (אזור), בוחרים את האזור המועדף. בדוגמה הזו נעשה שימוש ב-
us-east1. - בשדה Zone, בוחרים באפשרות
us-east1-b. - בקטע Instance template, בוחרים את תבנית המכונה
lb-backend-template. - בקטע מספר מקסימלי של מופעים, מזינים
2. - בקטע מצב שינוי גודל אוטומטי, בוחרים באפשרות
Off:do not autoscale. - לוחצים על יצירה.
יוצרים עוד קבוצה של מופעי מכונה מנוהלים כמו זו. נותנים שם למינוי השני, second-example-ig, ויוצרים אותו על סמך תבנית lb-backend-template.
gcloud
יוצרים תבנית של הגדרות מכונה.
gcloud compute instance-templates create lb-backend-template \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-12 \ --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://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'יוצרים את קבוצת מופעי המכונה המנוהלים הראשונה על סמך התבנית.
gcloud compute instance-groups managed create first-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-b
יוצרים את קבוצת מופעי המכונה המנוהלים השנייה על סמך התבנית.
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
הגדרת כלל לחומת אש
בדוגמה הזו, יוצרים את כלל חומת האש fw-allow-health-check.
זהו כלל תעבורה נכנסת (ingress) שמאפשר תעבורה מGoogle Cloud מערכות בדיקת התקינות. בדוגמה הזו נעשה שימוש בתג היעד allow-health-check כדי לזהות את המכונות הווירטואליות.
המסוף
- נכנסים לדף Firewall policies במסוף Google Cloud .
למעבר אל Firewall policies - לוחצים על יצירת כלל לחומת האש כדי ליצור את הכלל השני לחומת האש:
- מזינים שם של
fw-allow-health-check. - בקטע רשת, בוחרים באפשרות
Default. - בקטע יעדים, בוחרים באפשרות תגי יעד ספציפיים.
- בשדה Target tags (תגי יעד) כותבים
allow-health-check. - מגדירים את Source filter בתור IPv4 ranges.
- מגדירים את Source IPv4 ranges (טווחי IPv4 של המקור) לערך
35.191.0.0/16. - בקטע Protocols and ports (פרוטוקולים ויציאות), בוחרים באפשרות Specified protocols and ports (פרוטוקולים ויציאות שצוינו).
- מסמנים את תיבת הסימון TCP ומזינים
80כמספרי היציאות. - לוחצים על יצירה.
gcloud
gcloud compute firewall-rules create fw-allow-health-check \
--network=default \
--action=allow \
--direction=ingress \
--source-ranges=35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp
שמירת כתובת IP חיצונית
עכשיו, כשהמופעים פועלים, צריך להגדיר כתובת IP חיצונית סטטית גלובלית שהלקוחות משתמשים בה כדי להגיע למאזן העומסים.
המסוף
נכנסים לדף IP addresses במסוף Google Cloud .
לוחצים על הזמנה חיצונית.
בדף Reserve external static IP address, בשדה Name, מזינים
lb-ipv4-1.מגדירים את מסלול שירות הרשת בתור Premium.
מגדירים את IP version ל-IPv4.
מגדירים את Type (סוג) לערך Global (גלובלי).
לוחצים על Reserve.
gcloud
gcloud compute addresses create lb-ipv4-1 \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global
שימו לב לכתובת ה-IPv4 שהוקצתה:
gcloud compute addresses describe lb-ipv4-1 \
--format="get(address)" \
--global
הגדרת הקצה העורפי של מאזן העומסים
המסוף
בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת ומבוסס-פרמטרים. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.
gcloud
- יוצרים בדיקת תקינות.
gcloud compute health-checks create http http-basic-check \ --port 80 - יוצרים את שירות הקצה העורפי הראשון.
-
במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם
load-balancing-scheme=EXTERNAL_MANAGED. ההגדרה הזו מציעה יכולת מתקדמת לניהול תעבורת נתונים. - במאזן עומסים קלאסי של אפליקציות (ALB), משתמשים ב-
load-balancing-scheme=EXTERNAL.
gcloud compute backend-services create service-a \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global -
במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם
- יוצרים את השירות השני לקצה העורפי.
gcloud compute backend-services create service-b \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global - מוסיפים את קבוצת המופעים הראשונה כקצה העורפי לשירות הקצה העורפי הראשון.
gcloud compute backend-services add-backend service-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=first-example-ig \ --instance-group-zone=us-east1-b \ --global - מוסיפים את קבוצת המכונות השנייה בתור הקצה העורפי לשירות השני לקצה העורפי.
gcloud compute backend-services add-backend service-b \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=second-example-ig \ --instance-group-zone=us-east1-c \ --global
יצירת מפת URL
המסוף
בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת ומבוסס-פרמטרים. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.
gcloud
יוצרים קובץ YAML
/tmp/web-map-http.yaml. מחליפים אתPROJECT_IDבמזהה הפרויקט.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a hostRules: - hosts: - '*' pathMatcher: path-matcher-1 name: web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http tests: - description: Test routing for query ABTest with A host: example.com path: /?ABTest=A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: http://example.com/?ABTest=A - description: Test routing for query ABTest with B host: example.com path: /?ABTest=B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b expectedOutputUrl: http://example.com/?ABTest=Bמאמתים את מפת ה-URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
אם הבדיקות עוברות והפקודה מוציאה הודעת הצלחה, שומרים את השינויים במפת ה-URL.
מעדכנים את מפת ה-URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
יצירת שרת proxy לחלוקת העומס וכלל העברה
המסוף
בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת וניתוב מבוסס-פרמטר. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.
gcloud
- יוצרים שרת proxy של HTTP ליעד כדי לנתב בקשות למפת כתובות ה-URL.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http - יוצרים כלל העברה גלובלי כדי לנתב בקשות נכנסות לשרת ה-proxy.
-
במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם
load-balancing-scheme=EXTERNAL_MANAGED. ההגדרה הזו מציעה יכולת מתקדמת לניהול תעבורת נתונים. - במאזן עומסים קלאסי של אפליקציות (ALB), משתמשים ב-
load-balancing-scheme=EXTERNAL.
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80 -
במאזן עומסים גלובלי חיצוני של אפליקציות, משתמשים בפקודת gcloud CLI עם
בדיקה
שימו לב לכתובת ה-IPv4 שהוקצתה:
gcloud compute addresses describe lb-ipv4-1 \
--format="get(address)" \
--global
מריצים את הפקודה הבאה כדי לבדוק את ההגדרה:
curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B
פותחים בדפדפן את http://IP_ADDRESS?ABTest=A ואת http://IP_ADDRESS?ABTest=B.
הגדרה של ניתוב שמבוסס על כותרת HTTP
בדוגמה הזו אפשר לראות איך מוסיפים ומסירים כותרות HTTP כדי לבצע ניתוב חכם.
לפני שמתחילים
אפשר להשתמש במאזן עומסים חיצוני של אפליקציות (ALB) קיים או ליצור חדש.
אפשר להשתמש בתכונה הזו עם כל סוגי ה-Backend הנתמכים. בדוגמה הזו אנחנו מניחים שאתם משתמשים במכונות וירטואליות בקבוצת מופעים.
כדי להגדיר מאזן עומסים פשוט, אפשר לעיין בדוגמה שלמעלה שמבוססת על פרמטר של שאילתה.
עדכון מפת URL
המסוף
בשלב הזה, אי אפשר להשתמש במסוף Google Cloud כדי להגדיר ניתוב מבוסס-כותרת ומבוסס-פרמטרים. במקום זאת, אפשר להשתמש ב-gcloud או ב-API.
gcloud
בדוגמה הזו מוצג שימוש בכותרות של בקשות HTTP כדי לבצע בדיקות A/B על ידי התאמה לערכים בכותרות ה-HTTP של הבקשה.
יוצרים קובץ YAML
/tmp/web-map-http.yaml. מחליפים אתPROJECT_IDבמזהה הפרויקט.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a kind: compute#urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: path-matcher-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b tests: - description: Test routing for query ABTest with A host: example.com path: / headers: - name: ABTest value: A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - description: Test routing for query ABTest with B host: example.com path: / headers: - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-bמאמתים את מפת ה-URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
אם הבדיקות עוברות והפקודה מוציאה הודעת הצלחה, שומרים את השינויים במפת ה-URL.
מעדכנים את מפת ה-URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
בדיקה
כדי לבדוק את ההגדרה הזו, מריצים את הפקודה הבאה באמצעות כתובת ה-IPv4 של מאזן העומסים המשויך:
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"