Criar um Conjunto de Dimensionamento de Máquinas Virtuais que use Zonas de Disponibilidade

As zonas de disponibilidade do Azure são locais isolados contra falhas em uma região do Azure que fornecem energia, resfriamento e rede redundantes. Elas permitem que você execute aplicativos com alta disponibilidade e tolerância a falhas de data center. As regiões do Azure que dão suporte a Zonas de Disponibilidade têm no mínimo três zonas separadas. Cada zona de disponibilidade consiste em um ou mais data centers equipados com infraestrutura, energia, rede e resfriamento independentes. As zonas de disponibilidade são conectadas por uma rede de alto desempenho com uma latência de viagem de ida e volta de menos de 2 milissegundos. Para obter mais informações, consulte Visão geral de zonas de disponibilidade.

Para proteger seus Conjuntos de Dimensionamento de Máquinas Virtuais contra falhas do nível do datacenter, é possível criar um conjunto de dimensionamento entre Zonas de Disponibilidade. Para usar Zonas de Disponibilidade, seu conjunto de dimensionamento deve ser criado em uma região do Azure com suporte.

Considerações de design para zonas de disponibilidade

Conjuntos de Dimensionamento de Máquinas Virtuais dão suporte a três modelos de implantação zonal:

  • Redundância de zona ou abrangência de zona (recomendado)
  • Zonal ou alinhado a zonas (zona única)
  • Regional

Redundância de zona ou abrangência de zona

Um conjunto de dimensionamento com redundância de zona ou abrangência de zona espalha instâncias em todas as zonas selecionadas, "zones": ["1","2","3"]. Por padrão, o conjunto de dimensionamento executa uma abordagem de melhor esforço para distribuir instâncias uniformemente entre as zonas selecionadas. No entanto, você pode especificar que deseja um equilíbrio de zona estrito definindo "zoneBalance": "true" em sua implantação. Cada VM e seus discos são zonais, portanto, eles são fixados em uma zona específica. As instâncias entre zonas são conectadas por uma rede de alto desempenho com baixa latência. No caso de uma interrupção ou problema de conectividade zonal, a conectividade com instâncias dentro da zona afetada pode ficar comprometida, enquanto as instâncias em outras zonas de disponibilidade não devem ser afetadas. Você pode adicionar capacidade ao conjunto de dimensionamento durante uma interrupção zonal e o conjunto de dimensionamento adicionará instâncias às zonas não afetadas. Quando a zona é restaurada, talvez seja necessário reduzir verticalmente o conjunto de dimensionamento à capacidade original. A melhor prática seria configurar regras de dimensionamento automático com base no uso de CPU ou memória. As regras de dimensionamento automático permitem que o conjunto de dimensionamento responda a uma perda das instâncias de VM em uma zona expandindo novas instâncias nas zonas operacionais restantes.

A disseminação de instâncias entre zonas de disponibilidade atende ao SLA de 99,99% para instâncias distribuídas entre zonas de disponibilidade e é recomendada para a maioria das cargas de trabalho no Azure.

Zonal ou alinhado a zonas (zona única)

Um conjunto de dimensionamento zonal ou alinhado a zonas coloca instâncias em uma única zona de disponibilidade "zones": ['1']. Cada VM e seus discos são zonais, portanto, eles são fixados em uma zona específica. Essa configuração é usada principalmente quando você precisa de menor latência entre instâncias.

Regional

O conjunto de dimensionamento de máquinas virtuais é regional quando a atribuição de zona não é definida explicitamente ("zones"=[] ou "zones"=null). Nessa configuração, o conjunto de dimensionamento cria instâncias regionais (não fixadas por zona) e coloca implicitamente instâncias em toda a região. Não há nenhuma garantia de equilíbrio ou distribuição entre zonas nem que as instâncias cheguem à mesma zona de disponibilidade. A colocação de disco é garantida para discos Ultra e Premium v2, o melhor esforço para discos Premium V1 e não é garantida para discos SSD (SSD ou HDD) Standard.

No caso raro de uma interrupção zonal completa, qualquer ou todas as instâncias dentro do conjunto de dimensionamento poderão ser afetadas.

Domínios de falha e zonas de disponibilidade

Um domínio de falha é um grupo de isolamento de falhas em uma zona de disponibilidade ou datacenter de nós de hardware que compartilham o mesmo agendamento de manutenção de plataforma, potência, rede e resfriamento. As instâncias de VM que estão em domínios de falha diferentes provavelmente não serão afetadas pela mesma interrupção planejada ou não planejada. Você pode especificar como as instâncias são distribuídas nos domínios de falha de uma região ou zona.

  • Difusão máxima (platformFaultDomainCount = 1)
  • Difusão estática corrigida (platformFaultDomainCount = 5)
  • Distribuição alinhada com domínios de falha de disco de armazenamento (platformFaultDomainCount = 2 ou 3, somente para implantações regionais)

Com a distribuição máxima, o conjunto de dimensionamento distribui suas VMs em no máximo de domínios de falha possíveis dentro de cada zona. Essa distribuição pode ser entre mais ou menos de cinco domínios de falha por zona. Com a difusão estática corrigida o conjunto de dimensionamento distribui suas VMs em exatamente cinco domínios de falha por zona. Se o conjunto de dimensionamento não conseguir localizar cinco domínios de falha distintos por zona para atender à solicitação de alocação, a solicitação falhará.

É recomendável implantar com distribuição máxima para a maioria das cargas de trabalho, uma vez que esse método fornece a melhor distribuição na maioria dos casos. Se você precisar que réplicas sejam distribuídas em unidades de isolamento de hardware diferentes, é recomendável distribuir por Zonas de Disponibilidade e utilizar a distribuição máxima dentro de cada região.

Observação

Com a distribuição máxima, você verá apenas um domínio de falha na exibição da VM do conjunto de dimensionamento e nos metadados de instância, independentemente de em quantos domínios de falha as VMs estão espalhadas. A distribuição dentro de cada região é implícita.

Grupos de posicionamento

Importante

Os grupos de posicionamento se aplicam somente a Conjuntos de Dimensionamento de Máquinas Virtuais em execução no modo de orquestração Uniforme.

Quando você implanta um conjunto de escala, você também pode implantar um único grupo posicionamento por Zona de Disponibilidade ou com vários por zona. Para conjuntos de dimensionamento regionais (não zonal), a opção é ter um único grupo posicionamento na região ou ter vários na região. Se a propriedade de conjunto de dimensionamento chamada singlePlacementGroup for definida como falso, o conjunto de dimensionamento poderá ser composto de vários grupos de posicionamento e ter um intervalo de 0 a 1.000 VMs. Quando definido com o valor padrão verdadeiro, o conjunto de dimensionamento é composto de um grupo único posicionamento e tem um intervalo de 0 a 100 VMs. Para a maioria das cargas de trabalho, é recomendável vários grupos de posicionamento, o que permite maior dimensionamento. Na API versão 2017-12-01, os conjuntos de dimensionamento têm como padrão múltiplos grupos de posicionamento para conjuntos de dimensionamento de zona única e entre zonas, mas eles têm como padrão um grupo de posicionamento único para conjuntos de dimensionamento regionais (não zonal).

Observação

Se você usar a distribuição máxima, deverá usar vários grupos de posicionamento.

Balanceamento de zona

Por fim, para conjuntos de dimensionamento implantados em várias zonas, você também tem a opção de escolher o "equilíbrio de zona de melhor esforço" ou "equilíbrio de zona estrito". Um conjunto de dimensionamento será considerado "equilibrado" se cada zona tiver o mesmo número de VMs +\- 1 em relação a todas as outras zonas do conjunto de dimensionamento. Por exemplo:

  • Um conjunto de dimensionamento com 2 VMs na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerado balanceado. Há apenas uma zona com uma contagem de VM diferente e ela é apenas 1 a menos do que outras zonas.
  • Um conjunto de dimensionamento com 1 VM na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerado não balanceado. Zona 1 tem 2 VMs a menos do que as zonas 2 e 3.

