Bilanciare il carico delle macchine virtuali in tutte le zone di disponibilità tramite l'interfaccia della riga di comando di AzureLoad balance VMs across all availability zones using Azure CLI

Questo articolo illustra i passaggi per la creazione di un servizio Load Balancer Standard pubblico con un front-end con ridondanza della zona per ottenere la ridondanza della zona senza dipendenza da più record DNS.This article steps through creating a public Standard Load Balancer with a zone-redundant frontend to achieve zone-redundancy without dependency on multiple DNS records. Un singolo indirizzo IP front-end include automaticamente la ridondanza della zona.A single front-end IP address is automatically zone-redundant. Se si usa un front-end con ridondanza della zona per il servizio di bilanciamento del carico, con un singolo indirizzo IP è ora possibile raggiungere qualsiasi macchina virtuale in una rete virtuale all'interno di un'area che include tutte le zone di disponibilità.Using a zone redundant frontend for your load balancer, with a single IP address you can now reach any VM in a virtual network within a region that is across all Availability Zones. Usare le zone di disponibilità per proteggere app e dati da un poco probabile errore o perdita di un intero data center.Use availability zones to protect your apps and data from an unlikely failure or loss of an entire datacenter.

Per altre informazioni sull'uso delle zone di disponibilità con Load Balancer Standard, vedere Load Balancer Standard e zone di disponibilità.For more information about using Availability zones with Standard Load Balancer, see Standard Load Balancer and Availability Zones.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.

Usare Azure Cloud ShellUse Azure Cloud Shell

Azure Cloud Shell è un ambiente di shell interattivo ospitato in Azure e usato tramite il browser.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell consente di usare bash o PowerShell per interagire con i servizi di Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. È possibile usare i comandi preinstallati di Cloud Shell per eseguire il codice contenuto in questo articolo senza dover installare strumenti nell'ambiente locale.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Per avviare Azure Cloud Shell:To launch Azure Cloud Shell:

OpzioneOption Esempio/CollegamentoExample/Link
Selezionare Prova nell'angolo superiore destro di un blocco di codice.Select Try It in the upper-right corner of a code block. La selezione di Prova non comporta la copia automatica del codice in Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Esempio di Prova per Azure Cloud Shell
Passare a https://shell.azure.com o selezionare il pulsante Avvia Cloud Shell per aprire Cloud Shell nel browser.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Avviare Cloud Shell in una nuova finestraLaunch Cloud Shell in a new window
Selezionare il pulsante Cloud Shell nella barra dei menu nell'angolo superiore destro del portale di Azure.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Pulsante Cloud Shell nel portale di Azure

Per eseguire il codice di questo articolo in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Avviare Cloud Shell.Launch Cloud Shell.

  2. Selezionare il pulsante Copia in un blocco di codice per copiare il codice.Select the Copy button on a code block to copy the code.

  3. Incollare il codice nella sessione di Cloud Shell premendo CTRL+MAIUSC+V in Windows e Linux o CMD+MAIUSC+V in macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.

  4. Premere INVIO per eseguire il codice.Press Enter to run the code.

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.17 o successiva.If you choose to install and use the CLI locally, this tutorial requires that you are running Azure CLI version 2.0.17 or higher. Per trovare la versione, eseguire az --version.To find the version, run az --version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.If you need to install or upgrade, see Install Azure CLI.

Nota

Il supporto per le zone di disponibilità è disponibile per determinate risorse, aree e famiglie di dimensioni di macchine virtuali di Azure.Support for Availability Zones is available for select Azure resources and regions, and VM size families. Per altre informazioni su come iniziare e con quali risorse, aree e famiglie di dimensioni di macchina virtuale di Azure è possibile provare le zone di disponibilità, vedere Panoramica delle zone di disponibilità.For more information on how to get started, and which Azure resources, regions, and VM size families you can try availability zones with, see Overview of Availability Zones. Per assistenza è possibile usare il forum di StackOverflow oppure aprire un ticket di supporto di Azure.For support, you can reach out on StackOverflow or open an Azure support ticket.

Creare un gruppo di risorseCreate a resource group

Come prima cosa creare un gruppo di risorse con az group create.Create a resource group with az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.An Azure resource group is a logical container into which Azure resources are deployed and managed.

L'esempio seguente crea un gruppo di risorse denominato myResourceGroupSLB nella località westeurope:The following example creates a resource group named myResourceGroupSLB in the westeurope location:

az group create \
--name myResourceGroupSLB \
--location westeurope

Creare un indirizzo IP pubblico standard con ridondanza della zonaCreate a zone redundant public IP Standard

Per accedere all'app in Internet, assegnare un indirizzo IP pubblico al servizio di bilanciamento del carico.To access your app on the Internet, you need a public IP address for the load balancer. Un front-end con ridondanza della zona viene servito contemporaneamente da tutte le zone di disponibilità di un'area.A zone-redundant front-end is served by all availability zones in a region simultaneously. Creare un indirizzo IP pubblico con ridondanza della zona con AZ Network Public-IP create.Create a zone redundant public IP address with az network public-ip create. Un indirizzo IP pubblico standard viene creato con ridondanza della zona per impostazione predefinita.When you create a Standard Public IP address, it is zone redundant by default.

