Menyimulasikan pemadaman layanan zona untuk MIG regional


Untuk menguji apakah grup instance terkelola regional (MIG) Anda disediakan berlebihan dan dapat bertahan dari pemadaman layanan zona, Anda dapat menggunakan contoh berikut untuk menyimulasikan kegagalan zona.

Sebelum memulai

  • Jika Anda ingin menggunakan contoh command line dalam panduan ini, instal Google Cloud CLI.
  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Menggunakan skrip untuk menyimulasikan pemadaman layanan zona

Skrip ini akan menghentikan dan memulai Apache sebagai skenario default. Jika hal ini tidak berlaku untuk aplikasi Anda, ganti perintah yang menghentikan dan memulai Apache dengan skenario kegagalan dan pemulihan Anda sendiri.

  1. Deploy dan jalankan skrip ini secara terus-menerus di setiap VM dalam grup. Anda dapat melakukannya dengan menambahkan skrip ke template instance atau dengan menyertakan skrip dalam image kustom dan menggunakan gambar di template instance.

    #!/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. Simulasikan kegagalan zona dengan menetapkan dua kolom metadata project ini:

    • failed_zone: Menetapkan zona tempat Anda ingin melakukan simulasi pemadaman (membatasi kegagalan hanya pada satu zona).
    • failed_instance_names: Pilih VM yang akan dibuat offline berdasarkan nama (untuk membatasi kegagalan hanya pada nama VM yang berisi string ini).

    Anda dapat menetapkan metadata ini menggunakan gcloud CLI. Misalnya, perintah berikut menetapkan pemadaman layanan zona ke zona europe-west1-b dan memengaruhi VM yang memiliki nama yang diawali dengan base-instance-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Setelah selesai menyimulasikan pemadaman layanan, pulihkan dari kegagalan dengan menghapus kunci metadata:

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

Berikut adalah beberapa ide untuk skenario kegagalan yang dapat Anda jalankan menggunakan skrip ini:

  • Hentikan aplikasi Anda sepenuhnya untuk melihat bagaimana MIG merespons.
  • Buat VM Anda menampilkan "tidak responsif" pada health check load balancing.
  • Modifikasi iptable untuk memblokir sebagian traffic ke dan dari VM.
  • Matikan VM. Secara default, skrip akan dibuat ulang oleh MIG regional segera setelahnya, tetapi inkarnasi baru akan segera dihentikan sendiri segera setelah skrip berjalan dan selama nilai metadata ditetapkan. Hal ini akan menghasilkan loop error.

Langkah berikutnya