Executar VMs com balanceamento de carga para ter escalabilidade e disponibilidadeRun load-balanced VMs for scalability and availability

Essa arquitetura de referência mostra um conjunto de práticas comprovadas para executar várias VMs (máquinas virtuais) do Windows em um conjunto de dimensionamento atrás de um balanceador de carga para melhorar a disponibilidade e a escalabilidade.This reference architecture shows a set of proven practices for running multiple Windows virtual machines (VMs) in a scale set behind a load balancer, to improve availability and scalability. Essa arquitetura pode ser usada para qualquer carga de trabalho sem estado, como um servidor Web e é uma fundação para a implantação de aplicativos de N camadas.This architecture can be used for any stateless workload, such as a web server, and is a foundation for deploying n-tier applications. Implantar esta solução.Deploy this solution.

[0][0]

Baixe um arquivo Visio dessa arquitetura.Download a Visio file of this architecture.

ArquiteturaArchitecture

Esta arquitetura baseia-se na Arquitetura de referência de VM única .This architecture builds on the Single VM reference architecture. Essas recomendações também se aplicam a essa arquitetura.Those recommendations also apply to this architecture.

Nesta arquitetura, uma carga de trabalho é distribuída em várias instâncias de VM.In this architecture, a workload is distributed across multiple VM instances. Há um único endereço IP público e o tráfego da Internet é distribuído para as VMs usando um balanceador de carga.There is a single public IP address, and Internet traffic is distributed to the VMs using a load balancer. Essa arquitetura pode ser usada para um aplicativo de camada única, como um aplicativo Web sem estado.This architecture can be used for a single-tier application, such as a stateless web application.

A arquitetura tem os seguintes componentes:The architecture has the following components:

  • Grupo de recursos.Resource group. Grupos de recursos são utilizados para agrupar os recursos para que eles possam ser gerenciados pelo tempo de vida, o proprietário ou outros critérios.Resource groups are used to group resources so they can be managed by lifetime, owner, or other criteria.
  • Rede Virtual e sub-rede.Virtual network (VNet) and subnet. Cada VM do Azure é implantada em uma VNet que pode ser segmentada em várias sub-redes.Every Azure VM is deployed into a VNet that can be segmented into multiple subnets.
  • Azure Load Balancer.Azure Load Balancer. O balanceador de carga distribui as solicitações de entrada da Internet para as instâncias de VM.The load balancer distributes incoming Internet requests to the VM instances.
  • Endereço IP público.Public IP address. É necessário ter um endereço IP público para que o balanceador de carga possa receber o tráfego da Internet.A public IP address is needed for the load balancer to receive Internet traffic.
  • Conjunto de dimensionamento de VM.VM scale set. Um conjunto de dimensionamento de VM é um conjunto de VMs idênticas usado para hospedar uma carga de trabalho.A VM scale set is a set of identical VMs used to host a workload. Os conjuntos de dimensionamento permitem que o número de VMs seja reduzido horizontalmente dentro ou fora manualmente, ou automaticamente com base em regras predefinidas.Scale sets allow the number of VMs to be scaled in or out manually, or automatically based on predefined rules.
  • Conjunto de disponibilidade.Availability set. O conjunto de disponibilidade contém as VMs, tornando-as qualificadas para um SLA (Contrato de Nível de Serviço) mais elevado.The availability set contains the VMs, making the VMs eligible for a higher service level agreement (SLA). Para que o SLA mais elevado seja aplicável, o conjunto de disponibilidade deve incluir um mínimo de duas VMs.For the higher SLA to apply, the availability set must include a minimum of two VMs. Conjuntos de disponibilidade são conjuntos de dimensionamento implícitos.Availability sets are implicit in scale sets. Se você criar VMs fora de um conjunto de dimensionamento, será necessário criar o conjunto de disponibilidade independentemente.If you create VMs outside a scale set, you need to create the availability set independently.
  • Discos gerenciados.Managed disks. O Azure Managed Disks gerenciam os arquivos VHD (disco rígido virtual) para os discos de VM.Azure Managed Disks manage the virtual hard disk (VHD) files for the VM disks.
  • Armazenamento.Storage. Crie uma conta de Armazenamento do Azure para conter os logs de diagnóstico para as VMs.Create an Azure Storage acount to hold diagnostic logs for the VMs.

RecomendaçõesRecommendations

Seus requisitos podem não se alinhar completamente com a arquitetura descrita aqui.Your requirements may not align completely with the architecture described here. Use essas recomendações como ponto de partida.Use these recommendations as a starting point.