É possível que as VMs no conjunto de dimensionamento sejam criadas com êxito, mas extensões nessas VMs falham na implantação. Essas VMs com falhas de extensão ainda são contadas ao determinar se um conjunto de dimensionamento está balanceado. Por exemplo, um conjunto de dimensionamento com 3 VMs na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerado balanceado mesmo se todas as extensões falham na zona 1 e todas as extensões obtêm êxito nas zonas 2 e 3.

Com melhor balanceamento de zona possível, o conjunto de dimensionamento tenta reduzir e expandir mantendo o balanceamento. No entanto, se por algum motivo o equilíbrio de zona não for possível (por exemplo, se uma zona ficar inativa, o conjunto de dimensionamento não poderá criar uma VM nessa zona), o conjunto de dimensionamento permitirá o desequilíbrio temporário para reduzir horizontalmente ou verticalmente com êxito. Nas tentativas de expansão subsequentes, o conjunto de dimensionamento adicionará VMs a zonas que precisam de mais VMs para que o conjunto de dimensionamento seja balanceado. De forma semelhante, em tentativas de redução subsequentes, o conjunto de dimensionamento remove VMs de zonas que precisam de menos VMs para que o conjunto de dimensionamento seja balanceado. Com "balanceamento de zona estrito", o conjunto de dimensionamento falhará em qualquer tentativa de expandir ou reduzir que cause desbalanceamento.

Para usar o melhor balanceamento de zona possível, defina zoneBalance como false. Esta é a configuração padrão na versão de API 2017-12-01. Para usar o balanceamento de zona estrito, defina zoneBalance como true.

Observação

A propriedade zoneBalance só poderá ser definida se a propriedade zonas do conjunto de dimensionamento contiver mais de uma zona. Se não houver zonas ou apenas uma zona especificada, a propriedade zoneBalance não deverá ser definida.

Criar conjuntos de dimensionamento zonais ou abrangentes em zonas

Ao implantar um Conjunto de Dimensionamento de Máquinas Virtuais, você pode optar por usar uma única Zona de Disponibilidade em uma região ou várias zonas.

Você pode criar um conjunto de dimensionamento que usa Zonas de Disponibilidade com um dos seguintes métodos:

Use o Portal do Azure

O processo para criar um conjunto de dimensionamento que use uma Zona de Disponibilidade é o mesmo detalhado no artigo de introdução. Quando você seleciona uma região do Azure com suporte, pode criar um conjunto de dimensionamento em uma ou mais zonas disponíveis, conforme mostrado no exemplo a seguir:

Criar um conjunto de dimensionamento em uma única Região de Disponibilidade

O conjunto de escala e os recursos de suporte, como o balanceador de carga do Azure e o endereço IP público, são criados na zona única especificada por você.

Usar a CLI do Azure

O processo para criar um conjunto de dimensionamento que use uma Zona de Disponibilidade é o mesmo detalhado no artigo de introdução. Para usar Zonas de Disponibilidade, você deve criar seu conjunto de dimensionamento em uma região do Azure com suporte.

Adicione o parâmetro --zones ao comando az vmss create e especifique qual zona usar (como zona 1, 2 ou 3).

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image <SKU Image> \
    --upgrade-policy-mode automatic \
    --admin-username azureuser \
    --generate-ssh-keys \
    --zones 1 2 3

Leva alguns minutos para criar e configurar todos os recursos e as VMs do conjunto de dimensionamento na zona especificada por você. Para obter um exemplo completo de um conjunto de dimensionamento com redundância de zona e recursos de rede, consulte este script CLI de exemplo

Usar PowerShell do Azure

Para usar Zonas de Disponibilidade, você deve criar seu conjunto de dimensionamento em uma região do Azure com suporte. Adicione o parâmetro -Zone ao comando New-AzVmssConfig e especifique qual zona ou quais zonas usar (como zona 1, 2 ou 3).

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "EastUS2" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic" `
  -Zone "1", "2", "3"

Usar modelos do Gerenciador de Recursos do Azure

