Tutorial: Balanceamento de carga de máquinas virtuais do Linux no Azure para criar uma aplicação de elevada disponibilidade com a CLI do AzureTutorial: Load balance Linux virtual machines in Azure to create a highly available application with the Azure CLI

O balanceamento de carga oferece um nível mais elevado de disponibilidade ao propagar os pedidos recebidos por várias máquinas virtuais.Load balancing provides a higher level of availability by spreading incoming requests across multiple virtual machines. Neste tutorial, vai conhecer os diferentes componentes do balanceador de carga do Azure que distribuem o tráfego e oferecem elevada disponibilidade.In this tutorial, you learn about the different components of the Azure load balancer that distribute traffic and provide high availability. Saiba como:You learn how to:

  • Criar um balanceador de carga do AzureCreate an Azure load balancer
  • Criar uma sonda de estado de funcionamento do balanceador de cargaCreate a load balancer health probe
  • Criar regras de tráfego do balanceador de cargaCreate load balancer traffic rules
  • Utilizar a inicialização da cloud para criar uma aplicação Node.js básicaUse cloud-init to create a basic Node.js app
  • Criar máquinas virtuais e anexar a um balanceador de cargaCreate virtual machines and attach to a load balancer
  • Ver um balanceador de carga em açãoView a load balancer in action
  • Adicionar e remover VMs de um balanceador de cargaAdd and remove VMs from a load balancer

Utilizar o Azure Cloud ShellUse Azure Cloud Shell

O Azure hospeda Azure Cloud Shell, um ambiente de shell interativo que você pode usar por meio de seu navegador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell permite que você use bash o PowerShell ou o para trabalhar com os serviços do Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Você pode usar os comandos pré-instalados Cloud Shell para executar o código neste artigo sem precisar instalar nada em seu ambiente local.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Para iniciar o Azure Cloud Shell:To launch Azure Cloud Shell:

OpçãoOption Exemplo/linkExample/Link
Selecione Experimentar no canto superior direito de um bloco de código.Select Try It in the upper-right corner of a code block. A seleção de try não copia automaticamente o código para Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Exemplo de teste para Azure Cloud Shell
Vá para https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir Cloud Shell em seu navegador.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell em uma nova janelaLaunch Cloud Shell in a new window
Selecione o botão Cloud Shell na barra de menus superior direita na portal do Azure.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botão Cloud Shell no portal do Azure

Para executar o código neste artigo em Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Abra o Cloud Shell.Open Cloud Shell.
  2. Selecione o botão copiar em um bloco de código para copiar o código.Select the Copy button on a code block to copy the code.
  3. Cole o código na sessão de Cloud shell com Ctrl+Shift+v no Windows e Linux, ou cmd+Shift+v no MacOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Pressione Enter para executar o código.Press Enter to run the code.

Se optar por instalar e utilizar a CLI localmente, este tutorial requer que execute uma versão da CLI do Azure que seja a 2.0.30 ou posterior.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Instalar a CLI do Azure.If you need to install or upgrade, see Install Azure CLI.

Descrição geral do balanceador de carga do AzureAzure load balancer overview

Um balanceador de carga do Azure é um balanceador de carga de Camada 4 (TCP, UDP) que fornece elevada disponibilidade ao distribuir o tráfego de entrada entre VMs em bom estado de funcionamento.An Azure load balancer is a Layer-4 (TCP, UDP) load balancer that provides high availability by distributing incoming traffic among healthy VMs. Uma sonda de estado de funcionamento do balanceador de carga monitoriza uma porta especificada em cada VM e apenas distribui o tráfego para uma VM operacional.A load balancer health probe monitors a given port on each VM and only distributes traffic to an operational VM.

Pode definir uma configuração de IP de front-end com um ou mais endereços IP públicos.You define a front-end IP configuration that contains one or more public IP addresses. Esta configuração de IP de front-end permite ao balanceador de carga e às aplicações estarem acessíveis através da Internet.This front-end IP configuration allows your load balancer and applications to be accessible over the Internet.

As máquinas virtuais ligam a um balanceador de carga através da respetiva placa de interface de rede virtual (NIC).Virtual machines connect to a load balancer using their virtual network interface card (NIC). Para distribuir o tráfego pelas VMs, um conjunto de endereços de back-end contém os endereços IP das placas virtuais (NICs) ligadas ao balanceador de carga.To distribute traffic to the VMs, a back-end address pool contains the IP addresses of the virtual (NICs) connected to the load balancer.

Para controlar o fluxo de tráfego, pode definir regras de balanceador de carga para portas específicas e protocolos que mapeiam para as suas VMs.To control the flow of traffic, you define load balancer rules for specific ports and protocols that map to your VMs.

Se seguiu o tutorial anterior para criar um conjunto de dimensionamento de máquinas virtuais, foi criado um balanceador de carga.If you followed the previous tutorial to create a virtual machine scale set, a load balancer was created for you. Todos estes componentes foram configurados como parte do conjunto de dimensionamento.All these components were configured for you as part of the scale set.

Criar um balanceador de carga do AzureCreate Azure load balancer

Esta secção descreve como pode criar e configurar cada componente do balanceador de carga.This section details how you can create and configure each component of the load balancer. Antes de poder criar o balanceador de carga, tem de criar um grupo de recursos com az group create.Before you can create your load balancer, create a resource group with az group create. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroupLoadBalancer na localização eastus:The following example creates a resource group named myResourceGroupLoadBalancer in the eastus location:

az group create --name myResourceGroupLoadBalancer --location eastus

Crie um endereço IP públicoCreate a public IP address

Para aceder à sua aplicação na Internet, precisa de um endereço IP público para o balanceador de carga.To access your app on the Internet, you need a public IP address for the load balancer. Criar um endereço IP público com az network public-ip create.Create a public IP address with az network public-ip create. O exemplo seguinte cria um endereço IP público designado myPublicIP no grupo de recursos myResourceGroupLoadBalancer:The following example creates a public IP address named myPublicIP in the myResourceGroupLoadBalancer resource group:

az network public-ip create \
    --resource-group myResourceGroupLoadBalancer \
    --name myPublicIP

Criar um balanceador de cargaCreate a load balancer

Crie um balanceador de carga com az network lb create.Create a load balancer with az network lb create. O exemplo seguinte cria um balanceador de carga com o nome myLoadBalancer e atribui o endereço myPublicIP à configuração de IP de front-end:The following example creates a load balancer named myLoadBalancer and assigns the myPublicIP address to the front-end IP configuration:

az network lb create \
    --resource-group myResourceGroupLoadBalancer \
    --name myLoadBalancer \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --public-ip-address myPublicIP

Criar uma sonda de estado de funcionamentoCreate a health probe

Para permitir ao balanceador de carga monitorizar o estado da aplicação, pode utilizar uma sonda de estado de funcionamento.To allow the load balancer to monitor the status of your app, you use a health probe. A sonda de estado de funcionamento adiciona ou remove dinamicamente VMs da rotação do balanceador de carga com base na respetiva resposta às verificações de estado de funcionamento.The health probe dynamically adds or removes VMs from the load balancer rotation based on their response to health checks. Por predefinição, uma VM é removida da distribuição do balanceador de carga após duas falhas consecutivas em intervalos de 15 segundos.By default, a VM is removed from the load balancer distribution after two consecutive failures at 15-second intervals. Pode criar uma sonda de estado de funcionamento com base num protocolo ou numa página de verificação de estado de funcionamento específica da aplicação.You create a health probe based on a protocol or a specific health check page for your app.

O exemplo seguinte cria uma sonda TCP.The following example creates a TCP probe. Também pode criar sondas HTTP personalizadas para obter verificações de estado de funcionamento mais detalhadas.You can also create custom HTTP probes for more fine grained health checks. Quando utilizar uma sonda HTTP personalizada, tem de criar a página de verificação de estado de funcionamento, tal como healthcheck.js.When using a custom HTTP probe, you must create the health check page, such as healthcheck.js. A sonda tem de devolver uma resposta HTTP 200 OK para o balanceador de carga manter o anfitrião na rotação.The probe must return an HTTP 200 OK response for the load balancer to keep the host in rotation.

Para criar uma sonda de estado de funcionamento TCP, utilize az network lb probe create.To create a TCP health probe, you use az network lb probe create. O exemplo seguinte cria uma sonda de estado de funcionamento com o nome myHealthProbe:The following example creates a health probe named myHealthProbe:

az network lb probe create \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myHealthProbe \
    --protocol tcp \
    --port 80

Criar uma regra de balanceador de cargaCreate a load balancer rule

É utilizada uma regra de balanceador de carga para definir a forma como o tráfego é distribuído pelas VMs.A load balancer rule is used to define how traffic is distributed to the VMs. Pode definir a configuração de IP de front-end do tráfego de entrada e o conjunto de IPs de back-end para receber o tráfego, juntamente com a porta de origem e de destino necessárias.You define the front-end IP configuration for the incoming traffic and the back-end IP pool to receive the traffic, along with the required source and destination port. Para garantir que apenas as VMs em bom estado de funcionamento recebem o tráfego, também pode definir a sonda de estado de funcionamento a utilizar.To make sure only healthy VMs receive traffic, you also define the health probe to use.

Crie uma regra de balanceador de carga com az network lb rule create.Create a load balancer rule with az network lb rule create. O exemplo seguinte cria uma regra com o nome myLoadBalancerRule, utiliza a sonda de estado de funcionamento myHealthProbe e faz o balanceamento de carga do tráfego na porta 80:The following example creates a rule named myLoadBalancerRule, uses the myHealthProbe health probe, and balances traffic on port 80:

az network lb rule create \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myLoadBalancerRule \
    --protocol tcp \
    --frontend-port 80 \
    --backend-port 80 \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --probe-name myHealthProbe

Configurar uma rede virtualConfigure virtual network

Antes de implementar algumas VMs e testar o balanceador, crie os recursos de rede virtual.Before you deploy some VMs and can test your balancer, create the supporting virtual network resources. Para obter mais informações sobre redes virtuais, veja o tutorial Gerir Redes Virtuais do Azure.For more information about virtual networks, see the Manage Azure Virtual Networks tutorial.

Criar recursos de redeCreate network resources

Crie uma rede virtual com az network vnet create.Create a virtual network with az network vnet create. O exemplo seguinte cria uma rede virtual com o nome myVnet com uma sub-rede denominada mySubnet:The following example creates a virtual network named myVnet with a subnet named mySubnet:

az network vnet create \
    --resource-group myResourceGroupLoadBalancer \
    --name myVnet \
    --subnet-name mySubnet

Para adicionar um grupo de segurança de rede, utilize az network nsg create.To add a network security group, you use az network nsg create. O exemplo seguinte cria um grupo de segurança de rede com o nome myNetworkSecurityGroup:The following example creates a network security group named myNetworkSecurityGroup:

az network nsg create \
    --resource-group myResourceGroupLoadBalancer \
    --name myNetworkSecurityGroup

Crie uma regra de grupo de segurança de rede com az network nsg rule create.Create a network security group rule with az network nsg rule create. O exemplo seguinte cria uma regra de grupo de segurança de rede com o nome myNetworkSecurityGroupRule:The following example creates a network security group rule named myNetworkSecurityGroupRule:

az network nsg rule create \
    --resource-group myResourceGroupLoadBalancer \
    --nsg-name myNetworkSecurityGroup \
    --name myNetworkSecurityGroupRule \
    --priority 1001 \
    --protocol tcp \
    --destination-port-range 80

As NICs virtuais são criadas com az network nic create.Virtual NICs are created with az network nic create. O exemplo seguinte cria três NICs virtuais.The following example creates three virtual NICs. (Uma NIC virtual para cada VM que criar para a aplicação nos passos seguintes).(One virtual NIC for each VM you create for your app in the following steps). Pode criar NICs virtuais e VMs adicionais em qualquer altura e adicioná-las ao balanceador de carga:You can create additional virtual NICs and VMs at any time and add them to the load balancer:

for i in `seq 1 3`; do
    az network nic create \
        --resource-group myResourceGroupLoadBalancer \
        --name myNic$i \
        --vnet-name myVnet \
        --subnet mySubnet \
        --network-security-group myNetworkSecurityGroup \
        --lb-name myLoadBalancer \
        --lb-address-pools myBackEndPool
done

Quando as três NICs virtuais estiverem criadas, avance para o passo seguinteWhen all three virtual NICs are created, continue on to the next step

Criar máquinas virtuaisCreate virtual machines

Criar configuração de inicialização da cloudCreate cloud-init config