Recomendações de disponibilidade e escalabilidadeAvailability and scalability recommendations

Uma opção para ter disponibilidade e escalabilidade é usar um conjunto de dimensionamento de máquinas virtuais.An option for availability and scalability is to use a virtual machine scale set. Conjuntos de dimensionamento de VM ajudam a implantar e gerenciar um conjunto de VMs idênticas.VM scale sets help you to deploy and manage a set of identical VMs. Conjuntos de dimensionamento dão suporte ao dimensionamento automático com base nas métricas de desempenho.Scale sets support autoscaling based on performance metrics. À medida que a carga nas VMs aumenta, VMs adicionais são acrescentadas automaticamente ao balanceador de carga.As the load on the VMs increases, additional VMs are automatically added to the load balancer. Considere usar os conjuntos de dimensionamento se você precisar aumentar as VMs rapidamente ou se precisar de dimensionamento automático.Consider scale sets if you need to quickly scale out VMs, or need to autoscale.

Por padrão, os conjuntos de dimensionamento usam “excesso de provisionamento”, o que significa que o conjunto de dimensionamento inicialmente provisiona mais VMs do que você pediu, excluindo posteriormente as VMs adicionais.By default, scale sets use "overprovisioning," which means the scale set initially provisions more VMs than you ask for, then deletes the extra VMs. Isso melhora a taxa de sucesso geral ao provisionar as VMs.This improves the overall success rate when provisioning the VMs. Se você não estiver usando discos gerenciados, recomendamos não usar mais do que 20 VMs por conta de armazenamento com excesso com provisionamento habilitado e não mais do que 40 VMs com o excesso de provisionamento desabilitado.If you are not using managed disks, we recommend no more than 20 VMs per storage account with overprovisioning enabled, and no more than 40 VMs with overprovisioning disabled.

Há duas maneiras básicas de configurar as VMs implantadas em um conjunto de dimensionamento:There are two basic ways to configure VMs deployed in a scale set:

  • Use as extensões para configurar a VM depois que ela é provisionada.Use extensions to configure the VM after it is provisioned. Com essa abordagem, novas instâncias de VM podem levar mais tempo para ser iniciadas do que uma VM sem extensões.With this approach, new VM instances may take longer to start up than a VM with no extensions.

  • Implante um disco gerenciado com uma imagem de disco personalizada.Deploy a managed disk with a custom disk image. Essa opção pode ser mais rápida de implantar.This option may be quicker to deploy. Porém, isso requer que você mantenha a imagem atualizada.However, it requires you to keep the image up to date.

Para ver considerações adicionais, consulte Considerações de design para conjuntos de dimensionamento.For additional considerations, see Design considerations for scale sets.

Dica

Ao usar qualquer solução de dimensionamento automático, teste-a com cargas de trabalho no nível de produção com bastante antecedência.When using any autoscale solution, test it with production-level workloads well in advance.

Se você não usar um conjunto de dimensionamento, considere usar pelo menos um conjunto de disponibilidade.If you do not use a scale set, consider at least using an availability set. Crie pelo menos duas VMs no conjunto de disponibilidade para dar suporte ao SLA de disponibilidade para VMs do Azure.Create at least two VMs in the availability set to support the availability SLA for Azure VMs. O Azure Load Balancer também exige que as VMs com balanceamento de carga pertençam ao mesmo conjunto de disponibilidade.The Azure load balancer also requires that load-balanced VMs belong to the same availability set.

Cada assinatura do Azure tem limites padrão em vigor, incluindo um número máximo de VMs por região.Each Azure subscription has default limits in place, including a maximum number of VMs per region. Você pode aumentar o limite enviando uma solicitação de suporte.You can increase the limit by filing a support request. Para saber mais, consulte Assinatura do Azure e limite de serviços, cotas e restrições.For more information, see Azure subscription and service limits, quotas, and constraints.

Recomendações de redeNetwork recommendations

Implemente as VMs dentro da mesma sub-rede.Deploy the VMs within the same subnet. Não exponha as VMs diretamente à Internet, concedendo, em vez disso, um endereço IP privado a cada VM.Do not expose the VMs directly to the Internet, but instead give each VM a private IP address. Os clientes se conectam usando um endereço IP público do balanceador de carga.Clients connect using the public IP address of the load balancer.

