Tutorial: Fazer o balanceamento de carga de máquinas virtuais do Windows no Azure para criar uma aplicação de elevada disponibilidade com o Azure PowerShell
Aplica-se a: ✔️ Conjuntos de dimensionamento uniformes de VMs ✔️ do Windows
O balanceamento de carga fornece um nível mais elevado de disponibilidade ao propagar os pedidos recebidos por várias máquinas virtuais. Neste tutorial, vai conhecer os diferentes componentes do balanceador de carga do Azure que distribuem o tráfego e oferecem elevada disponibilidade. Saiba como:
- Criar um balanceador de carga do Azure
- Criar uma sonda de estado de funcionamento do balanceador de carga
- Criar regras de tráfego do balanceador de carga
- Utilizar a extensão de Script Personalizado para criar um site do IIS básico
- Criar máquinas virtuais e anexar a um balanceador de carga
- Ver um balanceador de carga em ação
- Adicionar e remover VMs de um balanceador de carga
Descrição geral do balanceador de carga do Azure
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. 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.
Pode definir uma configuração de IP de front-end com um ou mais endereços IP públicos. Esta configuração de IP de front-end permite ao balanceador de carga e às aplicações estarem acessíveis através da Internet.
As máquinas virtuais ligam a um balanceador de carga através da respetiva placa de interface de rede virtual (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.
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.
Iniciar o Azure Cloud Shell
O Azure Cloud Shell é um shell interativo gratuito que pode utilizar para executar os passos neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.
Para abrir o Cloud Shell, basta selecionar Experimente no canto superior direito de um bloco de código. Também pode iniciar o Cloud Shell num separador do browser separado ao aceder a https://shell.azure.com/powershell. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e prima Enter para executá-lo.
Criar um balanceador de carga do Azure
Esta secção descreve como pode criar e configurar cada componente do balanceador de carga. Antes de poder criar o balanceador de carga, crie um grupo de recursos com New-AzResourceGroup. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroupLoadBalancer na localização eastUS :
New-AzResourceGroup `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Location "EastUS"
Crie um endereço IP público
Para aceder à sua aplicação na Internet, precisa de um endereço IP público para o balanceador de carga. Crie um endereço IP público com New-AzPublicIpAddress. O exemplo seguinte cria um endereço IP público designado myPublicIP no grupo de recursos myResourceGroupLoadBalancer:
$publicIP = New-AzPublicIpAddress `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Location "EastUS" `
-AllocationMethod "Static" `
-Name "myPublicIP"
Criar um balanceador de carga
Crie um conjunto IP de front-end com New-AzLoadBalancerFrontendIpConfig. O exemplo seguinte cria um conjunto IP de front-end designado myFrontEndPool e anexa o endereço myPublicIP:
$frontendIP = New-AzLoadBalancerFrontendIpConfig `
-Name "myFrontEndPool" `
-PublicIpAddress $publicIP
Crie um conjunto de endereços de back-end com New-AzLoadBalancerBackendAddressPoolConfig. As VMs são anexadas a este conjunto de back-end nos restantes passos. O exemplo seguinte cria um conjunto de endereços de back-end com o nome myBackEndPool:
$backendPool = New-AzLoadBalancerBackendAddressPoolConfig `
-Name "myBackEndPool"
Agora, crie o balanceador de carga com New-AzLoadBalancer. O exemplo seguinte cria um balanceador de carga designado myLoadBalancer com os conjuntos de IP de front-end e back-end criados nos passos anteriores:
$lb = New-AzLoadBalancer `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name "myLoadBalancer" `
-Location "EastUS" `
-FrontendIpConfiguration $frontendIP `
-BackendAddressPool $backendPool
Criar uma sonda de estado de funcionamento
Para permitir ao balanceador de carga monitorizar o estado da aplicação, pode utilizar uma sonda de estado de funcionamento. 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. Por predefinição, uma VM é removida da distribuição do balanceador de carga após duas falhas consecutivas em intervalos de 15 segundos. 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.
O exemplo seguinte cria uma sonda TCP. Também pode criar sondas HTTP personalizadas para obter verificações de estado de funcionamento mais detalhadas. Quando utilizar uma sonda HTTP personalizada, tem de criar a página de verificação de estado de funcionamento, tal como healthcheck.aspx. A sonda tem de devolver uma resposta HTTP 200 OK para o balanceador de carga manter o anfitrião na rotação.
Para criar uma sonda de estado de funcionamento TCP, utilize Add-AzLoadBalancerProbeConfig. O exemplo seguinte cria uma sonda de estado de funcionamento designado myHealthProbe que monitoriza cada VM no TCP porta 80:
Add-AzLoadBalancerProbeConfig `
-Name "myHealthProbe" `
-LoadBalancer $lb `
-Protocol tcp `
-Port 80 `
-IntervalInSeconds 15 `
-ProbeCount 2
Para aplicar a sonda de estado de funcionamento, atualize o balanceador de carga com Set-AzLoadBalancer:
Set-AzLoadBalancer -LoadBalancer $lb
Criar uma regra de balanceador de carga
É utilizada uma regra de balanceador de carga para definir a forma como o tráfego é distribuído pelas 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. 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.
Crie uma regra de balanceador de carga com Add-AzLoadBalancerRuleConfig. O exemplo seguinte cria uma regra de balanceador de carga designada myLoadBalancerRule e faz o balanceamento de carga do tráfego no TCP porta 80:
$probe = Get-AzLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"
Add-AzLoadBalancerRuleConfig `
-Name "myLoadBalancerRule" `
-LoadBalancer $lb `
-FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
-BackendAddressPool $lb.BackendAddressPools[0] `
-Protocol Tcp `
-FrontendPort 80 `
-BackendPort 80 `
-Probe $probe
Atualize o balanceador de carga com Set-AzLoadBalancer:
Set-AzLoadBalancer -LoadBalancer $lb
Configurar uma rede virtual
Antes de implementar algumas VMs e testar o balanceador, crie os recursos de rede virtual. Para obter mais informações sobre redes virtuais, veja o tutorial Gerir Redes Virtuais do Azure.
Criar recursos de rede
Crie uma rede virtual com New-AzVirtualNetwork. O exemplo seguinte cria uma rede virtual designada myVnet com mySubnet:
# Create subnet config
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name "mySubnet" `
-AddressPrefix 192.168.1.0/24
# Create the virtual network
$vnet = New-AzVirtualNetwork `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Location "EastUS" `
-Name "myVnet" `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
Os NICs virtuais são criados com New-AzNetworkInterface. O exemplo seguinte cria três NICs virtuais. (Uma NIC virtual para cada VM que criar para a aplicação nos passos seguintes). Pode criar NICs virtuais e VMs adicionais em qualquer altura e adicioná-las ao balanceador de carga:
for ($i=1; $i -le 3; $i++)
{
New-AzNetworkInterface `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name myVM$i `
-Location "EastUS" `
-Subnet $vnet.Subnets[0] `
-LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}
Criar máquinas virtuais
Para melhorar a elevada disponibilidade da aplicação, coloque as VMs num conjunto de disponibilidade.
Crie um conjunto de disponibilidade com New-AzAvailabilitySet. O exemplo seguinte cria um conjunto de disponibilidade com o nome myAvailabilitySet:
$availabilitySet = New-AzAvailabilitySet `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name "myAvailabilitySet" `
-Location "EastUS" `
-Sku aligned `
-PlatformFaultDomainCount 2 `
-PlatformUpdateDomainCount 2
Defina um nome de utilizador e palavra-passe para as VMs com Get-Credential:
$cred = Get-Credential
Agora pode criar as VMs com New-AzVM. O exemplo seguinte cria três VMs e os componentes de rede virtual necessários, caso ainda não existam:
for ($i=1; $i -le 3; $i++)
{
New-AzVm `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name "myVM$i" `
-Location "East US" `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-SecurityGroupName "myNetworkSecurityGroup" `
-OpenPorts 80 `
-AvailabilitySetName "myAvailabilitySet" `
-Credential $cred `
-AsJob
}
O parâmetro -AsJob
cria a VM como uma tarefa em segundo plano, para que os pedidos do PowerShell voltem para si. Pode ver os detalhes das tarefas em segundo plano com o cmdlet Job
. Demora alguns minutos para criar e configurar as três VMs.
Instalar o IIS com a Extensão de Script Personalizado
Num tutorial anterior sobre Como personalizar uma máquina virtual do Windows, aprendeu a automatizar a personalização de VMs com a Extensão de Script Personalizado para Windows. Pode utilizar a mesma abordagem para instalar e configurar o IIS nas suas VMs.
Utilize Set-AzVMExtension para instalar a Extensão de Script Personalizado. A extensão executa o powershell Add-WindowsFeature Web-Server
para instalar o servidor Web IIS e, em seguida, atualiza a página Default.htm para mostrar o nome do anfitrião da VM:
for ($i=1; $i -le 3; $i++)
{
Set-AzVMExtension `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-ExtensionName "IIS" `
-VMName myVM$i `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.8 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
-Location EastUS
}
Testar o balanceador de carga
Obtenha o endereço IP público do balanceador de carga com Get-AzPublicIPAddress. O exemplo seguinte obtém o endereço IP para myPublicIP criado anteriormente:
Get-AzPublicIPAddress `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name "myPublicIP" | select IpAddress
Em seguida, pode introduzir o endereço IP público num browser. O site é apresentado, incluindo o nome do anfitrião da VM para a qual o balanceador de carga distribuiu tráfego, como no seguinte exemplo:
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.
Adicionar e remover VMs
Pode ter de realizar a manutenção nas VMs que estão a executar a aplicação, como instalar atualizações do SO. Para lidar com maior volume de tráfego para a aplicação, pode ter de adicionar mais VMs. Esta secção mostra como adicionar ou remover uma VM do balanceador de carga.
Remover uma VM do balanceador de carga
Obtenha a placa de interface de rede com Get-AzNetworkInterface e, em seguida, defina a propriedade LoadBalancerBackendAddressPools da NIC virtual para $null. Por fim, atualize a NIC virtual.:
$nic = Get-AzNetworkInterface `
-ResourceGroupName "myResourceGroupLoadBalancer" `
-Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzNetworkInterface -NetworkInterface $nic
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. Pode agora efetuar a manutenção da VM, como instalar atualizações do SO ou reiniciar.
Adicionar uma VM ao balanceador de carga
Depois de realizar a manutenção da VM ou se precisar de expandir a capacidade, defina a propriedade LoadBalancerBackendAddressPools da NIC virtual para o BackendAddressPool a partir de Get-AzLoadBalancer:
Obtenha o balanceador de carga:
$lb = Get-AzLoadBalancer `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myLoadBalancer
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzNetworkInterface -NetworkInterface $nic
Passos seguintes
Neste tutorial, criou um balanceador de carga e anexou VMs ao mesmo. Aprendeu a:
- Criar um balanceador de carga do Azure
- Criar uma sonda de estado de funcionamento do balanceador de carga
- Criar regras de tráfego do balanceador de carga
- Utilizar a extensão de Script Personalizado para criar um site do IIS básico
- Criar máquinas virtuais e anexar a um balanceador de carga
- Ver um balanceador de carga em ação
- Adicionar e remover VMs de um balanceador de carga
Avance para o tutorial seguinte para aprender a gerir a rede de VMs.