Configurando o Balanceador de Carga Interna do Azure

1

Eu estou tentando configurar uma VNET usando o novo recurso Internal Load Balancing no Azure. Eu planejo ter dois servidores frontend se comunicando com 2 servidores de backend em um ILB (Internal Load Balancer).

Acredito que segui todas as instruções corretamente, mas as máquinas da minha rede ainda não conseguem se comunicar usando o ILB.

O que eu fiz:

Eu configurei uma rede virtual regional com 2 sub-redes, Sub-rede 1 e Sub-rede 2, carregando o seguinte arquivo de configuração, já que as VNETs regionais ainda não estão disponíveis pela interface do usuário.

Configuração de rede:

<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
  <VirtualNetworkConfiguration>
    <VirtualNetworkSites>
      <VirtualNetworkSite name="my-net" Location="West US">
        <AddressSpace>
          <AddressPrefix>192.168.10.0/24</AddressPrefix>
        </AddressSpace>
        <Subnets>
          <Subnet name="BackendSubnet">
            <AddressPrefix>192.168.10.0/27</AddressPrefix>
          </Subnet>
          <Subnet name="FrontendSubnet">
            <AddressPrefix>192.168.10.32/27</AddressPrefix>
          </Subnet>
          <Subnet name="GatewaySubnet">
            <AddressPrefix>192.168.10.64/29</AddressPrefix>
          </Subnet>
        </Subnets>
      </VirtualNetworkSite>
    </VirtualNetworkSites>
  </VirtualNetworkConfiguration>
</NetworkConfiguration>

Eu criei duas VMs em dois serviços de nuvem e as adicionei à minha rede virtual com o seguinte PowerShell.

$imgname = "ad072bd3082149369c449ba5832401ae__Windows-Server-Remote-Desktop-Session-Host-on-Windows-Server-2012-R2-20140403-2126"
$vmname1 = "Backend1"
$vmname2 = "Backend2"
$vmname3 = "Frontend1"
$vmname4 = "Frontend2"
$backendSubnet = "BackendSubnet"
$frontendSubnet = "FrontendSubnet"
$adminname = "SomeAdmin"
$adminpw = "SomePassword"
$backend1 = New-AzureVMConfig -Name $vmname1 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $backendSubnet
$backend2 = New-AzureVMConfig -Name $vmname2 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $backendSubnet
$frontend1 = New-AzureVMConfig -Name $vmname3 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet
$frontend2 = New-AzureVMConfig -Name $vmname4 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet
New-AzureVM -ServiceName "my-net-backend" -VMs $backend1 -Location "West US" -VNetName "my-net" 
New-AzureVM -ServiceName "my-net-backend" -VMs $backend2 -Location "West US"
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend1 -Location "West US" -VNetName "my-net" 
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend2 -Location "West US"

Eu fiz uma remotinha em cada VM e configurei o IIS na porta 80 com uma página HTML simples para testar e verificar se ele funciona localmente, acesso anônimo, etc.

Em seguida, criei um servidor DNS na VNET com o seguinte powershell:

$dnsname = "MyDNS"
$dnsconfig = New-AzureVMConfig -Name $dnsname -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet

Após a VM estar pronta, configurei meu servidor como um servidor DNS no Windows 2012 R2 e adicionei uma zona de pesquisa direta com um simples sufixo "mytest.net"

Em seguida, na IU de gerenciamento do Azure, adicionei esse servidor DNS à minha VNET. Depois que o VNET foi reconfigurado, reiniciei todas as minhas VMs.

Depois que minhas VMs voltaram a ficar on-line, fiz um novo login no meu servidor DNS e criei um A-Record para "test.mytest.net"

Depois disso, eu remotquei para 1 servidor em cada sub-rede e assegurei que o NSLOOKUP para "test.mytest.net" fosse resolvido corretamente.

Tudo parecia estar indo bem neste momento.

Por fim, comecei a configurar o novo Azure Internal Load Balancer usando o Powershell da seguinte forma:

Add-AzureInternalLoadBalancer -InternalLoadBalancerName "MyILB" -SubnetName "BackendSubnet" -ServiceName "my-net-backend" -StaticVNetIPAddress "192.168.10.30"
Get-AzureVM -ServiceName "my-net-backend" -Name $backend1 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | Update-AzureVM
Get-AzureVM -ServiceName "my-net-backend" -Name $backend2 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | Update-AzureVM

Do meu ponto de vista, acabei de criar um ILB chamado MyILB com um IP estático de 192.168.10.30 e, em seguida, em cada VM em meu back-end, criei um terminal para a porta HTTP 80 e adicionei essa máquina ao ILB. Neste ponto, eu diria que o tráfego da porta HTTP 80 endereçado para 192.168.10.30 seria balanceado de carga entre minhas VMs Backend1 e Backend2. No entanto, isso não parece funcionar como eu esperava.

Conectei-me ao servidor DNS e criei um registro A para 192.168.10.30 com o nome de backend.mytest.net e verifiquei que esse nome poderia ser resolvido em todos os servidores.

Quando eu for remoto para um servidor front-end e usar o nome DNS backend.mytest.net ou 192.168.10.30 no navegador, recebo uma falha.

Também verifiquei que, em ambos os servidores de backend, a entrada HTTP 80 é permitida no firewall para todas as regiões (domínio, público e privado).

A interface do usuário de gerenciamento não mostra esses endpoints nas VMs, mas suspeito que isso seja porque eles são criados por meio dos comandos do powershell e a interface do usuário ainda não suporta isso.

Alguém tem algum insight ou pensamentos aqui? Eu sei que estou no limite de fazer isso funcionar.

Instruções usadas: Anúncio de balanceamento de carga interno
Redes virtuais regionais
Bad Request Troubleshooting
Configurando o DNS no Azure

    
por Adam 01.06.2014 / 23:41

1 resposta

3

Olhando a documentação para Add-AzureEndpoint , acho que você está sem o -ProbePath

Required if ProbeProtocol is set to "http". Omit otherwise. Specifies the URI whose health will be probed.

Como você está usando http, presumo que seja necessário.

    
por 06.06.2014 / 22:37