Simule uma interrupção de zona para um MIG regional


Para testar se seu grupo de instâncias gerenciadas (MIG) regional está superprovisionado o suficiente e pode sobreviver a uma interrupção de zona, você pode usar o exemplo a seguir para simular uma falha zonal.

Antes de começar

  • Se quiser usar os exemplos de linha de comando neste guia, instale a CLI do Google Cloud .
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

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

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Use um script para simular uma interrupção de zona

Este script para e inicia o Apache como cenário padrão. Se isso não se aplicar ao seu aplicativo, substitua os comandos que param e iniciam o Apache pelo seu próprio cenário de falha e recuperação.

  1. Implante e execute esse script continuamente em cada VM do grupo. Você pode fazer isso adicionando o script ao modelo de instância ou incluindo o script em uma imagem personalizada e usando a imagem no modelo de instância.

    #!/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. Simule uma falha de zona definindo estes dois campos de metadados do projeto:

    • failed_zone : Define a zona onde deseja simular a interrupção (limitar a falha a apenas uma zona).
    • failed_instance_names : Escolha as VMs para colocar offline por nome (para limitar a falha apenas aos nomes de VM que contêm esta string).

    Você pode definir esses metadados usando a CLI gcloud. Por exemplo, o comando a seguir define a interrupção da zona para a zona europe-west1-b e afeta VMs que têm nomes começando com base-instance-name :

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. Depois de simular a interrupção, recupere-se da falha removendo as chaves de metadados:

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

Aqui estão algumas ideias para cenários de falha que você pode executar usando este script:

  • Pare completamente a sua aplicação para ver como o MIG responde.
  • Faça com que suas VMs retornem como "não íntegras" nas verificações de integridade do balanceamento de carga.
  • Modifique o iptables para bloquear parte do tráfego de e para a VM.
  • Desligue as VMs. Por padrão, ele será recriado pelo MIG regional logo depois, mas a nova encarnação será encerrada imediatamente assim que o script for executado e desde que os valores de metadados sejam definidos. Isso resultará em um loop de travamento.

O que vem a seguir