Como criar e gerenciar MIGs regionais

Neste documento, descrevemos os procedimentos específicos para criar e gerenciar grupos de instâncias gerenciadas regionais (MIGs regionais). Para informações gerais sobre a criação de MIGs, consulte Como criar grupos de instâncias gerenciadas.

Um MIG regional distribui as instâncias em várias zonas em uma região, o que aumenta a resiliência das cargas de trabalho baseadas em MIG. O uso de várias zonas protege você contra casos extremos em que todas as instâncias de uma única zona falham.

Para mais informações sobre MIGs regionais, incluindo por que escolhê-los, as opções de configuração adicionais e como eles são diferentes dos MIGs zonais, consulte a Visão geral do MIG regional.

Antes de começar

Limitações

  • Com um MIG regional, é possível criar até 2.000 VMs em uma região, com um máximo de 1.000 VMs por zona. Com um MIG zonal, é possível criar até 1.000 VMs. Se precisar de mais, entre em contato com o suporte.
  • Ao atualizar um MIG, é possível especificar até 1.000 VMs em uma única solicitação.
  • Para um MIG com estado, analise as limitações desse tipo de MIG.

  • Para usar o balanceamento de carga com um MIG regional, as seguintes limitações se aplicam:

    • Não é possível usar o modo de balanceamento maxRate.
    • Se você usa um esquema de balanceamento de carga HTTP(S) com um MIG regional, é necessário escolher o modo de balanceamento maxRatePerInstance ou maxUtilization.
  • Para escalonar automaticamente um MIG regional, as seguintes limitações se aplicam:

    • Para aumentar e reduzir o escalonamento horizontal, é preciso ativar a redistribuição proativa de instâncias. Se você definir o modo do escalonador automático apenas para escalonamento horizontal, não será necessário ativar a distribuição proativa de instâncias.
    • Para fazer escalonamento automático de um MIG regional com base nas métricas do Cloud Monitoring, as seguintes limitações se aplicarão:

      • Não é possível usar métricas por grupo.
      • Não é possível aplicar filtros a métricas por instância.

Como criar um MIG regional

Use o Console do Cloud, a ferramenta gcloud ou a API Compute Engine.

Se não houver capacidade suficiente em cada zona para aceitar as VMs do grupo, o Compute Engine criará o máximo de VMs possível e continuará a criar as outras restantes quando houver capacidade extra disponível.

Como você está criando um MIG regional, lembre-se de que determinados recursos são zonais, como discos permanentes. Se você estiver especificando recursos por zona no modelo de instância, como discos permanentes extras, o disco precisará estar presente em todas as zonas para que possa ser anexado às VMs criadas por esse MIG regional.

Por padrão, se você não especificar explicitamente zonas individuais na solicitação, o Compute Engine escolherá automaticamente três zonas para criar VMs. Se precisar criar VMs em mais de ou menos de três zonas ou se quiser escolher quais zonas serão usadas, forneça uma lista de zonas em sua solicitação. Para mais informações, consulte Seleção de zona.

Por padrão, a redistribuição proativa de instâncias está ativada. Se você precisar gerenciar manualmente o número de VMs em cada zona, desative a redistribuição proativa de instâncias e não configure o escalonamento automático.

Console

  1. No Console do Cloud, acesse a página Grupos de instâncias.

    Acessar a página "Grupos de instâncias"

  2. Clique em Criar grupo de instâncias para criar um novo grupo.
  3. Em Localização, selecione Várias zonas.
  4. Escolha a região desejada.
  5. Se você quiser escolher zonas específicas, clique em Configurar zonas para selecionar quais usar.
  6. Se você quiser desativar a redistribuição proativa de instâncias, siga estas etapas:
    1. Verifique se o Modo de escalonamento automático está definido como Desativado.
    2. Defina a Redistribuição da instância como Desativado.
  7. Selecione um modelo de instância para o grupo ou crie um modelo novo.
  8. Especifique o número de VMs para este grupo. Lembre-se de provisionar VMs suficientes para dar suporte ao aplicativo se ocorrer uma falha de zona.
  9. Continue com o restante do processo de criação do MIG.

