Condividi tramite


Esercitazione: Bilanciare il carico delle macchine virtuali Windows in Azure per creare un'applicazione a disponibilità elevata con Azure PowerShell

Si applica a: ✔️ macchine virtuali Windows ✔️ set di scalabilità uniformi

Il bilanciamento del carico offre un livello di disponibilità superiore distribuendo le richieste in ingresso tra più macchine virtuali. In questa esercitazione vengono illustrati i diversi componenti del servizio di bilanciamento del carico di Azure che distribuiscono il traffico e offrono disponibilità elevata. Scopri come:

  • Creare un servizio di bilanciamento del carico di Azure
  • Creare una sonda di integrità per il bilanciatore del carico
  • Creare regole di traffico del bilanciamento del carico
  • Usare l'estensione per script personalizzati per creare un sito IIS di base
  • Creare macchine virtuali e collegarsi a un servizio di bilanciamento del carico
  • Visualizzare un bilanciatore di carico in azione
  • Aggiungere e rimuovere macchine virtuali da un servizio di bilanciamento del carico

Panoramica del servizio di bilanciamento del carico di Azure

Un servizio di bilanciamento del carico di Azure è un servizio di bilanciamento del carico di livello 4 (TCP, UDP) che fornisce disponibilità elevata distribuendo il traffico in ingresso tra macchine virtuali integre. Un sondaggio di integrità del bilanciamento del carico monitora una determinata porta su ogni macchina virtuale e distribuisce il traffico solo a una macchina virtuale operativa.

Si definisce una configurazione IP front-end che contiene uno o più indirizzi IP pubblici. Questa configurazione IP front-end consente al servizio di bilanciamento del carico e alle applicazioni di essere accessibili tramite Internet.

Le macchine virtuali si connettono a un servizio di bilanciamento del carico usando la scheda di interfaccia di rete virtuale. Per distribuire il traffico alle macchine virtuali, un pool di indirizzi back-end contiene gli indirizzi IP delle schede di interfaccia di rete virtuali connesse al servizio di bilanciamento del carico.

Per controllare il flusso del traffico, è necessario definire regole di bilanciamento del carico per porte e protocolli specifici che eseguono il mapping alle macchine virtuali.

Avviare Azure Cloud Shell

Azure Cloud Shell è una shell interattiva gratuita che può essere usata per eseguire la procedura di questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account.

Per aprire Cloud Shell, basta selezionare Prova nell'angolo superiore destro di un blocco di codice. È anche possibile avviare Cloud Shell in una scheda separata del browser visitando https://shell.azure.com/powershell. Selezionare Copia per copiare i blocchi di codice, incollarli in Cloud Shell e premere INVIO per eseguirli.

Creare un servizio di bilanciamento del carico di Azure

Questa sezione descrive in dettaglio come creare e configurare ogni componente del servizio di bilanciamento del carico. Prima di creare il servizio di bilanciamento del carico, creare un gruppo di risorse con New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroupLoadBalancer nella località EastUS :

New-AzResourceGroup `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS"

Creare un indirizzo IP pubblico

Per accedere all'app su Internet, è necessario un indirizzo IP pubblico per il servizio di bilanciamento del carico. Creare un indirizzo IP pubblico con New-AzPublicIpAddress. L'esempio seguente crea un indirizzo IP pubblico denominato myPublicIP nel gruppo di risorse myResourceGroupLoadBalancer :

$publicIP = New-AzPublicIpAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -AllocationMethod "Static" `
  -Name "myPublicIP"

Creare un servizio di bilanciamento del carico

Creare un pool di indirizzi IP di front-end con New-AzLoadBalancerFrontendIpConfig. L'esempio seguente crea un pool di indirizzi IP front-end denominato myFrontEndPool e collega l'indirizzo myPublicIP :

$frontendIP = New-AzLoadBalancerFrontendIpConfig `
  -Name "myFrontEndPool" `
  -PublicIpAddress $publicIP

Creare un pool di indirizzi back-end con New-AzLoadBalancerBackendAddressPoolConfig. Le VM si collegano a questo pool back-end nei passaggi rimanenti. L'esempio seguente crea un pool di indirizzi back-end denominato myBackEndPool:

