הדמיה של הפסקת חשמל באזור עבור MIG אזורי

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

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

  • כדי להשתמש בדוגמאות של שורת הפקודה במדריך הזה, צריך להתקין את Google Cloud CLI.
  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:

    צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

    gcloud

    1. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  • הגדרת אזור ותחום כברירת מחדל.
  • REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

שימוש בסקריפט כדי לדמות הפסקה זמנית בשירות באזור מסוים

הסקריפט הזה עוצר ומפעיל את Apache כתרחיש ברירת המחדל. אם זה לא רלוונטי לאפליקציה שלכם, החליפו את הפקודות שעוצרות ומפעילות את Apache בתרחיש משלכם של כשל והתאוששות.

  1. פורסים ומריצים את הסקריפט הזה באופן רציף בכל מכונה וירטואלית בקבוצה. כדי לעשות את זה, מוסיפים את הסקריפט לתבנית של הגדרות המכונה או כוללים את הסקריפט בתמונה בהתאמה אישית ומשתמשים בתמונה בתבנית של הגדרות המכונה.

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. כדי לדמות כשל באזור, מגדירים את שני שדות המטא-נתונים הבאים של הפרויקט:

    • ‫failed_zone: מגדיר את האזור שבו רוצים לדמות את ההפסקה (הגבלת הכשל לאזור אחד בלבד).
    • ‫failed_instance_names: בחירת המכונות הווירטואליות שיועברו למצב אופליין לפי שם (כדי להגביל את הכשל רק למכונות וירטואליות שהשם שלהן מכיל את המחרוזת הזו).

    אפשר להגדיר את המטא-נתונים האלה באמצעות ה-CLI של gcloud. לדוגמה, הפקודה הבאה מגדירה את ההפסקה באזור europe-west1-b ומשפיעה על מכונות וירטואליות שהשמות שלהן מתחילים ב-base-instance-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. אחרי שמסיימים לדמות את ההפסקה, מסירים את מפתחות המטא-נתונים כדי להתאושש מהכשל:

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names

הנה כמה רעיונות לתרחישי כשל שאפשר להריץ באמצעות הסקריפט הזה:

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

המאמרים הבאים