gcloud

Todos os MIGs exigem um modelo de instância. Caso ainda não tenha um, crie um modelo de instância. Por exemplo, o comando a seguir cria um modelo básico de instância com propriedades padrão:

gcloud compute instance-templates create example-template

Em seguida, use o comando instance-groups managed create com a sinalização --region. Por exemplo, o comando a seguir cria um MIG regional em três zonas dentro da região us-east1:

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

Para selecionar zonas específicas que o grupo usará, especifique a sinalização --zones:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c

Para desativar a redistribuição proativa de instâncias, defina a sinalização --instance-redistribution-type como NONE. Não é possível desativar a redistribuição proativa de instâncias se o escalonamento automático estiver ativado.

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --instance-redistribution-type NONE \
    --region us-east1

API

Todos os MIGs exigem um modelo de instância. Caso ainda não tenha um, crie um modelo de instância.

Em seguida, crie uma solicitação POST para o método regionInstanceGroupManagers.insert. No corpo da solicitação, especifique o nome e o tamanho do grupo e o URL do modelo de instância. Opcionalmente, especifique outros campos, como o nome de base das instâncias no grupo.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo;
  • BASE_INSTANCE_NAME: o nome da instância de cada instância de VM criada como parte do grupo. Por exemplo, o nome de instância de base example-instance cria instâncias com nomes como example-instance-[RANDOM_STRING], em que [RANDOM_STRING] é gerado pelo servidor;
  • INSTANCE_TEMPLATE_NAME: o modelo de instância a ser usado;
  • INSTANCE_GROUP_NAME: o nome do MIG;
  • TARGET_SIZE: o número pretendido de VMs para o grupo.

Se você quiser selecionar zonas específicas ou criar VMs em uma região com menos ou mais de três zonas, inclua a propriedade distributionPolicy na solicitação e forneça uma lista de zonas. Substitua ZONE pelo nome de uma zona onde criar VMs.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/ZONE"},
       {"zone": "zones/ZONE"}
      ]
   }
}

Por exemplo, o seguinte cria um MIG regional chamado example-rmig com 10 instâncias gerenciadas distribuídas entre as zonas us-east1-b e us-east1-c:

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers

