Simula una interrupción de zona para un MIG regional

Para probar que tu grupo de instancias administrado (MIG) regional esté aprovisionado en exceso de manera suficiente y pueda sobrevivir a una interrupción de zona, puedes usar el siguiente ejemplo con el objetivo de simular una falla zonal.

Antes de comenzar

  • Si deseas usar los ejemplos de la línea de comandos de esta guía, instala Google Cloud CLI.
  • Si aún no lo hiciste, configura la autenticación. La autenticación verifica tu identidad para acceder a los servicios y las APIs de Cloud de Confiance by S3NS . Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    gcloud

    1. Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada. Después de acceder, inicializa Google Cloud CLI con el siguiente comando:

      gcloud init
  • Configura una región y una zona predeterminadas.
  • REST

    Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.

      Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Cloud de Confiance .

Usa una secuencia de comandos para simular una interrupción zonal

Esta secuencia de comandos detiene e inicia Apache como el escenario predeterminado. Si esto no se aplica a tu aplicación, reemplaza los comandos que detienen y, luego, inician Apache con tu propia situación de falla y recuperación.

  1. Implementa y ejecuta esta secuencia de comandos de forma continua en cada VM del grupo. Puedes hacer esto mediante la adición de la secuencia de comandos a la plantilla de instancias, o bien a través de la inclusión de una imagen personalizada y su uso en la plantilla de instancias.

    #!/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 una falla de zona mediante la configuración de los siguientes dos campos de metadatos del proyecto:

    • failed_zone: Establece la zona en la que deseas simular la interrupción (limita la falla a una sola zona).
    • failed_instance_names: Elige las VM que se dejarán sin conexión por nombre (para limitar la falla solo a los nombres de VM que contengan esta string).

    Puedes configurar estos metadatos con gcloud CLI. Por ejemplo, con el siguiente comando, se establece la interrupción de la zona europe-west1-b y se ven afectadas las VM cuyos nombres comienzan con base-instance-name:

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Una vez que hayas terminado de simular la interrupción, recupérate de la falla mediante la eliminación de las siguientes claves de metadatos:

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

Aquí hay algunas ideas para situaciones de falla que puedes ejecutar con esta secuencia de comandos:

  • Detén tu aplicación por completo para ver cómo responde el MIG.
  • Haz que tus VM se muestren como “en mal estado” en las verificaciones de estado de balanceo de cargas.
  • Modifica iptables para bloquear parte del tráfico hacia y desde la VM.
  • Apaga las VM. De forma predeterminada, el MIG regional lo volverá a crear poco después, pero la nueva encarnación se cerrará de inmediato en cuanto se ejecute la secuencia de comandos y siempre que se establezcan los valores de metadatos. Esto dará como resultado un bucle de fallas.

¿Qué sigue?