Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili
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
- Creare una sonda di integrità
- Creare regole di traffico
- Usare cloud-init per installare un'app Node.js di base
- Creare macchine virtuali e collegarle al servizio di bilanciamento del carico
- Visualizzare il servizio di bilanciamento del carico in azione
- Aggiungere e rimuovere macchine virtuali dal servizio di bilanciamento del carico
Questa esercitazione usa l'interfaccia della riga di comando all'interno di Azure Cloud Shell, che viene costantemente aggiornata all'ultima versione. Per aprire Cloud Shell, selezionare Prova nella parte superiore di qualsiasi blocco di codice.
Se si sceglie di installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è necessario eseguire l'interfaccia della riga di comando di Azure versione 2.0.30 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
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.
Se hai seguito l'esercitazione precedente per creare un set di scalabilità di macchine virtuali, un servizio di bilanciamento del carico è stato creato per te. Tutti questi componenti sono stati configurati per te come parte dell'insieme scalabile.
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 poter creare il servizio di bilanciamento del carico, crea un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroupLoadBalancer nella posizione eastus :
az group create --name 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 az network public-ip create. L'esempio seguente crea un indirizzo IP pubblico denominato myPublicIP nel gruppo di risorse myResourceGroupLoadBalancer :
az network public-ip create \
--resource-group myResourceGroupLoadBalancer \
--name myPublicIP
Creare un servizio di bilanciamento del carico
Creare un servizio di bilanciamento del carico con az network lb create. L'esempio seguente crea un servizio di bilanciamento del carico denominato myLoadBalancer e assegna l'indirizzo myPublicIP alla configurazione IP front-end:
az network lb create \
--resource-group myResourceGroupLoadBalancer \
--name myLoadBalancer \
--frontend-ip-name myFrontEndPool \
--backend-pool-name myBackEndPool \
--public-ip-address myPublicIP
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.js. 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 az network lb probe create. L'esempio seguente crea una sonda di integrità denominata myHealthProbe:
az network lb probe create \
--resource-group myResourceGroupLoadBalancer \
--lb-name myLoadBalancer \
--name myHealthProbe \
--protocol tcp \
--port 80
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 az network lb rule create. L'esempio seguente crea una regola chiamata myLoadBalancerRule, utilizza il sondaggio di integrità myHealthProbe e bilancia il traffico sulla porta 80:
az network lb rule create \
--resource-group myResourceGroupLoadBalancer \
--lb-name myLoadBalancer \
--name myLoadBalancerRule \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name myFrontEndPool \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe
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 az network vnet create. L'esempio seguente crea una rete virtuale denominata myVnet con una subnet denominata mySubnet:
az network vnet create \
--resource-group myResourceGroupLoadBalancer \
--name myVnet \
--subnet-name mySubnet
Per aggiungere un gruppo di sicurezza di rete, usare az network nsg create. L'esempio seguente crea un gruppo di sicurezza di rete denominato myNetworkSecurityGroup:
az network nsg create \
--resource-group myResourceGroupLoadBalancer \
--name myNetworkSecurityGroup
Creare una regola del gruppo di sicurezza di rete con az network nsg rule create. L'esempio seguente crea una regola del gruppo di sicurezza di rete denominata myNetworkSecurityGroupRule:
az network nsg rule create \
--resource-group myResourceGroupLoadBalancer \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRule \
--priority 1001 \
--protocol tcp \
--destination-port-range 80
Le NIC virtuali sono create con az network nic create. 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 in `seq 1 3`; do
az network nic create \
--resource-group myResourceGroupLoadBalancer \
--name myNic$i \
--vnet-name myVnet \
--subnet mySubnet \
--network-security-group myNetworkSecurityGroup \
--lb-name myLoadBalancer \
--lb-address-pools myBackEndPool
done
Quando vengono create tutte e tre le schede di interfaccia di rete virtuali, procedere con il passaggio successivo
Creare macchine virtuali
Creare una configurazione cloud-init
In un'esercitazione precedente su Come personalizzare una macchina virtuale Linux al primo avvio si è appreso come automatizzare la personalizzazione delle macchine virtuali con cloud-init. È possibile usare lo stesso file di configurazione cloud-init per installare NGINX ed eseguire una semplice app "Hello World" Node.js nel passaggio successivo. Per visualizzare il servizio di bilanciamento del carico in azione, alla fine dell'esercitazione si accede a questa semplice app in un Web browser.
Nella shell corrente creare un file denominato cloud-init.txt e incollare la configurazione seguente. Ad esempio, creare il file in Cloud Shell anziché nel computer locale. Immettere sensible-editor cloud-init.txt per creare il file e visualizzare un elenco di editor disponibili. Assicurarsi che l'intero file cloud-init venga copiato correttamente, in particolare la prima riga:
#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
- path: /etc/nginx/sites-available/default
content: |
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- owner: azureuser:azureuser
- path: /home/azureuser/myapp/index.js
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})
runcmd:
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js
Creare macchine virtuali
Per aumentare l'alta disponibilità della tua app, posiziona le macchine virtuali in un set di disponibilità. Per altre informazioni sui set di disponibilità, vedere l'esercitazione precedente Su come creare macchine virtuali a disponibilità elevata .
Crea un set di disponibilità con az vm availability-set create. L'esempio seguente crea un set di disponibilità denominato myAvailabilitySet:
az vm availability-set create \
--resource-group myResourceGroupLoadBalancer \
--name myAvailabilitySet
È ora possibile creare le macchine virtuali con az vm create. L'esempio seguente crea tre macchine virtuali e genera chiavi SSH se non esistono già:
for i in `seq 1 3`; do
az vm create \
--resource-group myResourceGroupLoadBalancer \
--name myVM$i \
--availability-set myAvailabilitySet \
--nics myNic$i \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init.txt \
--no-wait
done
Sono presenti attività in background che continuano a essere eseguite dopo che l'Azure CLI ti riporta al prompt. Il --no-wait parametro non attende il completamento di tutte le attività. Potrebbe essere necessario un altro paio di minuti prima di poter accedere all'app. La sonda di integrità del bilanciamento del carico rileva automaticamente quando l'applicazione è in esecuzione su ciascuna macchina virtuale. Una volta eseguita l'app, la regola di bilanciamento del carico inizia a distribuire il traffico.
Testare il bilanciamento del carico
Ottieni l'indirizzo IP pubblico del servizio di bilanciamento del carico con az network public-ip show. L'esempio seguente ottiene l'indirizzo IP per myPublicIP creato in precedenza:
az network public-ip show \
--resource-group myResourceGroupLoadBalancer \
--name myPublicIP \
--query [ipAddress] \
--output tsv
È quindi possibile immettere l'indirizzo IP pubblico in un Web browser. Tenere presente che sono necessari alcuni minuti prima che il servizio di bilanciamento del carico inizi a distribuire il traffico alle macchine virtuali. L'app viene visualizzata, incluso il nome host della macchina virtuale a cui il servizio di bilanciamento del carico ha distribuito il traffico come nell'esempio seguente:
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
È possibile rimuovere una macchina virtuale dal pool di indirizzi del back-end con az network nic ip-config address-pool remove. L'esempio seguente rimuove la scheda di interfaccia di rete virtuale per myVM2 da myLoadBalancer:
az network nic ip-config address-pool remove \
--resource-group myResourceGroupLoadBalancer \
--nic-name myNic2 \
--ip-config-name ipConfig1 \
--lb-name myLoadBalancer \
--address-pool myBackEndPool
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.
Per visualizzare un elenco di macchine virtuali con schede di rete virtuali connesse al bilanciamento del carico, usare az network lb address-pool show. Interrogare e filtrare sull'ID della scheda di interfaccia di rete virtuale come indicato di seguito.
az network lb address-pool show \
--resource-group myResourceGroupLoadBalancer \
--lb-name myLoadBalancer \
--name myBackEndPool \
--query backendIpConfigurations \
--output tsv | cut -f5
L'output è simile all'esempio seguente, che mostra che la scheda di rete virtuale per VM 2 non fa più parte del pool di indirizzi back-end.
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic1/ipConfigurations/ipconfig1
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic3/ipConfigurations/ipconfig1
Aggiungere una macchina virtuale al servizio di bilanciamento del carico
Dopo aver eseguito la manutenzione della macchina virtuale o se è necessario espandere la capacità, è possibile aggiungere una macchina virtuale al pool di indirizzi backend con az network nic ip-config address-pool add. L'esempio seguente aggiunge la scheda di interfaccia di rete virtuale per myVM2 a myLoadBalancer:
az network nic ip-config address-pool add \
--resource-group myResourceGroupLoadBalancer \
--nic-name myNic2 \
--ip-config-name ipConfig1 \
--lb-name myLoadBalancer \
--address-pool myBackEndPool
Per verificare che la scheda di interfaccia di rete virtuale sia connessa al pool di indirizzi backend, usare di nuovo az network lb address-pool show a partire dal passaggio precedente.
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 cloud-init per creare un'app Node.js 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
Passare all'esercitazione successiva per altre informazioni sui componenti della rete virtuale di Azure.