Tutorial: Lastenausgleich für virtuelle Computer für Hochverfügbarkeit

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

Lastenausgleich bietet ein höheres Maß an Verfügbarkeit durch Verteilung der eingehenden Anforderungen auf mehrere virtuelle Computer. In diesem Tutorial lernen Sie die verschiedenen Komponenten von Azure Load Balancer kennen, die den Datenverkehr verteilen und Hochverfügbarkeit bereitstellen. Folgendes wird vermittelt:

  • Einrichten eines Load Balancers
  • Erstellen eines Integritätstests
  • Erstellen von Datenverkehrsregeln
  • Verwenden von cloud-init zum Installieren einer einfachen Node.js-App
  • Erstellen und Anfügen von virtuellen Computern an das Lastenausgleichsmodul
  • Anzeigen des Lastenausgleichs in Aktion
  • Hinzufügen und Entfernen von virtuellen Computern zu bzw. aus einem Lastenausgleich

Dieses Tutorial verwendet die CLI innerhalb des Diensts Azure Cloud Shell, der ständig auf die neueste Version aktualisiert wird. Wählen Sie zum Öffnen von Cloud Shell oben in einem Codeblock die Option Ausprobieren aus.

Wenn Sie die CLI lokal installieren und verwenden möchten, müssen Sie für dieses Tutorial die Azure CLI-Version 2.0.30 oder höher ausführen. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Übersicht über den Azure Load Balancer

Ein Azure Load Balancer ist ein Load Balancer der Schicht 4 (TCP, UDP), der Hochverfügbarkeit durch Verteilen des eingehenden Datenverkehrs auf fehlerfreie virtuelle Computer bietet. Der Integritätstest eines Load Balancers überwacht einen bestimmten Port auf jedem virtuellen Computer und verteilt Datenverkehr nur an einen betriebsbereiten virtuellen Computer.

Sie definieren eine Front-End-IP-Konfiguration, die eine oder mehrere öffentliche IP-Adressen enthält. Mit dieser Front-End-IP-Konfiguration sind der Load Balancer und Ihre Anwendungen über das Internet zugänglich.

Virtuelle Computer werden über die zugehörige virtuelle Netzwerkschnittstelle (NIC) mit einem Load Balancer verbunden. Zum Verteilen von Datenverkehr auf die virtuellen Computer enthält ein Back-End-Adresspool die IP-Adressen der virtuellen NICs, die mit dem Load Balancer verbunden sind.

Zur Steuerung des Datenverkehrsflusses definieren Sie Load Balancer-Regeln für spezifische Ports und Protokolle, die den virtuellen Computern zugeordnet sind.

Wenn Sie die Schritte im vorherigen Tutorial zum Erstellen einer VM-Skalierungsgruppe ausgeführt haben, wurde bereits ein Load Balancer erstellt. Alle diese Komponenten wurden für Sie als Teil der Skalierungsgruppe konfiguriert.

Erstellen eines Azure Load Balancers

In diesem Abschnitt wird erläutert, wie Sie die einzelnen Komponenten des Load Balancers erstellen und konfigurieren können. Vor der Erstellung des Load Balancers müssen Sie zunächst mit az group create eine Ressourcengruppe erstellen. Das folgende Beispiel erstellt am Standort eastus eine Ressourcengruppe mit dem Namen myResourceGroupLoadBalancer:

az group create --name myResourceGroupLoadBalancer --location eastus

Erstellen einer öffentlichen IP-Adresse

Um über das Internet auf Ihre App zugreifen zu können, benötigen Sie eine öffentliche IP-Adresse für den Load Balancer. Erstellen Sie mit az network public-ip create eine öffentliche IP-Adresse. Das folgende Beispiel erstellt in der Ressourcengruppe MyResourceGroupLoadBalancer eine öffentliche IP-Adresse mit dem Namen MyPublicIP:

az network public-ip create \
    --resource-group myResourceGroupLoadBalancer \
    --name myPublicIP