$backendPool = New-AzLoadBalancerBackendAddressPoolConfig `
  -Name "myBackEndPool"

Creare ora il servizio di bilanciamento del carico con New-AzLoadBalancer. L'esempio seguente crea un servizio di bilanciamento del carico denominato myLoadBalancer usando i pool ip front-end e back-end creati nei passaggi precedenti:

$lb = New-AzLoadBalancer `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myLoadBalancer" `
  -Location "EastUS" `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

Creare una sonda di integrità

Per consentire al servizio di bilanciamento del carico di monitorare lo stato dell'app, si usa una sonda di integrità. La sonda di integrità aggiunge o rimuove dinamicamente le macchine virtuali dalla rotazione del bilanciamento del carico in base ai risultati dei controlli di integrità. Per impostazione predefinita, una macchina virtuale viene rimossa dalla distribuzione del servizio di bilanciamento del carico dopo due errori consecutivi a intervalli di 15 secondi. Si crea una sonda di integrità basata su un protocollo o su una pagina specifica di verifica dello stato di salute per la tua app.

Nell'esempio seguente viene creata una sonda TCP. È anche possibile creare probe HTTP personalizzati per controlli di integrità più granulari. Quando si usa un probe HTTP personalizzato, è necessario creare la pagina di controllo integrità, ad esempio healthcheck.aspx. La probe deve restituire una risposta HTTP 200 OK affinché il servizio di bilanciamento del carico mantenga l'host nella rotazione.

Per creare un probe di integrità TCP, usare Add-AzLoadBalancerProbeConfig. L'esempio seguente crea un probe di integrità denominato myHealthProbe che monitora ogni macchina virtuale sulla porta TCP80:

Add-AzLoadBalancerProbeConfig `
  -Name "myHealthProbe" `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

Per applicare il controllo di integrità, aggiornare il bilanciamento del carico con Set-AzLoadBalancer:

Set-AzLoadBalancer -LoadBalancer $lb

Creare una regola di bilanciamento del carico

Una regola di bilanciamento del carico consente di definire come il traffico verrà distribuito alle VM. Definire la configurazione IP front-end per il traffico in ingresso e il pool IP di back-end per la ricezione del traffico, insieme alle porte di origine e di destinazione necessarie. Per assicurarsi che solo le macchine virtuali in buone condizioni ricevano traffico, è necessario definire anche la sonda di integrità da usare.

Creare una regola di bilanciamento del carico con Add-AzLoadBalancerRuleConfig. L'esempio seguente crea una regola di bilanciamento del carico denominata myLoadBalancerRule e bilancia il traffico sulla porta TCP80:

$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

Aggiornare il servizio di bilanciamento del carico con Set-AzLoadBalancer:

Set-AzLoadBalancer -LoadBalancer $lb

Configurare la rete virtuale

Prima di distribuire alcune macchine virtuali e testare il servizio di bilanciamento, creare le risorse di rete virtuale di supporto. Per altre informazioni sulle reti virtuali, vedere l'esercitazione Gestire reti virtuali di Azure .

Creare risorse di rete

Creare una rete virtuale con New-AzVirtualNetwork. Nell'esempio seguente viene creata una rete virtuale denominata myVnet con una subnet denominata 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

Le schede di interfaccia di rete virtuali vengono create con New-AzNetworkInterface. Nell'esempio seguente vengono create tre schede di rete virtuali. Una scheda di interfaccia di rete virtuale per ogni VM creata per l'app nei passaggi successivi. È possibile creare altre schede di interfaccia di rete virtuale e macchine virtuali in qualsiasi momento e aggiungerle al servizio di bilanciamento del carico:

for ($i=1; $i -le 3; $i++)
{
   New-AzNetworkInterface `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -Name myVM$i `
     -Location "EastUS" `
     -Subnet $vnet.Subnets[0] `
     -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

Creare macchine virtuali

Per aumentare l'alta disponibilità della tua app, posiziona le macchine virtuali in un set di disponibilità.

Creare un set di disponibilità con New-AzAvailabilitySet. L'esempio seguente crea un set di disponibilità denominato myAvailabilitySet:

$availabilitySet = New-AzAvailabilitySet `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myAvailabilitySet" `
  -Location "EastUS" `
  -Sku aligned `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2

Impostare nome utente e password dell'amministratore delle macchine virtuali con il comando Get-Credential:

$cred = Get-Credential

A questo punto è possibile creare le VM con New-AzVM. L'esempio seguente crea tre macchine virtuali e i componenti di rete virtuale necessari, se non esistono già:

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
}

