Criar um conjunto de dimensionamento de máquina virtual que usa zonas de disponibilidade

As zonas de disponibilidade do Azure são locais isolados por falhas dentro de uma região do Azure que fornecem energia, resfriamento e rede redundantes. Eles 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 um mínimo de três zonas separadas. Cada zona de disponibilidade consiste em um ou mais data centers equipados com energia, rede e resfriamento de infraestrutura independente. As zonas de disponibilidade são conectadas por uma rede de alto desempenho com uma latência de ida e volta inferior a 2 milissegundos. Para obter mais informações, consulte Visão geral das zonas de disponibilidade.

Para proteger seus Conjuntos de Dimensionamento de Máquina Virtual contra falhas no nível do datacenter, você pode criar um conjunto de dimensionamento em Zonas de Disponibilidade. Para usar Zonas de Disponibilidade, seu conjunto de escala deve ser criado em uma região do Azure com suporte.

Considerações de design para zonas de disponibilidade

Os Conjuntos de Dimensionamento de Máquina Virtual suportam três modelos de implantação zonal:

  • Zona redundante ou extensão de zona (recomendado)
  • Zonal ou zona alinhada (zona única)
  • Regional

Zona redundante ou abrangência de zona

Um conjunto de escala redundante de zona ou de abrangência de zona espalha instâncias em todas as zonas selecionadas, "zones": ["1","2","3"]. Por padrão, o conjunto de escala 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 rede de alto desempenho com baixa latência. No caso de uma interrupção zonal ou problema de conectividade, a conectividade com instâncias dentro da zona afetada pode ser comprometida, enquanto instâncias em outras zonas de disponibilidade não devem ser afetadas. Você pode adicionar capacidade ao conjunto de escala durante uma interrupção zonal e o conjunto de escala adiciona mais instâncias às zonas não afetadas. Quando a zona for restaurada, talvez seja necessário reduzir o conjunto de escala para a capacidade original. Uma prática recomendada seria configurar regras de dimensionamento automático com base no uso da CPU ou da memória. As regras de dimensionamento automático permitiriam que o conjunto de escala respondesse a uma perda das instâncias de VM nessa zona, dimensionando novas instâncias nas zonas operacionais restantes.

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

Zonal ou zona alinhada (zona única)

Um conjunto de escalas alinhado por zona ou zona coloca instâncias em uma única zona "zones": ['1']de disponibilidade. 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 latência mais baixa entre instâncias.

Regional

Um Conjunto de Escala de Máquina Virtual regional ocorre quando a atribuição de zona não é definida explicitamente ("zones"=[] ou "zones"=null). Nessa configuração, o conjunto de escala cria instâncias regionais (não fixadas em zona) e coloca implicitamente instâncias em toda a região. Não há garantia de equilíbrio ou distribuição entre zonas, ou que os casos aterrissem na mesma zona de disponibilidade. A colocation de disco é garantida para discos Ultra e Premium v2, o melhor esforço para discos Premium V1 e não é garantido para discos Standard SKU (SSD ou HDD).

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

Domínios de falha e zonas de disponibilidade

Um domínio de falha é um grupo de isolamento de falhas dentro de uma zona de disponibilidade ou datacenter de nós de hardware que compartilham o mesmo cronograma de manutenção de energia, rede, resfriamento e plataforma. 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 entre domínios de falha dentro de uma região ou zona.

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

Com a propagação máxima, o conjunto de escala distribui suas VMs pelo maior número possível de domínios de falha dentro de cada zona. Essa dispersão pode ser maior ou menor que cinco domínios de falha por zona. Com a propagação fixa estática, o conjunto de escala distribui suas VMs em exatamente cinco domínios de falha por zona. Se o conjunto de escalas não conseguir encontrar cinco domínios de falha distintos por zona para satisfazer a solicitação de alocação, a solicitação falhará.

Recomendamos a implantação com distribuição máxima para a maioria das cargas de trabalho, pois essa abordagem fornece a melhor distribuição na maioria dos casos. Se você precisar que as réplicas sejam espalhadas por unidades de isolamento de hardware distintas, recomendamos distribuir pelas zonas de disponibilidade e utilizar a dispersão máxima dentro de cada zona.

Nota

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

Grupos de colocação

Importante

Os grupos de posicionamento só se aplicam a Conjuntos de Dimensionamento de Máquina Virtual em execução no modo de orquestração Uniforme.

Ao implantar um conjunto de escalas, você pode implantar com um único grupo de posicionamento por zona de disponibilidade ou com vários por zona. Para conjuntos de escalas regionais (não zonais), a escolha é ter um único grupo de colocação na região ou ter vários na região. Se a propriedade do conjunto de escala chamada singlePlacementGroup for definida como false, o conjunto de escala poderá ser composto por vários grupos de posicionamento e terá um intervalo de 0 a 1.000 VMs. Quando definido como o valor padrão de true, o conjunto de escala é composto por um único grupo de posicionamento e tem um intervalo de 0 a 100 VMs. Para a maioria das cargas de trabalho, recomendamos vários grupos de posicionamento, o que permite maior escala. Na versão da API 2017-12-01, a escala define como padrão vários grupos de posicionamento para conjuntos de escala de zona única e entre zonas, mas o padrão é um grupo de posicionamento único para conjuntos de escalas regionais (não zonais).