Einrichten eines Load Balancers

Erstellen Sie mit az network lb create einen Load Balancer. Im folgenden Beispiel wird der Load Balancer myLoadBalancer erstellt und die Adresse myPublicIP der Front-End-IP-Konfiguration zugewiesen:

az network lb create \
    --resource-group myResourceGroupLoadBalancer \
    --name myLoadBalancer \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --public-ip-address myPublicIP

Erstellen eines Integritätstests

Damit der Load Balancer den Status Ihrer App überwachen kann, verwenden Sie einen Integritätstest. Abhängig von der Reaktion auf Integritätsüberprüfungen werden der Load Balancer-Rotation durch den Integritätstest dynamisch virtuelle Computer hinzugefügt oder daraus entfernt. Falls bei einem virtuellen Computer innerhalb eines Intervalls von 15 Sekunden zwei aufeinanderfolgende Fehler auftreten, wird er standardmäßig aus der Load Balancer-Verteilung entfernt. Integritätstests werden auf der Grundlage eines Protokolls oder einer spezifischen Integritätsprüfungsseite für Ihre App erstellt.

Im folgenden Beispiel wird ein TCP-Test erstellt. Sie können auch benutzerdefinierte HTTP-Tests für differenzierte Integritätsprüfungen erstellen. Bei Verwendung eines benutzerdefinierten HTTP-Tests müssen Sie die Integritätsprüfungsseite erstellen, z.B. healthcheck.js. Der Test muss die HTTP-Antwort 200 OK zurückgeben, damit der Load Balancer den Host nicht aus der Rotation entfernt.

Zum Erstellen eines TCP-Integritätstests verwenden Sie az network lb probe create. Im folgenden Beispiel wird ein Integritätstest mit dem Namen myHealthProbe erstellt:

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

Erstellen einer Load Balancer-Regel

Mithilfe einer Load Balancer-Regel wird definiert, wie Datenverkehr auf die virtuellen Computer verteilt werden soll. Sie definieren 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. Um sicherzustellen, dass nur fehlerfreie virtuelle Computer Datenverkehr empfangen, definieren Sie zudem den zu verwendenden Integritätstest.

Erstellen Sie mit az network lb rule create eine Load Balancer-Regel. Das folgende Beispiel erstellt eine Regel namens myLoadBalancerRule, verwendet den Integritätstest myHealthProbe und führt einen Lastenausgleich für den Datenverkehr an Port 80 aus:

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

Konfigurieren eines virtuellen Netzwerks

Vor der Bereitstellung mehrerer virtueller Computer und dem Testen des Load Balancers müssen Sie zunächst die unterstützenden virtuellen Netzwerkressourcen erstellen. Weitere Informationen zu virtuellen Netzwerken finden Sie im Tutorial Verwalten von virtuellen Azure-Netzwerken.

Erstellen von Netzwerkressourcen

Erstellen Sie mit az network vnet create ein virtuelles Netzwerk. Im folgenden Beispiel werden ein virtuelles Netzwerk mit dem Namen myVnet und einem Subnetz mit dem Namen mySubnet erstellt:

az network vnet create \
    --resource-group myResourceGroupLoadBalancer \
    --name myVnet \
    --subnet-name mySubnet

Zum Hinzufügen einer Netzwerksicherheitsgruppe verwenden Sie az network nsg create. Im folgenden Beispiel wird eine Netzwerksicherheitsgruppe namens myNetworkSecurityGroup erstellt:

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

Erstellen Sie mit az network nsg rule create eine Netzwerksicherheitsgruppen-Regel. Im folgenden Beispiel wird eine Netzwerksicherheitsgruppen-Regel namens myNetworkSecurityGroupRule erstellt:

az network nsg rule create \
    --resource-group myResourceGroupLoadBalancer \
    --nsg-name myNetworkSecurityGroup \
    --name myNetworkSecurityGroupRule \
    --priority 1001 \
    --protocol tcp \
    --destination-port-range 80