Num tutorial anterior sobre Como personalizar uma máquina virtual do Linux no primeiro arranque, aprendeu a automatizar a personalização de VMs com inicialização da cloud.In a previous tutorial on How to customize a Linux virtual machine on first boot, you learned how to automate VM customization with cloud-init. Pode utilizar o mesmo ficheiro de configuração de inicialização da cloud para instalar o NGINX e executar uma aplicação Node.js "Hello World" simples no próximo passo.You can use the same cloud-init configuration file to install NGINX and run a simple 'Hello World' Node.js app in the next step. Para ver o balanceador de carga em ação, no final do tutorial, pode aceder a esta aplicação simples num browser.To see the load balancer in action, at the end of the tutorial you access this simple app in a web browser.

Na shell atual, crie um ficheiro com o nome cloud-init.txt e cole a seguinte configuração.In your current shell, create a file named cloud-init.txt and paste the following configuration. Por exemplo, crie o ficheiro no Cloud Shell, não no seu computador local.For example, create the file in the Cloud Shell not on your local machine. Introduza sensible-editor cloud-init.txt para criar o ficheiro e ver uma lista dos editores disponíveis.Enter sensible-editor cloud-init.txt to create the file and see a list of available editors. Certifique-se de que o ficheiro de inicialização da cloud é copiado corretamente, especialmente a primeira linha:Make sure that the whole cloud-init file is copied correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
  - path: /home/azureuser/myapp/index.js
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Criar máquinas virtuaisCreate virtual machines

Para melhorar a elevada disponibilidade da aplicação, coloque as VMs num conjunto de disponibilidade.To improve the high availability of your app, place your VMs in an availability set. Para obter mais informações sobre conjuntos de disponibilidade, veja o tutorial anterior Como criar máquinas virtuais de elevada disponibilidade.For more information about availability sets, see the previous How to create highly available virtual machines tutorial.

Crie um conjunto de disponibilidade com az vm availability-set create.Create an availability set with az vm availability-set create. O exemplo seguinte cria um conjunto de disponibilidade com o nome myAvailabilitySet:The following example creates an availability set named myAvailabilitySet:

az vm availability-set create \
    --resource-group myResourceGroupLoadBalancer \
    --name myAvailabilitySet

Agora, pode criar as VMs com az vm create.Now you can create the VMs with az vm create. O exemplo seguinte cria três VMs e gera chaves SSH, caso não existam:The following example creates three VMs and generates SSH keys if they do not already exist:

for i in `seq 1 3`; do
    az vm create \
        --resource-group myResourceGroupLoadBalancer \
        --name myVM$i \
        --availability-set myAvailabilitySet \
        --nics myNic$i \
        --image UbuntuLTS \
        --admin-username azureuser \
        --generate-ssh-keys \
        --custom-data cloud-init.txt \
        --no-wait
done

Existem tarefas em segundo plano que continuam a ser executadas após a CLI do Azure devolver o utilizador à linha de comandos.There are background tasks that continue to run after the Azure CLI returns you to the prompt. O parâmetro --no-wait não aguarda a conclusão de todas as tarefas.The --no-wait parameter does not wait for all the tasks to complete. Pode demorar mais alguns minutos antes de poder aceder à aplicação.It may be another couple of minutes before you can access the app. A sonda de estado de funcionamento do balanceador de carga deteta automaticamente quando a aplicação está em execução em cada VM.The load balancer health probe automatically detects when the app is running on each VM. Assim que a aplicação estiver em execução, a regra de balanceador de carga começa a distribuir o tráfego.Once the app is running, the load balancer rule starts to distribute traffic.

Testar o balanceador de cargaTest load balancer

Pode obter o endereço IP público do balanceador de carga com az network public-ip show.Obtain the public IP address of your load balancer with az network public-ip show. O exemplo seguinte obtém o endereço IP para myPublicIP criado anteriormente:The following example obtains the IP address for myPublicIP created earlier:

az network public-ip show \
    --resource-group myResourceGroupLoadBalancer \
    --name myPublicIP \
    --query [ipAddress] \
    --output tsv

Em seguida, pode introduzir o endereço IP público num browser.You can then enter the public IP address in to a web browser. Não se esqueça de que demora alguns minutos até as VMs estarem prontas antes de o balanceador de carga começar a distribuir o tráfego pelas mesmas.Remember - it takes a few minutes for the VMs to be ready before the load balancer starts to distribute traffic to them. A aplicação é apresentada, incluindo o nome do anfitrião da VM para a qual o balanceador de carga distribuiu tráfego, como no seguinte exemplo:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to as in the following example:

Executar aplicação Node.js

Para ver o balanceador de carga a distribuir tráfego pelas três VMs que estão a executar a aplicação, pode forçar a atualização do browser.To see the load balancer distribute traffic across all three VMs running your app, you can force-refresh your web browser.

Adicionar e remover VMsAdd and remove VMs

Pode ter de realizar a manutenção nas VMs que estão a executar a aplicação, como instalar atualizações do SO.You may need to perform maintenance on the VMs running your app, such as installing OS updates. Para lidar com maior volume de tráfego para a aplicação, pode ter de adicionar mais VMs.To deal with increased traffic to your app, you may need to add additional VMs. Esta secção mostra como adicionar ou remover uma VM do balanceador de carga.This section shows you how to remove or add a VM from the load balancer.

Remover uma VM do balanceador de cargaRemove a VM from the load balancer

Pode remover uma VM do conjunto de endereços de back-end com az network nic ip-config address-pool remove.You can remove a VM from the backend address pool with az network nic ip-config address-pool remove. O exemplo seguinte remove a NIC virtual para myVM2 de myLoadBalancer:The following example removes the virtual NIC for myVM2 from myLoadBalancer:

az network nic ip-config address-pool remove \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool 

Para ver o balanceador de carga a distribuir tráfego pelas duas VMs restantes que estão a executar a aplicação, pode forçar a atualização do browser.To see the load balancer distribute traffic across the remaining two VMs running your app you can force-refresh your web browser. Pode agora efetuar a manutenção da VM, como instalar atualizações do SO ou reiniciar.You can now perform maintenance on the VM, such as installing OS updates or performing a VM reboot.

Para ver uma lista de VMs com NICs virtuais ligadas ao balanceador de carga, utilize az network lb address-pool show.To view a list of VMs with virtual NICs connected to the load balancer, use az network lb address-pool show. Consulte e filtre pelo ID da NIC virtual da seguinte forma:Query and filter on the ID of the virtual NIC as follows:

az network lb address-pool show \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myBackEndPool \
    --query backendIpConfigurations \
    --output tsv | cut -f4

O resultado é semelhante ao exemplo seguinte, que mostra que a NIC virtual para a VM 2 já não faz parte do conjunto de endereços de back-end:The output is similar to the following example, which shows that the virtual NIC for VM 2 is no longer part of the backend address pool:

/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic1/ipConfigurations/ipconfig1
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic3/ipConfigurations/ipconfig1

Adicionar uma VM ao balanceador de cargaAdd a VM to the load balancer

Depois de efetuar a manutenção da VM, ou se tiver de expandir a capacidade, pode adicionar uma VM ao conjunto de endereços de back-end com az network nic ip-config address-pool add.After performing VM maintenance, or if you need to expand capacity, you can add a VM to the backend address pool with az network nic ip-config address-pool add. O exemplo seguinte adiciona a NIC virtual para myVM2 a myLoadBalancer:The following example adds the virtual NIC for myVM2 to myLoadBalancer:

az network nic ip-config address-pool add \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool

Para verificar se a NIC virtual está ligada ao conjunto de endereços de back-end, utilize novamente az network lb address-pool show do passo anterior.To verify that the virtual NIC is connected to the backend address pool, use az network lb address-pool show again from the preceding step.

Passos SeguintesNext steps

Neste tutorial, criou um balanceador de carga e anexou VMs ao mesmo.In this tutorial, you created a load balancer and attached VMs to it. Aprendeu a:You learned how to:

  • Criar um balanceador de carga do AzureCreate an Azure load balancer
  • Criar uma sonda de estado de funcionamento do balanceador de cargaCreate a load balancer health probe
  • Criar regras de tráfego do balanceador de cargaCreate load balancer traffic rules
  • Utilizar a inicialização da cloud para criar uma aplicação Node.js básicaUse cloud-init to create a basic Node.js app
  • Criar máquinas virtuais e anexar a um balanceador de cargaCreate virtual machines and attach to a load balancer
  • Ver um balanceador de carga em açãoView a load balancer in action
  • Adicionar e remover VMs de um balanceador de cargaAdd and remove VMs from a load balancer

Avance para o próximo tutorial para saber mais sobre os componentes de rede virtual do Azure.Advance to the next tutorial to learn more about Azure virtual network components.