הגדרת איזון עומסים משוקלל

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

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

לפני שמתחילים

יצירת רשת VPC, רשתות משנה וכללי חומת אש

יוצרים רשת VPC, תת-רשת וכללי חומת אש שמאפשרים תעבורת נתונים נכנסת (ingress) כדי לאפשר חיבורים למכונות הווירטואליות של ה-Backend של מאזן העומסים.

  1. יוצרים רשת 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: השם של רשת המשנה שרוצים ליצור.
  2. יוצרים כלל חומת אש שמאפשר תעבורת נתונים נכנסת (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 בשם של כלל חומת האש שרוצים ליצור.

יצירת מכונות וירטואליות והקצאת משקלים

יוצרים שלוש מכונות וירטואליות ומקצים להן משקלים:

  1. מגדירים שלוש מכונות וירטואליות (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-12 \
      --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-12 \
      --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-12 \
      --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 ו-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 שרוצים ליצור.

יצירת שירות לקצה העורפי

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

  1. יוצרים שירות לקצה העורפי עם בדיקת תקינות של 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 בשם של שירות לקצה העורפי שרוצים ליצור.

  2. מוסיפים את קבוצת המכונות לשירות הקצה העורפי.

    • כדי להוסיף את קבוצת המכונות, מריצים את הפקודה 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
      
  3. שומרים כתובת 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
      
  4. יוצרים כלל העברה באמצעות כתובת ה-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 BACKEND_SERVICE_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