Virtuelle NICs werden mit az network nic create erstellt. Im folgenden Beispiel werden drei virtuelle NICs erstellt (jeweils eine virtuelle NIC pro virtuellem Computer, den Sie in den folgenden Schritten für Ihre App erstellen). Sie können jederzeit weitere virtuelle NICs und virtuelle Computer erstellen und dem Load Balancer hinzufügen:

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

Fahren Sie mit dem nächsten Schritt fort, wenn alle drei virtuellen NICs erstellt wurden.

Erstellen von virtuellen Computern

Erstellen der cloud-init-Konfiguration

In einem vorherigen Tutorial zum Anpassen eines virtuellen Linux-Computers beim ersten Start haben Sie erfahren, wie die Anpassung für virtuelle Computer mit cloud-init automatisiert wird. Mithilfe der gleichen cloud-init-Konfigurationsdatei können Sie im nächsten Schritt NGINX installieren und eine einfache Node.js-App „Hallo Welt“ ausführen. Um den Load Balancer in Aktion zu sehen, greifen Sie am Ende des Tutorials auf diese einfache App in einem Webbrowser zu.

Erstellen Sie in der aktuellen Shell eine Datei namens cloud-init.txt, und fügen Sie die folgende Konfiguration ein. Erstellen Sie die Datei beispielsweise in Cloud Shell, nicht auf dem lokalen Computer. Geben Sie sensible-editor cloud-init.txt ein, um die Datei zu erstellen und eine Liste der verfügbaren Editoren anzuzeigen. Stellen Sie sicher, dass die gesamte Datei „cloud-init“ ordnungsgemäß kopiert wird, insbesondere die erste Zeile:

#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

Fügen Sie die virtuellen Computer in eine Verfügbarkeitsgruppe ein, um die Hochverfügbarkeit Ihrer App zu optimieren. Weitere Informationen zu Verfügbarkeitsgruppen finden Sie im vorherigen Tutorial Erstellen von hoch verfügbaren virtuellen Computern.

Erstellen Sie mithilfe von az vm availability-set create eine Verfügbarkeitsgruppe. Im folgenden Beispiel wird eine Verfügbarkeitsgruppe namens myAvailabilitySet erstellt:

az vm availability-set create \
    --resource-group myResourceGroupLoadBalancer \
    --name myAvailabilitySet

Jetzt können Sie mit az vm create die virtuellen Computer erstellen. Im folgenden Beispiel werden drei virtuelle Computer erstellt und SSH-Schlüssel generiert, sofern sie noch nicht vorhanden sind:

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

Es gibt Hintergrundaufgaben, die weiterhin ausgeführt werden, wenn Ihnen von der Azure CLI wieder eine Eingabeaufforderung angezeigt wird. Der Parameter --no-wait sorgt dafür, dass nicht auf den Abschluss aller Aufgaben gewartet wird. Unter Umständen dauert es noch einige Minuten, bis Sie auf die App zugreifen können. Der Integritätstest des Load Balancers erkennt automatisch, wenn die App auf den einzelnen virtuellen Computern ausgeführt wird. Sobald die App ausgeführt wird, wird der Datenverkehr auf der Grundlage der Load Balancer-Regel verteilt.

Testen des Load Balancers

Rufen Sie mit az network public-ip show die öffentliche IP-Adresse Ihres Load Balancers ab. Im folgenden Beispiel wird die IP-Adresse für myPublicIP abgerufen, die wir zuvor erstellt haben:

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

Geben Sie die öffentliche IP-Adresse in einem Webbrowser ein. Nicht vergessen: Es dauert einige Minuten, bis die virtuellen Computer bereit sind und der Load Balancer Datenverkehr an sie verteilen kann. Die App wird wie im folgenden Beispiel mit dem Hostnamen des virtuellen Computers angezeigt, an den der Load Balancer den Datenverkehr verteilt hat:

Ausgeführte Node.js-App

