Lastenausgleich für VMs über alle Verfügbarkeitszonen hinweg mithilfe der Azure CLILoad balance VMs across all availability zones using Azure CLI

In diesem Artikel werden die Schritte zum Erstellen eines öffentlichen Load Balancer Standard mit einem zonenredundanten Front-End erläutert, um Zonenredundanz ohne Abhängigkeit von mehreren DNS-Einträgen zu erzielen.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. Eine einzelne Front-End-IP-Adresse ist automatisch zonenredundant.A single front-end IP address is automatically zone-redundant. Durch die Verwendung eines zonenredundanten Front-Ends für Ihren Load Balancer können Sie mit einer einzelnen IP-Adresse jetzt eine beliebige VM in einem virtuellen Netzwerk innerhalb einer Region über alle Verfügbarkeitszonen hinweg erreichen.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. Verwenden Sie Verfügbarkeitszonen, um Ihre Apps und Daten vor einem unwahrscheinlichen Fehler oder Ausfall eines gesamten Rechenzentrums zu schützen.Use availability zones to protect your apps and data from an unlikely failure or loss of an entire datacenter.

Informationen zur Verwendung von Verfügbarkeitszonen mit Load Balancer Standard finden Sie unter Load Balancer Standard und Verfügbarkeitszonen.For more information about using Availability zones with Standard Load Balancer, see Standard Load Balancer and Availability Zones.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

Verwenden von Azure Cloud ShellUse Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Starten von Azure Cloud Shell:To start Azure Cloud Shell:

OptionOption Beispiel/LinkExample/Link
Klicken Sie in der rechten oberen Ecke eines Codeblocks auf Ausprobieren.Select Try It in the upper-right corner of a code block. Durch die Auswahl von Ausprobieren wird der Code nicht automatisch in Cloud Shell kopiert.Selecting Try It doesn't automatically copy the code to Cloud Shell. Beispiel für „Testen Sie es.“ für Azure Cloud Shell
Rufen Sie https://shell.azure.com auf, oder wählen Sie die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. Starten von Cloud Shell in einem neuen FensterLaunch Cloud Shell in a new window
Wählen Sie im Azure-Portal oben rechts in der Menüleiste die Schaltfläche Cloud Shell.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Cloud Shell-Schaltfläche im Azure-Portal

Ausführen des Codes in diesem Artikel in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Starten Sie Cloud Shell.Start Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock, um den Code zu kopieren.Select the Copy button on a code block to copy the code.

  3. Fügen Sie den Code mit STRG+UMSCHALT+V unter Windows und Linux oder Cmd+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Drücken Sie die EINGABETASTE, um den Code auszuführen.Select Enter to run the code.

Wenn Sie die CLI lokal installieren und verwenden möchten, müssen Sie für dieses Tutorial die Azure CLI-Version 2.0.17 oder höher ausführen.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. Führen Sie az --version aus, um die Version zu finden.To find the version, run az --version. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install Azure CLI.

Hinweis

Unterstützung für Verfügbarkeitszonen ist für ausgewählte Azure-Ressourcen und -Regionen sowie VM-Größenkategorien verfügbar.Support for Availability Zones is available for select Azure resources and regions, and VM size families. Weitere Informationen zu den ersten Schritten sowie zu den Azure-Ressourcen, -Regionen und VM-Größenkategorien, die mit Verfügbarkeitszonen verwendet werden können, finden Sie unter Overview of Availability Zones in Azure (Preview) (Übersicht über Verfügbarkeitszonen in Azure (Vorschauversion)).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. Wenn Sie Unterstützung benötigen, können Sie über StackOverflow Kontakt aufnehmen oder ein Azure-Supportticket erstellen.For support, you can reach out on StackOverflow or open an Azure support ticket.

Erstellen einer RessourcengruppeCreate a resource group

Erstellen Sie mit az group create eine Ressourcengruppe.Create a resource group with az group create. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.An Azure resource group is a logical container into which Azure resources are deployed and managed.

Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroupSLB am Standort Europa, Westen erstellt:The following example creates a resource group named myResourceGroupSLB in the westeurope location:

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

Erstellen einer zonenredundanten öffentlichen Standard-IP-AdresseCreate a zone redundant public IP Standard

