Load balancing refere-se à distribuição uniforme de carga (tráfego de rede recebido) em um grupo de recursos ou servidores de back-end.
O Azure Load Balancer opera na camada quatro do modelo Open Systems Interconnection (OSI). É o ponto de contato único para os clientes. O Load Balancer distribui os fluxos de entrada que chegam ao front end do balanceador de carga para executar as instâncias do conjunto. Esses fluxos estão de acordo com as regras configuradas de balanceamento de carga e análises de integridade. As instâncias do pool de back-end podem ser Máquinas Virtuais do Azure ou instâncias em um conjunto de dimensionamento de máquinas virtuais.
Um public load balancer pode fornecer conexões de saída para máquinas virtuais (VMs) dentro da sua rede virtual. Essas conexões são realizadas traduzindo seus endereços IP privados em endereços IP públicos. Os balanceadores de carga públicos são usados para equilibrar o tráfego da Internet nas suas VMs.
Um internal (or private) load balancer é usado onde os IPs privados são necessários apenas no front-end. Os balanceadores de carga internos são usados para balancear o tráfego dentro de uma rede virtual. Um front-end do balanceador de carga pode ser acessado a partir de uma rede local em um cenário híbrido.
A configuração para o nosso cenário é a seguinte:
- Duas máquinas virtuais nomeadas VM-IIS-01 e VM-IIS-02, ambas as máquinas com IIS.
- Um public load balancer
Criar os servidores Web
01. – Vamos criar um resource group
New-AzResourceGroup -Name ‘RG-LoadBalancer’ -Location ‘EastUS’
Podemos observar a execução do comando na imagem abaixo
02 – Vamos criar a virtual network e subnet para nossos servidores Web
# Criar virtual network
$virtualNetwork = New-AzVirtualNetwork `
-ResourceGroupName RG-LoadBalancer `
-Location EastUS `
-Name Vnet-LoadBalancer `
-AddressPrefix 10.0.0.0/16
# Adicionar uma subnet
$subnetConfig = Add-AzVirtualNetworkSubnetConfig `
-Name Subnet-LoadBalancer `
-AddressPrefix 10.0.0.0/24 `
-VirtualNetwork $virtualNetwork
# Associar a subnet à virtual network
$virtualNetwork | Set-AzVirtualNetwork
Podemos observar na imagem abaixo a execução do comando
02. Vamos criar a máquina virtual VM-IIS-01 e liberar a porta 80 para acesso ao nosso site.
# Esse script cria uma VM e adicionar em uma virtual network já criada.
# Definindo as variáveis de rede
$ResourceGroup = “RG-LoadBalancer”
$Location = “EastUS”
$vNetName = “Vnet-LoadBalancer”
$SubnetName = “Subnet-LoadBalancer”
$nsgName = “nsg-LoadBalancer”
# Criando o Network Security Group
$nsgRuleVMAccess = New-AzNetworkSecurityRuleConfig -Name ‘allow-vm-access’ -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389,80 -Access Allow
New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $location -Name $nsgName -SecurityRules $nsgRuleVMAccess
# Definindo as variáveis da máquina virtual
$vNet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroup -Name $vNetName
$Subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vNet
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NsgName
$vmName = “VM-IIS-01”
$pubName = “MicrosoftWindowsServer”
$offerName = “WindowsServer”
$skuName = “2016-Datacenter”
$vmSize = “Standard_DS2_v2”
$pipName = “$vmName-pip”
$nicName = “$vmName-nic”
$osDiskName = “$vmName-OsDisk”
$osDiskType = “Standard_LRS”
# Definindo as credenciais de administrador
$adminUsername = ‘jadson.alves’
$adminPassword = ‘Pa$$w0rd.qwe1234’
$adminCreds = New-Object PSCredential $adminUsername, ($adminPassword | ConvertTo-SecureString -AsPlainText -Force)
# Criando IP público e interface de rede NIC
$pip = New-AzPublicIpAddress -Name $pipName -ResourceGroupName $ResourceGroup -Location $location -AllocationMethod Static -Sku Standard
$nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $ResourceGroup -Location $location -SubnetId $Subnet.Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
# Adicionando as configurações da máquina virtual
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize
Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id
# Setando os parâmetros do sistema operacional
Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $adminCreds
# Setando a imagem utilizada na máquina virtual
Set-AzVMSourceImage -VM $vmConfig -PublisherName $pubName -Offer $offerName -Skus $skuName -Version ‘latest’
# Setando as configurações de disco
Set-AzVMOSDisk -VM $vmConfig -Name $osDiskName -StorageAccountType $osDiskType -CreateOption fromImage
# Desabilitando o diagnóstico de boot
Set-AzVMBootDiagnostic -VM $vmConfig -Disable
# Criando a máquina virtual
New-AzVM -ResourceGroupName $ResourceGroup -Location $location -VM $vmConfig
03. Vamos criar a máquina virtual VM-IIS-02 e liberar a porta 80 para acesso ao nosso site.
# Esse script cria uma VM e adicionar em uma virtual network já criada.
# Definindo as variáveis de rede
$ResourceGroup = “RG-LoadBalancer”
$Location = “EastUS”
$vNetName = “Vnet-LoadBalancer”
$SubnetName = “Subnet-LoadBalancer”
$nsgName = “nsg-LoadBalancer”
# Criando o Network Security Group
$nsgRuleVMAccess = New-AzNetworkSecurityRuleConfig -Name ‘allow-vm-access’ -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389,80 -Access Allow
New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $location -Name $nsgName -SecurityRules $nsgRuleVMAccess
# Definindo as variáveis da máquina virtual
$vNet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroup -Name $vNetName
$Subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vNet
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NsgName
$vmName = “VM-IIS-02”
$pubName = “MicrosoftWindowsServer”
$offerName = “WindowsServer”
$skuName = “2016-Datacenter”
$vmSize = “Standard_DS2_v2”
$pipName = “$vmName-pip”
$nicName = “$vmName-nic”
$osDiskName = “$vmName-OsDisk”
$osDiskType = “Standard_LRS”
# Definindo as credenciais de administrador
$adminUsername = ‘jadson.alves’
$adminPassword = ‘Pa$$w0rd.qwe1234’
$adminCreds = New-Object PSCredential $adminUsername, ($adminPassword | ConvertTo-SecureString -AsPlainText -Force)
# Criando IP público e interface de rede NIC
$pip = New-AzPublicIpAddress -Name $pipName -ResourceGroupName $ResourceGroup -Location $location -AllocationMethod Static -Sku Standard
$nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $ResourceGroup -Location $location -SubnetId $Subnet.Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
# Adicionando as configurações da máquina virtual
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize
Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id
# Setando os parâmetros do sistema operacional
Set-AzVMOperatingSystem -VM $vmConfig -Windows -ComputerName $vmName -Credential $adminCreds
# Setando a imagem utilizada na máquina virtual
Set-AzVMSourceImage -VM $vmConfig -PublisherName $pubName -Offer $offerName -Skus $skuName -Version ‘latest’
# Setando as configurações de disco
Set-AzVMOSDisk -VM $vmConfig -Name $osDiskName -StorageAccountType $osDiskType -CreateOption fromImage
# Desabilitando o diagnóstico de boot
Set-AzVMBootDiagnostic -VM $vmConfig -Disable
# Criando a máquina virtual
New-AzVM -ResourceGroupName $ResourceGroup -Location $location -VM $vmConfig
04. Clique no resource group RG-LoadBalancer e selecione a VM-IIS-01
05. Na opção Operations clique em Run command.
06. Selecione a opção RunPowerShellScript, cole o script abaixo e clique em Run.
O script abaixo instala o IIS e altera a página inicial para Hello World from e adiciona o hostname na página.
# Install IIS
Install-WindowsFeature -name Web-Server -IncludeManagementTools
# Remove default htm file
remove-item C:\inetpub\wwwroot\iisstart.htm
#Add custom htm file
Add-Content -Path “C:\inetpub\wwwroot\iisstart.htm” -Value $(“Hello World from host ” + $env:computername)
07. Vamos verificar se o ISS está instalado, para isso vamos colar o IP Pulico da máquina virtual VM-IIS-01 no navegador.
08. Observe que nosso servidor Web está executando com as configurações que foram definidas no script.
Agora vamos instalar a feature IIS no servidor VM-IIS-02
09. Clique no resource group RG-LoadBalancer e selecione a VM-IIS-02
10. Na opção Operations clique em Run command.
11. Selecione a opção RunPowerShellScript, cole o script abaixo e clique em Run.
O script abaixo instala o IIS e altera a página inicial para Hello World from e adiciona o hostname na página..
# Install IIS
Install-WindowsFeature -name Web-Server -IncludeManagementTools
# Remove default htm file
remove-item C:\inetpub\wwwroot\iisstart.htm
#Add custom htm file
Add-Content -Path “C:\inetpub\wwwroot\iisstart.htm” -Value $(“Hello World from host ” + $env:computername)
12. Vamos verificar se o ISS está instalado, para isso vamos colar o IP Pulico da máquina virtual VM-IIS-02 no navegador.
13. Observe que nosso servidor Web está executando com as configurações que foram definidas no script.
Criar o Standard load balancer
14. Pesquise no portal do Azure por Load balancers.
15. Na tela Load balancers clique em Create load balancer.
16. Selecione a assinatura, resource group, nome e região.
Na opção type selecione o tipo Public (vamos balancear o tráfego da Internet), sku selecione Standard (diferença entre a versão explicada aqui https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-standard-overview), em Public IP address clique em create e selecione um nome para o IP publico, em zona de disponibilidade selecione a zona de acordo com sua necessidade e clique em Review + create.
17. Na tela de Review + create clique em Create.
18. Observe que nosso recurso está sendo provisionado.
19. Clique no resouce group RG-LoadBalancer e observe que nosso load balancer (LB-WebServer) foi criado com sucesso.
20. Clique em FrontendIP configuration, observe que nosso endereço IP publico está criado, ele será o endereço IP Publico que os usuários iram utilizar para acessar nosso site.
21. Clique em Backend pools e + Add
22. Selecione um nome para o pool e a rede virtual, em virtual machines clique em + Add selecione os servidores VM-IIS-01 e VM-IIS-02 e clique em Add.
23. Depois de realizar todas as ações desejadas clique em Add.
24. Nosso pool foi criado com sucesso.
Criar um Health probles
25. Clique em Health probles clique em +Add
Precisamos do Health probles para monitorar o status do serviço dos servidores backend.
26. Na tela Add health probe faça as seguintes alterações:
- Selecione um nome, o tipo de protocolo deixe o protocolo como TCP. Como estamos executando o serviço da web na porta 80 , deixe o valor padrão como está.
- Interval é a quantidade de tempo entre as tentativas de análise.
- Unhealthy threshold é o número de falhas consecutivas no probe que devem ocorrer antes que uma máquina virtual seja considerada não íntegra.
27. Observe que nossa regra foi criada.
Criar um Health probles
A regra do balanceador de carga define como o tráfego será distribuído do balanceador de carga para o pool de backend.
28. Clique em Load balancing rules e + Add
Vamos balancear o tráfego TCP da porta 80 . Então, minha configuração de regra será da seguinte forma:
29. Observe que nossa regra foi criada com sucesso.
Isso completa a configuração. É hora de testar.
30. Ver o IP Publico do load balancer.
30. Abra um navegador no modo anonimo e tente acessar o site com o IP Publico do load balancer.
Como esperado, agora posso ver o site em execução no servidor backend VM-IIS-01.
31. Agora vamos desligar o servidor VM-IIS-01.
32. Quando atualizo a página da Web novamente, agora posso ver a página do servidor de backend VM-IIS-02.
33. 33. Observe nossa configuração no diagrama de rede, nosso endereço IP Publico está recebendo as requisições na porta 80 e direcionando para o Backend pool que está distribuindo as requisições para nossos servidores web.
Isso confirma que o balanceador de carga está funcionando conforme o esperado.
Espero que este conteúdo tenha contribuído com o enriquecimento do conhecimento de vocês em Azure.
Tem alguma sugestão ou observação, comente.
Forte abraço, obrigado e até o próximo post. 🙂
Carreira desenvolvida na área de tecnologia da informação, com ampla experiência em Cloud
Computing e Cloud Security.
Forte atuação em projetos de Cloud Security no Microsoft Azure e com tecnologias de
segurança do Microsoft 365.
Tenho Experiência em Microsoft Azure, Microsoft 365, AWS e Windows Server.
Sou Microsoft MVP na categoria Microsoft Azure, AWS Communit Builder Security & Identity e
MCT.