O processo para criar um conjunto de dimensionamento que use uma Zona de Disponibilidade é o mesmo detalhado no artigo de introdução para Linux ou Windows.

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "East US 2",
  "apiVersion": "2017-12-01",
  "zones": [
        "1",
        "2",
        "3"
      ]
}

Se você criar um endereço IP público ou um balanceador de carga, especifique a propriedade "sku": {"name":"Standard"} para criar recursos de rede com redundância de zona. Você também precisa criar um grupo de segurança de rede e regras para permitir que qualquer tráfego. Para obter mais informações, consulte Visão geral do Azure Load Balancer Standard e Standard Load Balancer e Zonas de Disponibilidade.

Para obter um exemplo completo de um conjunto de dimensionamento com redundância de zona e recursos de rede, consulte nosso modelo do Resource Manager de exemplo

Atualizar conjunto de dimensionamento para adicionar zonas de disponibilidade

Você pode modificar uma escala para expandir o conjunto de zonas sobre as quais as instâncias de VM serão distribuídas. A expansão permite que você aproveite o SLA de maior disponibilidade zonal (99,99%) em relação ao SLA de disponibilidade regional (99,95%). Ou expandir seu conjunto de dimensionamento para aproveitar as novas zonas de disponibilidade que não estavam disponíveis quando o conjunto de dimensionamento foi criado.

Importante

Atualmente, a atualização de Conjuntos de Dimensionamento de Máquinas Virtuais para adicionar zonas de disponibilidade está em versão prévia. As versões prévias são disponibilizadas com a condição de que você concorde com os termos de uso complementares. Alguns aspectos desse recurso podem alterar antes da GA (disponibilidade geral).

Importante

Esse recurso destina-se a cargas de trabalho sem estado em conjuntos de dimensionamento de máquinas virtuais. Não há suporte para conjuntos de dimensionamento com cargas de trabalho com estado ou usados com o Service Fabric ou os Serviços de Kubernetes do Azure para expansão zonal.

Esse recurso pode ser usado com a versão da API 2023-03-01 ou superior.

Habilitar sua assinatura para usar o recurso de expansão zonal

Você deve se registrar em quatro sinalizadores de recursos em sua assinatura:

az feature register --namespace Microsoft.Compute --name VmssAllowRegionalToZonalMigration
az feature register --namespace Microsoft.Compute --name VmssAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowRegionalToZonalMigration

Você pode verificar o status de registro de cada recurso usando:

az feature show --namespace Microsoft.Compute --name \<feature-name\>

Expandir conjunto de dimensionamento para usar zonas de disponibilidade

Você pode atualizar o conjunto de dimensionamento para escalar horizontalmente instâncias para uma ou mais zonas de disponibilidade adicionais, até o número de zonas de disponibilidade compatíveis com a região. Para regiões que dão suporte a zonas, o número mínimo de zonas é 3.

Importante

Ao expandir o conjunto de dimensionamento para zonas adicionais, as instâncias originais não são migradas ou alteradas. Quando você escala horizontalmente, novas instâncias são criadas e distribuídas uniformemente entre as zonas de disponibilidade selecionadas. Quando você reduz horizontalmente o conjunto de dimensionamento, as instâncias regionais são priorizadas para remoção. Depois disso, as instâncias serão removidas com base na política de redução horizontal.

A expansão para um conjunto de dimensionamento zonal é feita em três etapas:

  1. Preparar-se para expansão zonal
  2. Atualizar o parâmetro de zonas no conjunto de dimensionamento
  3. Adicionar novas instâncias zonais e remover instâncias originais

Preparar-se para expansão zonal

Aviso

Esse recurso permite adicionar zonas ao conjunto de dimensionamento. Você não pode voltar para um conjunto de dimensionamento regional nem remover zonas depois que elas tiverem sido adicionadas.