Um über das Internet auf Ihre App zugreifen zu können, benötigen Sie eine öffentliche IP-Adresse für den Load Balancer.To access your app on the Internet, you need a public IP address for the load balancer. Ein zonenredundantes Front-End wird von allen Verfügbarkeitszonen in einer Region gleichzeitig versorgt.A zone-redundant front-end is served by all availability zones in a region simultaneously. Erstellen Sie mit az network public-ip create eine zonenredundante öffentliche IP-Adresse.Create a zone redundant public IP address with az network public-ip create. Wenn Sie eine öffentliche Standard-IP-Adresse erstellen, ist diese standardmäßig zonenredundant.When you create a Standard Public IP address, it is zone redundant by default.

Im folgenden Beispiel wird in der Ressourcengruppe myResourceGroupLoadBalancer eine zonenredundante öffentliche IP-Adresse mit dem Namen myPublicIP erstellt.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

Erstellen eines Azure Load Balancer StandardCreate Azure Standard Load Balancer

In diesem Abschnitt erfahren Sie, wie Sie die folgenden Komponenten des Lastenausgleichs erstellen und konfigurieren:This section details how you can create and configure the following components of the load balancer:

  • Front-End-IP-Pool, der den eingehenden Netzwerkdatenverkehr für den Load Balancer empfängta frontend IP pool that receives the incoming network traffic on the load balancer.
  • Back-End-IP-Pool, an den der Front-End-Pool den Netzwerkdatenverkehr sendet, für den ein Lastenausgleich durchgeführt wurdea backend IP pool where the frontend pool sends the load balanced network traffic.
  • Integritätstest zum Ermitteln der Integrität der Back-End-VM-Instanzena health probe that determines health of the backend VM instances.
  • Lastenausgleichsregel, mit der definiert wird, wie Datenverkehr auf die virtuellen Computer verteilt werden solla load balancer rule that defines how traffic is distributed to the VMs.

Erstellen des LastenausgleichsCreate the load balancer

Erstellen Sie mit az network lb create einen Standard-Lastenausgleich.Create a Standard load balancer with az network lb create. Im folgenden Beispiel wird der Lastenausgleich myLoadBalancer erstellt und die Adresse myPublicIP der Front-End-IP-Konfiguration zugewiesen.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

Erstellen eines Integritätstests für Port 80Create health probe on port 80

Ein Integritätstest überprüft alle VM-Instanzen, um sicherzustellen, dass sie Netzwerkdatenverkehr senden können.A health probe checks all virtual machine instances to make sure they can send network traffic. VM-Instanzen mit Fehlern beim Test werden aus dem Load Balancer entfernt, bis sie wieder online geschaltet werden und beim Test überprüft wurde, dass sie fehlerfrei sind.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. Erstellen Sie mit „az network lb probe create“ einen Integritätstest zur Überwachung der Integrität der virtuellen Computer.Create a health probe with az network lb probe create to monitor the health of the virtual machines. Zum Erstellen eines TCP-Integritätstests verwenden Sie az network lb probe create.To create a TCP health probe, you use az network lb probe create. Im folgenden Beispiel wird ein Integritätstest mit dem Namen myHealthProbe erstellt: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

Erstellen einer Lastenausgleichsregel für Port 80Create load balancer rule for port 80

Mit einer Lastenausgleichsregel wird die Front-End-IP-Konfiguration für den eingehenden Datenverkehr und den Back-End-IP-Pool zum Empfangen des Datenverkehrs zusammen mit dem erforderlichen Quell- und Zielport definiert.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. Erstellen Sie mit az network lb rule create eine Lastenausgleichsregel mit dem Namen myLoadBalancerRuleWeb, die an Port 80 des Front-End-Pools myFrontEndPool lauscht und den Netzwerkdatenverkehr nach erfolgtem Lastenausgleich an den Back-End-Adresspool myBackEndPool sendet, wobei ebenfalls der Port 80 verwendet wird.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

Konfigurieren eines virtuellen NetzwerksConfigure virtual network

Vor der Bereitstellung mehrerer virtueller Computer und dem Testen des Lastenausgleichs müssen Sie zunächst die unterstützenden virtuellen Netzwerkressourcen erstellen.Before you deploy some VMs and can test your load balancer, create the supporting virtual network resources.

Erstellen eines virtuellen NetzwerksCreate a virtual network