Se você precisar fazer logon nas VMs atrás do balanceador de carga, considere adicionar uma VM única como jumpbox (também chamada de host de bastião) com um endereço IP público no qual você pode fazer logon.If you need to log into the VMs behind the load balancer, consider adding a single VM as a jumpbox (also called a bastion host) with a public IP address you can log into. Em seguida, faça logon nas VMs por trás do balanceador de carga por meio do jumpbox.And then log into the VMs behind the load balancer from the jumpbox. Alternativamente, é possível configurar as regras de NAT (conversão de endereços de rede) de entrada do balanceador de carga.Alternatively, you can configure the load balancer's inbound network address translation (NAT) rules. No entanto, ter um jumpbox é a melhor solução quando você hospeda cargas de trabalho de N camadas ou várias cargas de trabalho.However, having a jumpbox is a better solution when you are hosting n-tier workloads or multiple workloads.

Recomendações de balanceador de cargaLoad balancer recommendations

Adicione todas as VMs no conjunto de disponibilidade ao pool de endereços de back-end do balanceador de carga.Add all VMs in the availability set to the back-end address pool of the load balancer.

Defina as regras do balanceador de carga para direcionar tráfego de rede para as VMs.Define load balancer rules to direct network traffic to the VMs. Por exemplo, para permitir tráfego HTTP, crie uma regra que mapeie a porta 80 da configuração de front-end para a porta 80 no pool de endereços de back-end.For example, to enable HTTP traffic, create a rule that maps port 80 from the front-end configuration to port 80 on the back-end address pool. Quando um cliente envia uma solicitação HTTP para a porta 80, o balanceador de carga seleciona um endereço IP de back-end usando um algoritmo de hash que inclui o endereço IP de origem.When a client sends an HTTP request to port 80, the load balancer selects a back-end IP address by using a hashing algorithm that includes the source IP address. Dessa forma, as solicitações de cliente são distribuídas por todas as VMs.In that way, client requests are distributed across all the VMs.

Para rotear o tráfego para uma VM específica, use as regras NAT.To route traffic to a specific VM, use NAT rules. Por exemplo, para habilitar RDP para as máquinas virtuais, crie uma regra NAT separada para cada VM.For example, to enable RDP to the VMs, create a separate NAT rule for each VM. Cada regra deve mapear um número da porta diferente para a porta 3389, a porta padrão para RDP.Each rule should map a distinct port number to port 3389, the default port for RDP. Por exemplo, use a porta 50001 para “VM1”, 50002 para “VM2” e assim por diante.For example, use port 50001 for "VM1," port 50002 for "VM2," and so on. Atribua as regras NAT às NICs nas VMs.Assign the NAT rules to the NICs on the VMs.

Recomendações de conta de armazenamentoStorage account recommendations

Também é recomendável usar os discos gerenciado com o armazenamento premium.We recommend the use of managed disks with premium storage. Discos gerenciados não exigem uma conta de armazenamento.Managed disks do not require a storage account. Você simplesmente especifica o tamanho e o tipo de disco e é implantado como um recurso altamente disponível.You simply specify the size and type of disk and it is deployed as a highly available resource.

Se você estiver utilizando discos não gerenciados, crie contas de armazenamento do Azure separadas para cada VM para manter os VHDs (discos rígidos virtuais), para evitar atingir os limites de IOPS (operações de entrada/saída por segundo) para contas de armazenamento.If you are using unmanaged disks, create separate Azure storage accounts for each VM to hold the virtual hard disks (VHDs), in order to avoid hitting the input/output operations per second (IOPS) limits for storage accounts.

Crie uma conta de armazenamento para logs de diagnóstico.Create one storage account for diagnostic logs. Esta conta de armazenamento pode ser compartilhada por todas as VMs.This storage account can be shared by all the VMs. Ela pode ser uma conta de armazenamento não gerenciada usando discos padrão.This can be an unmanaged storage account using standard disks.

Considerações sobre disponibilidadeAvailability considerations

O conjunto de disponibilidade torna seu aplicativo mais resiliente a eventos de manutenção planejados e não planejados.The availability set makes your application more resilient to both planned and unplanned maintenance events.

  • A manutenção planejada ocorre quando a Microsoft atualiza a plataforma subjacente, podendo fazer com que as VMs sejam reiniciadas.Planned maintenance occurs when Microsoft updates the underlying platform, sometimes causing VMs to be restarted. O Azure garante que as VMs em um conjunto de disponibilidade não sejam reiniciadas ao mesmo tempo.Azure makes sure the VMs in an availability set are not all restarted at the same time. Pelo menos uma delas é mantida em execução enquanto as outras estão reiniciando.At least one is kept running while others are restarting.
  • A manutenção não planejada ocorre em caso de falha de hardware.Unplanned maintenance happens if there is a hardware failure. O Azure garante que as VMs em um conjunto de disponibilidade sejam provisionadas em mais de um rack do servidor.Azure makes sure that VMs in an availability set are provisioned across more than one server rack. Isso ajuda a reduzir o impacto de falhas de hardware, interrupções de rede, interrupções de energia e assim por diante.This helps to reduce the impact of hardware failures, network outages, power interruptions, and so on.