Nota

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

Balanceamento de zona

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

  • Um conjunto de escala com 2 VMs na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerado equilibrado. Há apenas uma zona com uma contagem de VM diferente e é apenas 1 a menos do que as outras zonas.
  • Uma escala definida com 1 VM na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerada desequilibrada. A zona 1 tem menos 2 VMs do que as zonas 2 e 3.

É possível que as VMs no conjunto de escala sejam criadas com êxito, mas as extensões nessas VMs não são implantadas. Essas VMs com falhas de extensão ainda são contadas ao determinar se um conjunto de escala está equilibrado. Por exemplo, um conjunto de escala com 3 VMs na zona 1, 3 VMs na zona 2 e 3 VMs na zona 3 é considerado equilibrado mesmo se todas as extensões falharem na zona 1 e todas as extensões forem bem-sucedidas nas zonas 2 e 3.

Com o equilíbrio da zona de melhor esforço, o conjunto de escalas tenta escalar para dentro e para fora, mantendo o equilíbrio. No entanto, se, por algum motivo, o equilíbrio de zona não for possível (por exemplo, se uma zona cair, o conjunto de escala não poderá criar uma nova VM nessa zona), o conjunto de escalas permitirá que o desequilíbrio temporário seja dimensionado com êxito para dentro ou para fora. Em tentativas de expansão subsequentes, o conjunto de escala adiciona VMs a zonas que precisam de mais VMs para que o conjunto de escala seja balanceado. Da mesma forma, na escala subsequente nas tentativas, o conjunto de escala remove VMs de zonas que precisam de menos VMs para que o conjunto de escala seja balanceado. Com o "equilíbrio estrito de zonas", o conjunto de escalas falha em qualquer tentativa de escalar para dentro ou para fora se isso causar desequilíbrio.

Para usar o equilíbrio de zona de melhor esforço, defina zoneBalance como false. Essa configuração é o padrão na versão da API 2017-12-01. Para usar o equilíbrio de zona estrito, defina zoneBalance como true.

Nota

A zoneBalance propriedade só pode ser definida se a propriedade zones do conjunto de escala 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 escala zonal ou de abrangência de zona

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

Você pode criar um conjunto de escala que usa zonas de disponibilidade com um dos seguintes métodos:

Utilizar o portal do Azure

O processo para criar um conjunto de escala que usa uma zona de disponibilidade é o mesmo detalhado no artigo de introdução. Ao selecionar uma região do Azure com suporte, você pode criar um conjunto de escala em uma ou mais zonas disponíveis, conforme mostrado no exemplo a seguir:

Criar um conjunto de escalas em uma única zona 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 que você especificar.

Utilizar a CLI do Azure

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

Adicione o --zones parâmetro 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 do conjunto de escala e VMs na(s) zona(s) que você especificar. Para obter um exemplo completo de um conjunto de escala redundante de zona e recursos de rede, consulte este exemplo de script CLI

Utilizar o Azure PowerShell

Para usar as Zonas de Disponibilidade, você deve criar seu conjunto de escala em uma região do Azure com suporte. Adicione o -Zone parâmetro ao comando New-AzVmssConfig e especifique qual zona ou 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"

Utilizar modelos do Azure Resource Manager

O processo para criar um conjunto de escala que usa 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 "sku": {"name":"Standard"} propriedade 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 qualquer tráfego. Para obter mais informações, consulte Visão geral padrão do Balanceador de Carga do Azure e Zonas de disponibilidade e Balanceador de Carga Padrão.

Para obter um exemplo completo de um conjunto de escala redundante de zona e recursos de rede, consulte nosso modelo de exemplo do Gerenciador de Recursos.

Atualizar o conjunto de dimensionamento para adicionar zonas de disponibilidade

Pode modificar um dimensionamento para expandir o conjunto de zonas sobre as quais pretende distribuir instâncias de VM. A expansão permite que você aproveite o SLA de disponibilidade zonal mais alto (99,99%) versus o SLA de disponibilidade regional (99,95%). Ou expanda seu conjunto de escala para aproveitar as novas zonas de disponibilidade que não estavam disponíveis quando o conjunto de escala foi criado.

Importante

A atualização dos Conjuntos de Dimensionamento de Máquinas Virtuais para adicionar zonas de disponibilidade está atualmente em visualização. As visualizações são disponibilizadas para você na condição de que você concorde com os Termos de Uso Suplementares. Alguns aspetos desta funcionalidade podem alterar-se após a disponibilidade geral (GA).