Erstellen Sie ein virtuelles Netzwerk mit dem Namen myVnet und dem Subnetz mySubnet in myResourceGroup, indem Sie den Befehl az network vnet create verwenden.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

Erstellen einer NetzwerksicherheitsgruppeCreate a network security group

Erstellen Sie mit az network nsg create eine Netzwerksicherheitsgruppe mit dem Namen myNetworkSecurityGroup, um eingehende Verbindungen für Ihr virtuelles Netzwerk zu definieren.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

Erstellen Sie mit az network nsg rule create eine Netzwerksicherheitsgruppenregel namens myNetworkSecurityGroupRule für Port 80.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

Erstellen von NICsCreate NICs

Erstellen Sie mit az network nic create drei virtuelle Netzwerkkarten, und ordnen Sie sie der öffentlichen IP-Adresse und der Netzwerksicherheitsgruppe zu.Create three virtual NICs with az network nic create and associate them with the Public IP address and the network security group. Im folgenden Beispiel werden sechs virtuelle Netzwerkkarten erstellt.The following example creates six virtual NICs. (jeweils eine virtuelle NIC pro virtuellem Computer, den Sie in den folgenden Schritten für Ihre App erstellen).(One virtual NIC for each VM you create for your app in the following steps). Sie können jederzeit weitere virtuelle NICs und virtuelle Computer erstellen und dem Load Balancer hinzufügen: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

Erstellen von Back-End-ServernCreate backend servers

In diesem Beispiel erstellen Sie drei virtuelle Computer in Zone 1, Zone 2 und Zone 3, die als Back-End-Server für den Lastenausgleich verwendet werden sollen.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. Außerdem installieren Sie NGINX auf den virtuellen Computern, um zu überprüfen, ob der Lastenausgleich erfolgreich erstellt wurde.You also install NGINX on the virtual machines to verify that the load balancer was successfully created.

Erstellen der cloud-init-KonfigurationCreate cloud-init config

Mithilfe einer cloud-init-Konfigurationsdatei können Sie NGINX installieren und eine Node.js-App vom Typ „Hallo Welt“ auf einem virtuellen Linux-Computer ausführen.You can use a cloud-init configuration file to install NGINX and run a 'Hello World' Node.js app on a Linux virtual machine. Erstellen Sie in der aktuellen Shell eine Datei namens „cloud-init.txt“, kopieren Sie die folgende Konfiguration, und fügen Sie sie in die Shell ein.In your current shell, create a file named cloud-init.txt and copy and paste the following configuration into the shell. Stellen Sie sicher, dass die gesamte cloud-init-Datei ordnungsgemäß kopiert wird, insbesondere die erste Zeile: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

Erstellen von virtuellen Computern in einer ZoneCreate the zonal virtual machines

Erstellen Sie mit az vm create die VMs in Zone 1, Zone 2 und Zone 3.Create the VMs with az vm create in zone 1, zone 2, and zone 3. Im folgenden Beispiel wird in jeder Zone eine VM erstellt und es werden SSH-Schlüssel generiert, sofern sie noch nicht vorhanden sind:The following example creates a VM in each zone and generates SSH keys if they do not already exist:

Erstellen Sie eine VM in jeder Zone (Zone 1, Zone 2 und Zone 3) am Standort Europa, Westen.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

Testen des LastenausgleichsTest the load balancer

Rufen Sie mithilfe von az network public-ip show die öffentliche IP-Adresse des Lastenausgleichs ab.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

Geben Sie die öffentliche IP-Adresse in einem Webbrowser ein.You can then enter the public IP address in to a web browser. Nicht vergessen: Es dauert einige Minuten, bis die virtuellen Computer bereit sind und der Load Balancer Datenverkehr an sie verteilen kann.Remember - it takes a few minutes for the VMs to be ready before the load balancer starts to distribute traffic to them. Die App wird wie im folgenden Beispiel mit dem Hostnamen des virtuellen Computers angezeigt, an den der Load Balancer den Datenverkehr verteilt hat:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to as in the following example:

Ausgeführte Node.js-App

Damit der Datenverkehr auf die VMs in allen drei Verfügbarkeitszonen, in denen Ihre App ausgeführt wird, durch den Lastenausgleich verteilt wird, können Sie eine VM in einer bestimmten Zone beenden und Ihren Browser aktualisieren.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.

Nächste SchritteNext steps