L'esempio seguente crea un indirizzo IP pubblico con ridondanza della zona denominato myPublicIP nel gruppo di risorse myResourceGroupLoadBalancer.The following example creates a zone redundant public IP address named myPublicIP in the myResourceGroupLoadBalancer resource group.

az network public-ip create \
--resource-group myResourceGroupSLB \
--name myPublicIP \
--sku Standard

Creare un servizio Azure Load Balancer StandardCreate Azure Standard Load Balancer

Questa sezione descrive dettagliatamente come creare e configurare i componenti seguenti del servizio di bilanciamento del carico:This section details how you can create and configure the following components of the load balancer:

  • Un pool IP front-end che riceve il traffico di rete in ingresso sul servizio di bilanciamento del carico.a frontend IP pool that receives the incoming network traffic on the load balancer.
  • Un pool IP back-end a cui il pool front-end invia il traffico di rete con carico bilanciato.a backend IP pool where the frontend pool sends the load balanced network traffic.
  • un probe di integrità che determina l'integrità delle istanze delle macchine virtuali back-enda health probe that determines health of the backend VM instances.
  • una regola di bilanciamento del carico che definisce come verrà distribuito il traffico alle macchine virtuali.a load balancer rule that defines how traffic is distributed to the VMs.

Creare il servizio di bilanciamento del caricoCreate the load balancer

Creare un servizio di bilanciamento del carico standard con il comando az network lb create.Create a Standard load balancer with 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.The following example creates a load balancer named myLoadBalancer and assigns the myPublicIP address to the front-end IP configuration.

az network lb create \
--resource-group myResourceGroupSLB \
--name myLoadBalancer \
--public-ip-address myPublicIP \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--sku Standard

Creare un probe di integrità sulla porta 80Create health probe on port 80

Un probe di integrità controlla tutte le istanze di una macchina virtuale per assicurarsi che possano inviare il traffico di rete.A health probe checks all virtual machine instances to make sure they can send network traffic. L'istanza della macchina virtuale con controlli di probe falliti non viene rimossa dal servizio di bilanciamento del carico fino a quando non è nuovamente online e il controllo dei probe ne certifica l'integrità.The virtual machine instance with failed probe checks is removed from the load balancer until it goes back online and a probe check determines that it's healthy. Creare un probe di integrità con il comando az network lb probe create per monitorare l'integrità delle macchine virtuali.Create a health probe with az network lb probe create to monitor the health of the virtual machines. Per creare un probe di integrità TCP, usare con az network lb probe create.To create a TCP health probe, you use az network lb probe create. L'esempio seguente crea un probe di integrità denominato myHealthProbe:The following example creates a health probe named myHealthProbe:

az network lb probe create \
--resource-group myResourceGroupSLB \
--lb-name myLoadBalancer \
--name myHealthProbe \
--protocol tcp \
--port 80

Creare una regola di bilanciamento del carico per la porta 80Create load balancer rule for port 80

Una regola di bilanciamento del carico definisce la configurazione IP front-end per il traffico in ingresso e il pool IP back-end che riceve il traffico, insieme alla porta di origine e di destinazione necessaria.A load balancer rule defines the front-end IP configuration for the incoming traffic and the back-end IP pool to receive the traffic, along with the required source and destination port. Creare una regola di bilanciamento del carico myLoadBalancerRuleWeb con il comando az network lb rule create per l'ascolto sulla porta 80 nel pool front-end myFrontEndPool e l'invio del traffico di rete con carico bilanciato al pool di indirizzi back-end myBackEndPool sempre tramite la porta 80.Create a load balancer rule myLoadBalancerRuleWeb with az network lb rule create for listening to port 80 in the frontend pool myFrontEndPool and sending load-balanced network traffic to the backend address pool myBackEndPool also using port 80.

az network lb rule create \
--resource-group myResourceGroupSLB \
--lb-name myLoadBalancer \
--name myLoadBalancerRuleWeb \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe

Configurare la rete virtualeConfigure virtual network

Prima di distribuire alcune macchine virtuali e testare il servizio di bilanciamento del carico, creare le risorse di rete virtuale di supporto.Before you deploy some VMs and can test your load balancer, create the supporting virtual network resources.

Crea rete virtualeCreate a virtual network

Creare una rete virtuale denominata myVnet con una subnet denominata mySubnet nel gruppo myResourceGroup con il comando az network vnet create.Create a virtual network named myVnet with a subnet named mySubnet in the myResourceGroup using az network vnet create.

az network vnet create \
--resource-group myResourceGroupSLB \
--location westeurope \
--name myVnet \
--subnet-name mySubnet

Creare un gruppo di sicurezza di reteCreate a network security group

Creare un gruppo di sicurezza di rete denominato myNetworkSecurityGroup per definire le connessioni in ingresso alla rete virtuale con il comando az network nsg create.Create network security group named myNetworkSecurityGroup to define inbound connections to your virtual network with az network nsg create.