Para obter mais informações, consulte Gerenciar a disponibilidade de máquinas virtuais.For more information, see Manage the availability of virtual machines. O vídeo a seguir também fornece uma boa visão geral dos conjuntos de disponibilidade: Como configurar um conjunto de disponibilidade para dimensionar VMs.The following video also provides a good overview of availability sets: How Do I Configure an Availability Set to Scale VMs.

Aviso

Verifique se o conjunto de disponibilidade está configurado ao provisionar a VM.Make sure to configure the availability set when you provision the VM. Atualmente, não há nenhuma maneira de adicionar uma VM do Resource Manager a um conjunto de disponibilidade depois que a VM é provisionada.Currently, there is no way to add a Resource Manager VM to an availability set after the VM is provisioned.

O balanceador de carga utiliza investigações de integridade para monitorar a disponibilidade de instâncias de VM.The load balancer uses health probes to monitor the availability of VM instances. Se uma investigação não puder acessar uma instância dentro de um período de tempo limite, o balanceador de carga parará de enviar tráfego para essa VM.If a probe cannot reach an instance within a timeout period, the load balancer stops sending traffic to that VM. Contudo, o balanceador de carga continuará a investigar e, se a VM ficar disponível novamente, o balanceador de carga reiniciará o envio de tráfego para ela.However, the load balancer will continue to probe, and if the VM becomes available again, the load balancer resumes sending traffic to that VM.

Aqui estão algumas recomendações sobre as investigações de integridade do balanceador de carga:Here are some recommendations on load balancer health probes:

  • As investigações podem testar HTTP ou TCP.Probes can test either HTTP or TCP. Se suas VMs são executadas em um servidor HTTP, crie uma investigação HTTP.If your VMs run an HTTP server, create an HTTP probe. Caso contrário, crie uma investigação TCP.Otherwise create a TCP probe.
  • Para uma investigação HTTP, especifique o caminho para um ponto de extremidade HTTP.For an HTTP probe, specify the path to an HTTP endpoint. A investigação verifica uma resposta HTTP 200 para esse caminho.The probe checks for an HTTP 200 response from this path. Ele pode ser o caminho raiz (“/”) ou um ponto de extremidade de monitoramento de integridade que implementa lógica personalizada para verificar a integridade do aplicativo.This can be the root path ("/"), or a health-monitoring endpoint that implements some custom logic to check the health of the application. O ponto de extremidade deve permitir solicitações HTTP anônimas.The endpoint must allow anonymous HTTP requests.
  • A investigação é enviada de um endereço IP conhecido, 168.63.129.16.The probe is sent from a known IP address, 168.63.129.16. Verifique se o tráfego de ou para esse endereço IP não é bloqueado por quaisquer políticas de firewall ou regras de NSG (Grupo de Segurança de Rede).Make sure you don't block traffic to or from this IP address in any firewall policies or network security group (NSG) rules.
  • Use os logs de investigação de integridade para exibir o status das investigações de integridade.Use health probe logs to view the status of the health probes. Habilite o registro em log no Portal do Azure para cada balanceador de carga.Enable logging in the Azure portal for each load balancer. Os logs são gravados no Armazenamento de Blobs do Azure.Logs are written to Azure Blob storage. Os logs de mostram como muitas VMs no back-end não estão recebendo o tráfego de rede devido a respostas de investigação com falha.The logs show how many VMs on the back end are not receiving network traffic due to failed probe responses.

Considerações sobre capacidade de gerenciamentoManageability considerations

Com várias VMs, é importante automatizar os processos para que eles sejam confiáveis e reproduzíveis.With multiple VMs, it is important to automate processes so they are reliable and repeatable. Você pode usar a Automação do Azure para automatizar a implantação, aplicação de patches do sistema operacional e outras tarefas.You can use Azure Automation to automate deployment, OS patching, and other tasks. A Automação do Azure é um serviço de automação baseado no PowerShell que pode ser usado para isso.Azure Automation is an automation service based on PowerShell that can be used for this. Scripts de automação de exemplo estão disponíveis a partir da Galeria de runbook.Example automation scripts are available from the Runbook Gallery.