{
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

Como trabalhar com instâncias gerenciadas em um MIG regional

Se você precisar agir em instâncias gerenciadas específicas em um MIG, por exemplo, para criar ou excluir instâncias com nomes específicos, o processo será o mesmo para MIGs regionais e zonais. Consulte Como trabalhar com instâncias gerenciadas.

Como receber informações sobre MIGs regionais e instâncias gerenciadas

Se você quiser receber informações sobre seu MIG, por exemplo, para ver sua configuração ou inspecionar seu status ou se quiser informações sobre as instâncias gerenciadas em um MIG, o processo será o mesmo para regional e MIGs zonais. Consulte Como receber informações sobre MIGs e instâncias gerenciadas.

Como atualizar um grupo regional de instâncias gerenciadas

É possível aplicar um novo modelo de instância a um MIG regional usando o recurso Updater. Para mais informações, consulte Como atualizar um MIG regional.

Se você quiser adicionar ou remover instâncias em um MIG, consulte Como trabalhar com instâncias gerenciadas.

Se você quiser usar ou atualizar recursos do MIG, consulte a documentação de recuperação automática, balanceamento de carga, escalonamento automático, atualização automática e cargas de trabalho com estado.

Como desativar e reativar a redistribuição proativa de instâncias

A redistribuição proativa de instâncias mantém um número igual de VMs nas zonas selecionadas na região. Essa configuração maximiza a disponibilidade do aplicativo no caso de uma falha no nível da zona.

A redistribuição proativa de instâncias é ativada por padrão para MIGs regionais, mas é possível desativá-la para MIGs não escalonadas automaticamente. Quando a redistribuição proativa de instâncias é desativada, o grupo não tenta redistribuir proativamente as VMs entre as zonas. Isso é útil quando você precisa:

  • Excluir ou abandonar manualmente as instâncias gerenciadas do grupo sem afetar outras VMs em execução.
  • Excluir automaticamente uma VM de worker em lote após a conclusão do job sem afetar outros workers.
  • Proteger as VMs com aplicativos com estado contra exclusão automática não intencional por redistribuição proativa de instâncias.

Use o Console do Cloud, a ferramenta gcloud ou a API Compute Engine para criar uma região regional MIG com redistribuição proativa de instâncias desativada ou para ativar ou desativar a redistribuição de instâncias de um grupo atual.

Como criar um grupo com a redistribuição proativa de instâncias desativada

Console

  1. No Console do Cloud, acesse a página Grupos de instâncias.

    Acessar a página "Grupos de instâncias"

  2. Clique em Criar grupo de instâncias para criar um novo grupo.
  3. Em Localização, selecione Várias zonas.
  4. Escolha a região desejada.
  5. Se você quiser escolher zonas específicas, clique em Configurar zonas para selecionar quais usar.
  6. Para desativar a redistribuição proativa de instâncias, siga estas etapas:
    1. Verifique se o Modo de escalonamento automático está definido como Desativado.
    2. Defina Redistribuição de instâncias como Desativada.
  7. Escolha um modelo de instância para o grupo ou crie um novo.
  8. Especifique o número de VMs para este grupo. Lembre-se de provisionar VMs suficientes para dar suporte ao aplicativo se ocorrer uma falha de zona.
  9. Continue com o restante do processo de criação do MIG.

gcloud

Para criar um novo MIG regional sem redistribuição proativa de instâncias, use o comando gcloud compute instance-groups managed create com a sinalização --instance-redistribution-type definida como NONE.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

Substitua:

  • INSTANCE_GROUP_NAME: o nome do MIG;
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a ser usado para o grupo;
  • TARGET_SIZE: o tamanho de destino do grupo;
  • ZONES: a lista de zonas em uma única região em que você precisa implantar VMs.

Exemplo:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

Para criar um MIG regional, sem escalonamento automático e sem redistribuição proativa de instâncias, faça uma solicitação POST ao método regionInstanceGroupManagers.insert. No corpo da solicitação, inclua a propriedade updatePolicy e defina o respectivo campo instanceRedistributionType como NONE.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias;
  • INSTANCE_GROUP_NAME: o nome do MIG;
  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância a ser usado para o grupo;
  • TARGET_SIZE: o tamanho de destino do grupo de instâncias;
  • ZONE: o nome de uma zona na única região em que você precisa implantar as VMs.

Como desativar a redistribuição proativa de instâncias

Antes de desativar a redistribuição proativa de instâncias, é preciso definir o modo do escalonador automático para desativar o escalonamento automático ou restringi-lo apenas para escalonamento horizontal.

Console

  1. No Console do Cloud, acesse a página Grupos de instâncias.

    Acessar a página "Grupos de instâncias"

  2. Selecione o MIG a ser atualizado e clique em Editar grupo.
  3. Se houver alguma configuração de escalonamento automático, verifique se o Modo de escalonamento automático está definido como Não fazer escalonamento automático.
  4. Defina Redistribuição de instâncias como Desativado para desativar a redistribuição automática.
  5. Clique em Salvar.

gcloud

Para desativar a redistribuição proativa de instâncias para um MIG regional não escalonado automaticamente, use o comando compute instance-groups managed update com a sinalização --instance-redistribution-type definida como NONE.

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

Substitua:

  • INSTANCE_GROUP_NAME: o nome do MIG.
  • REGION: a região do grupo de instâncias.

API

Para desativar a redistribuição proativa de instâncias para um MIG regional sem escalonamento automático, faça uma solicitação PATCH para o método regionInstanceGroupManagers.patch. No corpo da solicitação, inclua a propriedade updatePolicy e defina o respectivo campo instanceRedistributionType como NONE

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

Substitua:

  • PROJECT_ID: o ID do projeto desta solicitação;
  • REGION: a região do grupo de instâncias;
  • INSTANCE_GROUP_NAME: o nome de um MIG sem escalonamento automático.

Como ativar a distribuição proativa de instâncias

Para ativar a distribuição proativa de instâncias, use um comando semelhante ao visto em Como desativar a redistribuição proativa de instâncias, mas defina o tipo de redistribuição de instâncias como PROACTIVE.

Se você tiver excluído ou abandonado manualmente algumas instâncias gerenciadas que resultam em uma distribuição desigual de VMs na região, antes de reativar a redistribuição proativa de instâncias, será necessário reequilibrar manualmente o grupo. A diferença no número de VMs entre duas zonas não pode exceder uma VM.

Um MIG regional não permite ativar a redistribuição proativa de instâncias quando as VMs são distribuídas de maneira uniforme entre as zonas (a diferença no número de VMs entre duas zonas é de duas ou mais VMs). Isso evita uma exclusão automática não intencional de VMs de zonas com mais VMs, o que seria acionado para atingir a distribuição uniforme.

Como reequilibrar manualmente um MIG regional

O MIG não será equilibrado se a diferença no número de VMs entre duas zonas for de duas ou mais VMs. Um MIG poderá não balancear se você desativar a redistribuição proativa de instâncias e, em seguida, excluir ou abandonar instâncias para causar uma distribuição desigual entre as zonas.

É possível conseguir manualmente uma distribuição uniforme de instâncias entre zonas excluindo VMs das zonas com mais instâncias ou redimensionando para adicionar instâncias para zonas com menos VMs até que a distribuição esteja uniforme.

Quando você redimensiona um MIG com a redistribuição proativa de instâncias desativada, o grupo ainda converge de forma oportunista para o equilíbrio, tratando cada operação de redimensionamento como uma oportunidade para equilibrar o grupo:

  • Quando o grupo cresce, o grupo sempre tenta adicionar VMs às zonas com o menor número de VMs.
  • Quando o grupo diminui, o grupo sempre remove as VMs das zonas com o maior número de VMs.
Exemplo de redimensionamento manual de um grupo para conseguir redistribuição uniforme

Como simular uma falha de zona em um MIG regional

Para testar se o MIG regional está sendo provisionado em excesso e sobreviva a uma interrupção de zona, use o exemplo a seguir para simular uma falha zonal.

Neste script, o Apache é interrompido e iniciado como o cenário padrão. Caso isso não se aplique ao aplicativo, substitua os comandos que interrompem e iniciam o Apache pelo seu próprio cenário de falha e recuperação.

  1. Implante e execute esse script continuamente em todas as VMs do grupo. Para fazer isso, adicione o script ao modelo da instância ou inclua esse script a uma imagem personalizada e use essa imagem no modelo.

    #!/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 em que simular a falha (limite a falha a apenas uma zona);
    • failed_instance_names: escolha as VMs que ficarão off-line por nome (para limitar a falha apenas a nomes de VM que contenham essa string).

    É possível definir esses metadados usando a ferramenta gcloud. Por exemplo, o comando a seguir define a interrupção da zona como a zona europe-west1-b e afeta as VMs que têm nomes que começam 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 falha, execute a recuperação removendo as chaves de metadados:

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

Aqui estão algumas ideias de cenários de falha que podem ser executados com esse script:

  • Interrompa seu aplicativo completamente para ver como o MIG responde.
  • Faça com que suas VMs retornem como "não íntegras" nas verificações de integridade de balanceamento de carga.
  • Modifique o iptables para bloquear parte do tráfego de e para a VM.
  • Encerre as VMs. Por padrão, ele será recriado pelo MIG regional logo após, mas a nova encarnação será encerrada imediatamente assim que o script for executado e enquanto os valores de metadados forem definidos. Isso acarreta um loop de falha.

A seguir