Sie können eine erzwungene Aktualisierung Ihres Webbrowsers durchführen, um zu verfolgen, wie der Load Balancer den Datenverkehr auf alle drei virtuellen Computer verteilt, auf denen Ihre App ausgeführt wird.

VMs hinzufügen und entfernen

Für die virtuellen Computer, auf denen Ihre App ausgeführt wird, sind unter Umständen gelegentlich Wartungsarbeiten erforderlich (etwa die Installation von Betriebssystemupdates). Zur Bewältigung eines höheren Datenverkehrsaufkommens für Ihre App müssen gegebenenfalls weitere virtuelle Computer hinzugefügt werden. In diesem Abschnitt erfahren Sie, wie Sie einen virtuellen Computer aus dem Load Balancer entfernen oder dem Load Balancer einen virtuellen Computer hinzufügen.

Entfernen eines virtuellen Computers aus dem Load Balancer

Mit az network nic ip-config address-pool remove können Sie einen virtuellen Computer aus dem Back-End-Adresspool entfernen. Im folgenden Beispiel wird die virtuelle NIC für myVM2 aus myLoadBalancer entfernt:

az network nic ip-config address-pool remove \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool 

Sie können eine erzwungene Aktualisierung Ihres Webbrowsers durchführen, um zu verfolgen, wie der Load Balancer den Datenverkehr auf die beiden verbleibenden virtuellen Computer verteilt, auf denen Ihre App ausgeführt wird. Nun können Sie Wartungsarbeiten für den virtuellen Computer durchführen und beispielsweise Betriebssystemupdates installieren oder den virtuellen Computer neu starten.

Verwenden Sie az network lb address-pool show, um eine Liste der virtuellen Computer mit NICs anzuzeigen, die mit dem Load Balancer verbunden sind. Die ID der virtuellen NIC kann wie folgt abgefragt und gefiltert werden:

az network lb address-pool show \
    --resource-group myResourceGroupLoadBalancer \
    --lb-name myLoadBalancer \
    --name myBackEndPool \
    --query backendIpConfigurations \
    --output tsv | cut -f5

Die Ausgabe sieht in etwa wie das folgende Beispiel aus. Hier sehen Sie, dass die virtuelle NIC für VM 2 nicht mehr Teil des Back-End-Adresspools ist:

/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic1/ipConfigurations/ipconfig1
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic3/ipConfigurations/ipconfig1

Hinzufügen eines virtuellen Computers zum Load Balancer

Wenn Sie die Wartungsarbeiten für den virtuellen Computer abgeschlossen haben oder die Kapazität erweitern möchten, können Sie dem Back-End-Adresspool mit az network nic ip-config address-pool add einen virtuellen Computer hinzufügen. Im folgenden Beispiel wird die virtuelle NIC für myVM2 zu myLoadBalancer hinzugefügt:

az network nic ip-config address-pool add \
    --resource-group myResourceGroupLoadBalancer \
    --nic-name myNic2 \
    --ip-config-name ipConfig1 \
    --lb-name myLoadBalancer \
    --address-pool myBackEndPool

Verwenden Sie erneut az network lb address-pool show aus dem vorhergehenden Schritt, um sicherzustellen, dass die virtuelle NIC mit dem Back-End-Adresspool verbunden ist.

Nächste Schritte

In diesem Tutorial haben Sie einen Load Balancer erstellt und ihm einen virtuellen Computer angefügt. Sie haben Folgendes gelernt:

  • Erstellen einer Azure Load Balancer-Instanz
  • Erstellen des Integritätstests für den Load Balancer
  • Erstellen von Load Balancer-Regeln
  • Verwenden von cloud-init zum Erstellen einer einfachen Node.js-App
  • Erstellen und Anfügen von virtuellen Computern an einen Load Balancer
  • Anzeigen eines Load Balancers im Betrieb
  • Hinzufügen und Entfernen von virtuellen Computern zu bzw. aus einem Load Balancer

Im nächsten Tutorial erhalten Sie weitere Informationen zu virtuellen Azure-Netzwerkkomponenten.