Considerações de segurançaSecurity considerations

Redes virtuais são um limite de isolamento de tráfego no Azure.Virtual networks are a traffic isolation boundary in Azure. As VMs em uma VNet não podem se comunicar diretamente com VMs em uma VNet diferente.VMs in one VNet cannot communicate directly with VMs in a different VNet. As VMs na mesma VNet podem se comunicar, a menos que você crie NSGs (Grupos de Segurança de Rede) para restringir o tráfego.VMs within the same VNet can communicate, unless you create network security groups (NSGs) to restrict traffic. Para obter mais informações, consulte Serviços em nuvem da Microsoft e segurança de rede.For more information, see Microsoft cloud services and network security.

Para tráfego de entrada da Internet, as regras do balanceador de carga definem qual tráfego pode alcançar o back-end.For incoming Internet traffic, the load balancer rules define which traffic can reach the back end. No entanto, as regras do balanceador de carga não dão suporte a listas de IP de confiança, por isso se você desejar adicionar determinados endereços IP públicos a uma lista de confiança, acrescente um NSG à sub-rede.However, load balancer rules don't support IP safe lists, so if you want to add certain public IP addresses to a safe list, add an NSG to the subnet.

Implantar a soluçãoDeploy the solution

Uma implantação para essa arquitetura está disponível no GitHub.A deployment for this architecture is available on GitHub. Ela implanta o seguinte:It deploys the following:

  • Uma rede virtual com uma única sub-rede chamada Web que contém as VMs.A virtual network with a single subnet named web that contains the VMs.
  • Um conjunto de dimensionamento de VM que contém VMs que executam a versão mais recente do Windows Server 2016 Datacenter Edition.A VM scale set that contains VMs running the latest version of Windows Server 2016 Datacenter Edition. O dimensionamento automático está habilitado.Autoscale is enabled.
  • Um balanceador de carga localizado na frente do conjunto de dimensionamento da VM.A load balancer that sits in front of the VM scale set.
  • Um NSG com duas regras de entrada que permite tráfego HTTP para o conjunto de dimensionamento da VM.An NSG with incoming rules that allow HTTP traffic to the VM scale set.

Pré-requisitosPrerequisites

Antes de implantar a arquitetura de referência para sua própria assinatura, você deve executar as etapas a seguir.Before you can deploy the reference architecture to your own subscription, you must perform the following steps.

  1. Clone, crie fork ou baixe o arquivo zip para as arquiteturas de referência AzureCAT no repositório GitHub.Clone, fork, or download the zip file for the AzureCAT reference architectures GitHub repository.

  2. Verifique se a CLI do Azure 2.0 está instalada no computador.Make sure you have the Azure CLI 2.0 installed on your computer. Para obter instruções de instalação da CLI, consulte Instalar a CLI 2.0 do Azure.For CLI installation instructions, see Install Azure CLI 2.0.

  3. Instale os pacote npm dos Blocos de construção do Azure.Install the Azure building blocks npm package.

  4. Em um prompt de comando, bash prompt ou prompt do PowerShell, faça logon na sua conta do Azure usando um dos comandos abaixo e siga os prompts.From a command prompt, bash prompt, or PowerShell prompt, login to your Azure account by using one of the commands below, and follow the prompts.

    az login
    

Implantar a solução usando azbbDeploy the solution using azbb

Para implantar a carga de trabalho de VM única de exemplo, siga estas etapas:To deploy the sample single VM workload, follow these steps:

  1. Navegue até a pasta virtual-machines\multi-vm\parameters\windows do repositório que você baixou na etapa de pré-requisitos acima.Navigate to the virtual-machines\multi-vm\parameters\windows folder for the repository you downloaded in the pre-requisites step above.

  2. Abra o arquivo multi-vm-v2.json e insira um nome de usuário e senha entre aspas, conforme mostrado abaixo e salve o arquivo.Open the multi-vm-v2.json file and enter a username and password between the quotes, as shown below, then save the file.

    "adminUsername": "",
    "adminPassword": "",
    
  3. Execute azbb para implantar as VMs conforme mostrado abaixo.Run azbb to deploy the VMs as shown below.

    azbb -s <subscription_id> -g <resource_group_name> -l <location> -p multi-vm-v2.json --deploy
    

Para obter mais informações sobre como implantar essa arquitetura de referência de exemplo, visite nosso Repositório GitHub.For more information on deploying this sample reference architecture, visit our GitHub repository.