az network nsg create \
--resource-group myResourceGroupSLB \
--name myNetworkSecurityGroup

Creare una regola del gruppo di sicurezza di rete denominata myNetworkSecurityGroupRule per la porta 80 con il comando az network nsg rule create.Create a network security group rule named myNetworkSecurityGroupRule for port 80 with az network nsg rule create.

az network nsg rule create \
--resource-group myResourceGroupSLB \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRule \
--protocol tcp \
--direction inbound \
--source-address-prefix '*' \
--source-port-range '*' \
--destination-address-prefix '*' \
--destination-port-range 80 \
--access allow \
--priority 200

Creare NICCreate NICs

Creare tre schede di interfaccia di rete virtuali con il comando az network nic create e associarle all'indirizzo IP pubblico e al gruppo di sicurezza di rete.Create three virtual NICs with az network nic create and associate them with the Public IP address and the network security group. L'esempio seguente crea sei schede di interfaccia di rete virtuali.The following example creates six virtual NICs. Una scheda di interfaccia di rete virtuale per ogni VM creata per l'app nei passaggi successivi.(One virtual NIC for each VM you create for your app in the following steps). È possibile creare altre schede di interfaccia di rete virtuale e macchine virtuali in qualsiasi momento e aggiungerle al bilanciamento del carico:You can create additional virtual NICs and VMs at any time and add them to the load balancer:

for i in `seq 1 3`; do
    az network nic create \
        --resource-group myResourceGroupSLB \
        --name myNic$i \
        --vnet-name myVnet \
        --subnet mySubnet \
        --network-security-group myNetworkSecurityGroup \
        --lb-name myLoadBalancer \
        --lb-address-pools myBackEndPool
done

Creare i server back-endCreate backend servers

In questo esempio vengono create tre macchine virtuali nelle zone 1, 2 e 3 da usare come server back-end per il bilanciamento del carico.In this example, you create three virtual machines located in zone 1, zone 2, and zone 3 to be used as backend servers for the load balancer. Viene anche installato NGINX nelle macchine virtuali per verificare l'avvenuta creazione del servizio di bilanciamento del carico.You also install NGINX on the virtual machines to verify that the load balancer was successfully created.

Creare una configurazione cloud-initCreate cloud-init config

È possibile usare un file di configurazione cloud-init per installare NGINX ed eseguire un'app Node.js "Hello World" in una macchina virtuale Linux.You can use a cloud-init configuration file to install NGINX and run a 'Hello World' Node.js app on a Linux virtual machine. Nella shell corrente creare un file denominato cloud-init.txt e incollare la configurazione seguente.In your current shell, create a file named cloud-init.txt and copy and paste the following configuration into the shell. Assicurarsi che l'intero file cloud-init venga copiato correttamente, in particolare la prima riga:Make sure that you copy the whole cloud-init file correctly, especially the first line:

#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 le macchine virtuali di zonaCreate the zonal virtual machines

Creare le macchine virtuali con az vm create nelle zone 1, 2 e 3.Create the VMs with az vm create in zone 1, zone 2, and zone 3. L'esempio seguente crea una macchina virtuale in ciascuna zona e genera le chiavi SSH, se non sono già presenti:The following example creates a VM in each zone and generates SSH keys if they do not already exist:

Creare una macchina virtuale in ogni area (zona 1, 2 e 3) in westeurope.Create a VM in each zone (zone 1, zone2, and zone 3) of the westeurope location.

for i in `seq 1 3`; do
  az vm create \
    --resource-group myResourceGroupSLB \
    --name myVM$i \
    --nics myNic$i \
    --image UbuntuLTS \
    --generate-ssh-keys \
    --zone $i \
    --custom-data cloud-init.txt
done

Testare il servizio di bilanciamento del caricoTest the load balancer

Ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con il comando az network public-ip show.Get the public IP address of the load balancer using az network public-ip show.

  az network public-ip show \
    --resource-group myResourceGroupSLB \
    --name myPublicIP \
    --query [ipAddress] \
    --output tsv

Sarà quindi possibile immettere l'indirizzo IP pubblico in un Web browser.You can then enter the public IP address in to a web browser. Si ricordi che sono necessari alcuni minuti affinché le macchine virtuali siano pronte e che il bilanciamento del carico inizi a distribuire traffico ad esse.Remember - it takes a few minutes for the VMs to be ready before the load balancer starts to distribute traffic to them. Verrà visualizzata l'app, con il nome host della macchina virtuale a cui il servizio di bilanciamento del carico ha distribuito il traffico, come nell'esempio seguente:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to as in the following example:

Esecuzione dell'app Node.js

Per verificare la distribuzione del traffico tra le macchine virtuali di tutte e tre le zone di disponibilità che eseguono l'app, arrestare una macchina virtuale in una determinata zona e aggiornare il browser.To see the load balancer distribute traffic across VMs in all three availability zones running your app, you can stop a VM in a particular zone and refresh your browser.

Passaggi successiviNext steps