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 es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar un código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

    REST

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

      Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init

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 mediante la CLI de gcloud. 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?