Para se preparar para a expansão zonal:

  • Verifique se você tem cota suficiente para o tamanho da VM na região selecionada a fim de lidar com mais instâncias.
  • Verifique se o tamanho da VM e os tipos de disco que você está usando estão disponíveis em todas as zonas desejadas. Você pode usar a API de SKUs de Recursos de Computação para determinar quais tamanhos estão disponíveis em quais zonas
  • Confirme se a configuração do conjunto de dimensionamento é válida para conjuntos de dimensionamento zonais:
    • platformFaultDomainCount deve ser definido como 1 ou 5. Não há suporte para distribuição fixa com 2 ou 3 domínios de falha em implantações zonais.
    • Não há suporte para reservas de capacidade durante a expansão da zona. Depois que o conjunto de dimensionamento estiver totalmente zonal (sem instâncias regionais), você poderá adicionar um grupo de reserva de capacidade ao conjunto de dimensionamento.
    • Não há suporte para implantações de Host Dedicado do Azure.

Atualizar o parâmetro de zonas no conjunto de dimensionamento

Atualize o conjunto de dimensionamento para alterar o parâmetro de zonas.

  1. Navegue até o conjunto de dimensionamento que você deseja atualizar
  2. Na guia Propriedades da página de aterrissagem do conjunto de dimensionamento, localize a propriedade Zona de disponibilidade e pressione Editar
  3. Na caixa de diálogo Editar Local, selecione as zonas desejadas
  4. Selecione Aplicar.

Adicionar novas instâncias zonais e remover instâncias originais

Escalar e reduzir horizontalmente de maneira manual

Atualize a capacidade do conjunto de dimensionamento para adicionar instâncias. A nova capacidade deve ser definida como a capacidade original mais o número de novas instâncias. Por exemplo, se o conjunto de dimensionamento tinha 5 instâncias regionais e você deseja escalar horizontalmente para ter três instâncias em cada uma das três zonas, defina a capacidade como 14.

Você pode atualizar o parâmetro de zonas e a capacidade do conjunto de dimensionamento no mesmo modelo do ARM ou chamada à API REST.

Quando estiver satisfeito com as novas instâncias que estiverem, reduz horizontalmente seu conjunto de dimensionamento para remover as instâncias regionais originais. Você pode excluir manualmente as instâncias regionais específicas ou reduzir horizontalmente a capacidade do conjunto de dimensionamento. Ao dimensionar por meio da redução da capacidade do conjunto de dimensionamento, a plataforma sempre preferirá remover as instâncias regionais e, em seguida, seguir a política de redução horizontal.

Automatizar com atualizações sem interrupção + MaxSurge

Com as Atualizações sem interrupção + MaxSurge, novas instâncias zonais são criadas e atualizadas com o modelo de escala mais recente em lotes. Depois que um lote de novas instâncias é adicionado ao conjunto de dimensionamento e relatado como íntegro, um lote de instâncias antigas é removido automaticamente do conjunto de dimensionamento. As atualizações continuam até que todas as instâncias sejam atualizadas.

Importante

As atualizações sem interrupção com MaxSurge estão atualmente em Visualização Pública. Esse recurso só está disponível para o Modo de Orquestração Uniforme do VMSS.

Limitações e problemas conhecidos

  • O recurso é destinado a cargas de trabalho sem estado em conjuntos de dimensionamento de máquinas virtuais.

  • Não há suporte para conjuntos de dimensionamento que executam o Service Fabric ou Serviço de Kubernetes do Azure.

  • Você não pode remover nem substituir zonas, apenas adicionar zonas

  • Você não pode atualizar de uma abrangência de zonas ou de um conjunto de dimensionamento zonal para um conjunto de dimensionamento regional.

  • platformFaultDomainCount deve ser definido como 1 ou 5. Não há suporte para distribuição fixa com 2 ou 3 domínios de falha em implantações zonais.

  • Não há suporte para reservas de capacidade durante a expansão da zona. Depois que o conjunto de dimensionamento estiver totalmente zonal (sem instâncias regionais), você poderá adicionar um grupo de reserva de capacidade ao conjunto de dimensionamento.

  • Não há suporte para implantações do Host Dedicado do Azure

Próximas etapas

Agora que você criou conjunto de dimensionamento em uma Zona de Disponibilidade, você pode aprender como Implantar aplicativos em Conjuntos de Dimensionamento de Máquinas Virtuais ou Usar o dimensionamento automático com Conjuntos de Dimensionamento de Máquinas Virtuais.