Il -AsJob parametro crea la macchina virtuale come attività in background, quindi il prompt di PowerShell viene restituito all'utente. È possibile visualizzare i dettagli dei processi in background con il Job cmdlet . La creazione e la configurazione di tutte e tre le macchine virtuali richiedono alcuni minuti.

Installare IIS con estensione script personalizzata

In un'esercitazione precedente su Come personalizzare una macchina virtuale Windows si è appreso come automatizzare la personalizzazione delle macchine virtuali con l'estensione script personalizzata per Windows. È possibile usare lo stesso approccio per installare e configurare IIS nelle macchine virtuali.

Usare Set-AzVMExtension per installare l'estensione per script personalizzati. L'estensione viene eseguita powershell Add-WindowsFeature Web-Server per installare il server Web IIS e quindi aggiorna la pagina Default.htm per visualizzare il nome host della macchina virtuale:

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
}

Testare il bilanciamento del carico

Ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con Get-AzPublicIPAddress. L'esempio seguente ottiene l'indirizzo IP per myPublicIP creato in precedenza:

Get-AzPublicIPAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myPublicIP" | select IpAddress

È quindi possibile immettere l'indirizzo IP pubblico in un Web browser. Viene visualizzato il sito Web, incluso il nome host della macchina virtuale a cui il servizio di bilanciamento del carico ha distribuito il traffico come nell'esempio seguente:

Esecuzione del sito Web IIS

Per visualizzare il servizio di bilanciamento del carico distribuire il traffico tra tutte e tre le macchine virtuali che eseguono l'app, puoi aggiornare forzatamente il tuo browser web.

Aggiungere e rimuovere macchine virtuali

Potrebbe essere necessario eseguire la manutenzione nelle macchine virtuali che eseguono l'app, ad esempio l'installazione degli aggiornamenti del sistema operativo. Per gestire un maggiore traffico verso l'app, potrebbe essere necessario aggiungere altre macchine virtuali. Questa sezione illustra come rimuovere o aggiungere una macchina virtuale dal servizio di bilanciamento del carico.

Rimuovere una macchina virtuale dal servizio di bilanciamento del carico

Ottenere la scheda di interfaccia di rete con Get-AzNetworkInterface, quindi impostare la proprietà LoadBalancerBackendAddressPools della scheda di interfaccia di rete virtuale su $null. Infine, aggiornare la scheda di interfaccia di rete virtuale:

$nic = Get-AzNetworkInterface `
    -ResourceGroupName "myResourceGroupLoadBalancer" `
    -Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzNetworkInterface -NetworkInterface $nic

Per visualizzare il bilanciatore di carico distribuire il traffico tra le due VM rimanenti che eseguono l'app, è possibile effettuare un aggiornamento forzato del browser web. È ora possibile eseguire la manutenzione nella macchina virtuale, ad esempio l'installazione degli aggiornamenti del sistema operativo o l'esecuzione di un riavvio della macchina virtuale.

Aggiungere una macchina virtuale al servizio di bilanciamento del carico

Dopo aver eseguito la manutenzione della macchina virtuale o se è necessario espandere la capacità, impostare la proprietà LoadBalancerBackendAddressPools della scheda di interfaccia di rete virtuale su BackendAddressPool da Get-AzLoadBalancer:

Ottieni il bilanciatore di carico:

$lb = Get-AzLoadBalancer `
    -ResourceGroupName myResourceGroupLoadBalancer `
    -Name myLoadBalancer 
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzNetworkInterface -NetworkInterface $nic

Passaggi successivi

In questa esercitazione è stato creato un servizio di bilanciamento del carico e sono state collegate macchine virtuali. Ecco cosa hai imparato a fare:

  • Creare un servizio di bilanciamento del carico di Azure
  • Creare una sonda di integrità per il bilanciatore del carico
  • Creare regole di traffico del bilanciamento del carico
  • Usare l'estensione per script personalizzati per creare un sito IIS di base
  • Creare macchine virtuali e collegarsi a un servizio di bilanciamento del carico
  • Visualizzare un bilanciatore di carico in azione
  • Aggiungere e rimuovere macchine virtuali da un servizio di bilanciamento del carico

Avanza all'esercitazione successiva per imparare a gestire la rete delle macchine virtuali.