Simula un'interruzione di una zona per un gruppo di istanze gestite a livello di regione


Per verificare che il tuo gruppo di istanze gestite regionale sia sovradimensionato e possa sopravvivere a un'interruzione della zona, puoi utilizzare il seguente esempio per simulare un errore zonale.

Prima di iniziare

  • Per utilizzare gli esempi delle righe di comando presenti in questa guida, installa Google Cloud CLI.
  • Se non l'hai già fatto, configura l'autenticazione. Autenticazione è Il processo di verifica dell'identità per l'accesso ai servizi e alle API di Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi eseguire l'autenticazione Compute Engine come segue.

    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

      Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

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

        gcloud init

      Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Utilizzare uno script per simulare un'interruzione del servizio in una zona

Questo script arresta e avvia Apache come scenario predefinito. Se non si applica alla tua applicazione, sostituisci i comandi che arresta e avvia Apache con il tuo scenario di errore e ripristino.

  1. Esegui il deployment e l'esecuzione di questo script in modo continuo in ogni VM del gruppo. Cosa puoi fare aggiungendo lo script al o includendo lo script in un modello immagine personalizzata e utilizzando l'immagine nel modello di istanza.

    #!/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. Simula un errore di zona impostando questi due campi di metadati di progetto:

    • failed_zone: imposta la zona in cui vuoi simulare l'interruzione (limita l'errore a una sola zona).
    • failed_instance_names: scegli per nome le VM da mettere offline (per limitare l'errore solo ai nomi di VM contenenti questa stringa).

    Puoi impostare questi metadati utilizzando gcloud CLI. Ad esempio, il seguente comando imposta l'interruzione della zona sulla zona europe-west1-b e interessa le VM i cui nomi iniziano con base-instance-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Dopo aver simulato l'interruzione del servizio, recupera dall'errore rimuovendo le chiavi dei metadati:

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

Ecco alcune idee per scenari di errore che puoi eseguire utilizzando questo script:

  • Interrompi completamente l'applicazione per vedere come risponde il MIG.
  • Rendi le tue VM in stato "non integro" sui controlli di integrità del bilanciamento del carico.
  • Modifica iptables per bloccare parte del traffico verso e dalla VM.
  • Arresta le VM. Per impostazione predefinita, verrà ricreato dal MIG regionale poco dopo, ma la nuova incarnazione si arresterà immediatamente non appena verrà eseguito lo script e a condizione che i valori dei metadati siano impostati. Ciò comporterà un loop di arresto anomalo.

Passaggi successivi