Importante

Este recurso destina-se a cargas de trabalho sem monitoração de estado em Conjuntos de Dimensionamento de Máquina Virtual. Não há suporte para dimensionamento de conjuntos com cargas de trabalho com monitoração de estado ou usados com o Service Fabric ou os Serviços Kubernetes do Azure para expansão zonal.

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

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

Você deve se registrar para 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 o conjunto de escala para usar zonas de disponibilidade

Você pode atualizar o conjunto de escala para dimensionar instâncias para uma ou mais zonas de disponibilidade adicionais, até o número de zonas de disponibilidade suportadas pela região. Para regiões que suportam zonas, o número mínimo de zonas é 3.

Importante

Quando expande o conjunto de dimensionamento para zonas adicionais, as instâncias originais não são migradas nem alteradas. Quando aumenta horizontalmente, novas instâncias serão criadas e distribuídas uniformemente pelas zonas de disponibilidade selecionadas. Quando você dimensiona no conjunto de escalas, todas as instâncias regionais serão priorizadas para remoção primeiro. Depois disso, as instâncias serão removidas com base na política de redução horizontal.

A expansão para um conjunto de escala zonal é feita em 3 etapas:

  1. Prepare-se para a expansão zonal
  2. Parâmetro de zonas de atualização no conjunto de escalas
  3. Adicionar novas instâncias zonais e remover instâncias originais

Prepare-se para a expansão zonal

Aviso

Esse recurso permite adicionar zonas ao conjunto de escalas. Não é possível voltar a um conjunto de escala regional ou remover zonas depois de adicionadas.

Para preparar a expansão zonal:

  • Verifique se você tem cota suficiente para o tamanho da VM na região selecionada para 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
  • Valide se a configuração do conjunto de escalas é válida para conjuntos de escalas zonais:
    • platformFaultDomainCount deve ser definido como 1 ou 5. A distribuição fixa com 2 ou 3 domínios de falha não é suportada para implantações zonais.
    • As reservas de capacidade não são suportadas durante a expansão da zona. Quando o conjunto de escala for totalmente zonal (não mais instâncias regionais), você poderá adicionar um grupo de reserva de capacidade ao conjunto de escalas.
    • Não há suporte para implantações de Host Dedicado do Azure.

Atualizar o parâmetro zones no conjunto de escalas

Atualize o conjunto de escala para alterar o parâmetro zones.

  1. Navegue até o conjunto de escalas que deseja atualizar
  2. Na guia Propriedades da página inicial do conjunto de escalas, localize a propriedade Zona de disponibilidade e pressione Editar
  3. Na caixa de diálogo Editar Local , selecione a(s) zona(s) desejada(s)
  4. Selecione Aplicar

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

Dimensionar e ampliar manualmente

Atualize a capacidade do conjunto de escala para adicionar mais instâncias. A nova capacidade deve ser definida para a capacidade original mais o número de novas instâncias. Por exemplo, se o conjunto de escala tiver 5 instâncias regionais e você quiser expandir para ter 3 instâncias em cada uma das 3 zonas, defina a capacidade como 14.

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

Quando estiver satisfeito que as novas instâncias estão prontas, dimensione seu conjunto de escala para remover as instâncias regionais originais. Você pode excluir manualmente as instâncias regionais específicas ou dimensionar reduzindo a capacidade do conjunto de escalas. Ao escalar por meio da redução da capacidade do conjunto de escalas, a plataforma sempre preferirá remover as instâncias regionais e, em seguida, seguir a escala na política.

Automatize com atualizações contínuas + MaxSurge

Com atualizações contínuas + 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 escala e relatado como íntegro, um lote de instâncias antigas é removido automaticamente do conjunto de escala. As atualizações continuam até que todas as instâncias sejam atualizadas.

Importante

As atualizações contínuas com o MaxSurge estão atualmente sob Visualização Pública. Está disponível apenas para o VMSS Uniform Orchestration Mode.

Problemas e limitações conhecidos

  • O recurso é direcionado a cargas de trabalho sem estado em Conjuntos de Dimensionamento de Máquina Virtual.

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

  • Não é possível remover ou substituir zonas, apenas adicionar zonas

  • Não é possível atualizar de uma extensão de zona ou escala zonal definida para um conjunto de escala regional.

  • platformFaultDomainCount deve ser definido como 1 ou 5. A distribuição fixa com 2 ou 3 domínios de falha não é suportada para implantações zonais.

  • As reservas de capacidade não são suportadas durante a expansão da zona. Quando o conjunto de escala for totalmente zonal (não mais instâncias regionais), você poderá adicionar um grupo de reserva de capacidade ao conjunto de escalas.

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

Próximos passos

Agora que você criou um conjunto de dimensionamento em uma zona de disponibilidade, pode aprender como Implantar aplicativos em conjuntos de escala de máquina virtual ou Usar dimensionamento automático com conjuntos de escala de máquina virtual.