Como configurar o Azure load balancer com PowerShell

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

A próxima etapa será realizar a configuração o Azure load balancer

# Criar Azure load balancer
New-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName RG-LoadBalancer -SKU Standard -Location “East US”

O comando acima cria um load balancer chamado “LB-WebServers ”  do tipo Standard .

Podemos observar a execução do comando na imagem abaixo.

O load balancer precisa de um endereço IP Publico que será usado pelos clientes para conectar-se a partir de redes externas.

# Criar IP Publico 

$publicIp = New-AzPublicIpAddress -ResourceGroupName RG-LoadBalancer -Name ‘IP-LoadBalancer’ -Location “East US” -AllocationMethod static -SKU Standard

O comando acima cria um IP Publico estático  do tipo Standard .

Podemos observar a execução do comando na imagem abaixo.

# Agora vamos adicionar o IP Publico ao Load Balancer

$slb1 = Get-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName “RG-LoadBalancer”

$slb1 | Add-AzLoadBalancerFrontendIpConfig -Name ‘FrontEndPool’ -PublicIpAddress $publicIp

$slb1 | Set-AzLoadBalancer

A primeira linha recupera o balanceador de carga chamado LB-WebServers e o armazena na variável $slb1 .

Na segunda linha, estou usando o operador de pipeline para adicionar a configuração de IP do frontend do load balancer.

Na terceira linha, o comando Set-AzLoadBalancer é usado para aplicar a nova configuração ao  load balancer e salvá-la.

# Criar um backend pool 

$slb2 = Get-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName “RG-LoadBalancer”

$slb2 | Add-AzLoadBalancerBackendAddressPoolConfig -Name ‘BackEndPool’

$slb2 | Set-AzLoadBalancer

$mylb = Get-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName “RG-LoadBalancer”

$ap = Get-AzLoadBalancerBackendAddressPoolConfig -Name “BackEndPool” -LoadBalancer $mylb

O comando cria apenas o backend pool ainda precisamos adicionar as máquinas virtuais.

Agora precisamos adicionar nossos servidores ao backend pool

Precisamos localizar as interfaces de redes relacionadas às duas VMs. Podemos fazer isso usando o seguinte comando:

Get-AzNetworkInterface -ResourceGroupName “RG-LoadBalancer” | select Name

O comando acima lista todas as interfaces de redes do grupo de recurso RG-LoadBalancer.

Agora vamos adicionar as máquinas virtuais ao Backend pool

#  Atribuir a interface de rede da VM-IIS-01 ao backend pool 

$nic1 = Get-AzNetworkInterface -ResourceGroupName “RG-LoadBalancer” -Name “VM-IIS-01-nic”

$nic1.IpConfigurations[0].LoadBalancerBackendAddressPools = $ap

$nic1 | Set-AzNetworkInterface

#  Atribuir a interface de rede da VM-IIS-02 ao backend pool 

$nic1 = Get-AzNetworkInterface -ResourceGroupName “RG-LoadBalancer” -Name “VM-IIS-02-nic”

$nic1.IpConfigurations[0].LoadBalancerBackendAddressPools = $ap

$nic1 | Set-AzNetworkInterface

O próximo passo será criar o health probe

Precisamos do health probe para monitorar o status do serviço dos servidores backend

# Criar health probe

$slb3 = Get-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName “RG-LoadBalancer”

$slb3 | Add-AzLoadBalancerProbeConfig -Name “HealthProbe” -RequestPath / -Protocol http -Port 80 -IntervalInSeconds 5 -ProbeCount 2

$slb3 | Set-AzLoadBalancer

Estamos executando o serviço ISS na porta TCP 80. Então. De acordo com a configuração acima, se uma VM tiver 2 falhas consecutivos em 5 segundos, ela será removida da distribuição do load balancer.

Configurar as regras do Load balancing

O Load balancing rules define como o tráfego será distribuído do load balancer para o backend pool. Este é o último passo da configuração necessário para colocar o load balancer para fucionar.

# Antes de iniciar a configuração do Load balancing rules, precisamos preparar algumas variáveis ​​da seguinte maneira:

$slb4 = Get-AzLoadBalancer -Name “LB-WebServers” -ResourceGroupName “RG-LoadBalancer”

$fip = Get-AzLoadBalancerFrontendIpConfig -Name “FrontEndPool” -LoadBalancer $slb4

$bip = Get-AzLoadBalancerBackendAddressPoolConfig -Name “BackEndPool” -LoadBalancer $slb4

$pb = Get-AzLoadBalancerProbeConfig -Name “HealthProbe” -LoadBalancer $slb4

# Criar load balancer rule

$slb4 | Add-AzLoadBalancerRuleConfig -Name “RuleLB” -FrontendIpConfiguration $fip -BackendAddressPool $bip -Protocol Tcp -FrontendPort 80 -BackendPort 80 -Probe $pb

$slb4 | Set-AzLoadBalancer

De acordo com a configuração acima, qualquer tráfego TCP na porta 80 que chega ao endereço IP do frontend será distribuído aos membros do backend pool.

Vamos verificar  nossas configurações realizas em PowerShell no portal do Azure

14. Clique no grupo de recurso RG-LoadBalancer e selecione LB-WebServers.

15. Clique em Fronted IP configuration e observe que nosso IP de Frontend foi criado.

16. Clique em Backend pools e observe que nosso Backend pool foi configurado e adicionado os servidores VM-IIS-01 e VM-IIS-02.

17. Clique em Health probes e observe que nossa regra também foi criada.

18. Clique em Load balancing rules e observe que nossa regra foi criada.

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-02.

31. Agora vamos desligar o servidor VM-IIS-02.

32. Quando atualizo a página da Web novamente, agora posso ver a página do servidor de backend VM-IIS-01.

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. 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *