Zelfstudie: Taken van VM's verdelen voor hoge beschikbaarheid
Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️
Taakverdeling zorgt voor een hogere beschikbaarheid door binnenkomende aanvragen te spreiden over meerdere virtuele machines. In deze zelfstudie leert u meer over de verschillende onderdelen van Azure Load Balancer die het verkeer verdelen en zorgen voor hoge beschikbaarheid. In deze zelfstudie leert u procedures om het volgende te doen:
- Een load balancer maken
- Een statustest maken
- Verkeersregels maken
- Cloud-init gebruiken om een eenvoudige Node.js-app te installeren
- Virtuele machines maken en deze koppelen aan de load balancer
- De load balancer in actie weergeven
- VM's toevoegen aan en verwijderen uit de load balancer
In deze zelfstudie wordt gebruikgemaakt van de CLI in de Azure Cloud Shell, die voortdurend wordt bijgewerkt naar de nieuwste versie. Als u de Cloud Shell wilt openen, selecteert u Probeer het bovenaan een willekeurig codeblok.
Als u ervoor kiest om de CLI lokaal te installeren en te gebruiken, moet u Azure CLI 2.0.30 of hoger gebruiken voor deze zelfstudie. Voer az --version
uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.
Overzicht van Azure Load Balancer
Een Azure-load balancer is een Layer-4-load balancer (TCP, UDP) die zorgt voor hoge beschikbaarheid door inkomend verkeer te distribueren tussen correct werkende virtuele machines. Tijdens een statustest van een load balancer wordt een bepaalde poort op elke VM gecontroleerd en wordt verkeer alleen naar een werkende VM gedistribueerd.
U definieert een front-end-IP-configuratie met een of meer openbare IP-adressen. Dankzij deze front-end-IP-configuratie zijn uw load balancer en toepassingen toegankelijk via internet.
Virtuele machines maken verbinding met een load balancer via hun virtuele netwerkinterfacekaart (NIC). Om verkeer te distribueren naar de VM's bevat een back-end-adresgroep de IP-adressen van de virtuele netwerkinterfacekaarten (NIC's) die zijn verbonden met de load balancer.
Om de verkeersstroom te regelen, definieert u load balancer-regels voor specifieke poorten en protocollen die aan uw VM's worden toegewezen.
Als u de vorige zelfstudie over het maken van een virtuele-machineschaalset hebt gevolgd, is er een load balancer voor u gemaakt. Al deze onderdelen zijn geconfigureerd als onderdeel van de schaalset.
Azure-load balancer maken
In dit gedeelte wordt beschreven hoe u elk onderdeel van de load balancer kunt maken en configureren. Voordat u een load balancer kunt maken, moet u eerst een resourcegroep maken met az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroupLoadBalancer gemaakt op de locatie VS Oost:
az group create --name myResourceGroupLoadBalancer --location eastus
Een openbaar IP-adres maken
Om toegang te krijgen tot uw app op internet, hebt u een openbaar IP-adres nodig voor de load balancer. Maak een openbaar IP-adres met az network public-ip create. In het volgende voorbeeld wordt een openbaar IP-adres met de naam myPublicIP gemaakt in de resourcegroep myResourceGroupLoadBalancer:
az network public-ip create \
--resource-group myResourceGroupLoadBalancer \
--name myPublicIP
Een load balancer maken
Maak een load balancer met az network lb create. In het volgende voorbeeld wordt een load balancer met de naam myLoadBalancer gemaakt en wordt het adres myPublicIP aan de front-end-IP-configuratie toegewezen:
az network lb create \
--resource-group myResourceGroupLoadBalancer \
--name myLoadBalancer \
--frontend-ip-name myFrontEndPool \
--backend-pool-name myBackEndPool \
--public-ip-address myPublicIP
Een statustest maken
U gebruikt een statustest om de load balancer de status van uw app te laten bewaken. De statustest voegt dynamisch VM's toe aan de load balancer-rotatie of verwijdert ze, op basis van hun reactie op statuscontroles. Standaard wordt een VM uit de load balancer-distributie verwijderd na twee opeenvolgende fouten met intervallen van 15 seconden. U maakt een statustest op basis van een protocol of een specifieke statuscontrolepagina voor uw app.
In het volgende voorbeeld wordt een TCP-test gemaakt. U kunt ook aangepaste HTTP-tests maken voor meer fijnmazige statuscontroles. Wanneer u een aangepaste HTTP-test maakt, moet u de statuscontrolepagina maken, zoals healthcheck.js. De test moet het antwoord HTTP 200 OK voor de load balancer retourneren om de host in rotatie te houden.
U gebruikt az network lb probe create om een TCP-statustest te maken. In het volgende voorbeeld wordt een statustest gemaakt met de naam myHealthProbe:
az network lb probe create \
--resource-group myResourceGroupLoadBalancer \
--lb-name myLoadBalancer \
--name myHealthProbe \
--protocol tcp \
--port 80
Een load balancer-regel maken
Een load balancer-regel wordt gebruikt om de verdeling van het verkeer over de VM's te definiëren. U definieert de front-end-IP-configuratie voor het inkomende verkeer en de back-end-IP-groep om het verkeer te ontvangen, samen met de gewenste bron- en doelpoort. Om ervoor te zorgen dat alleen VM's met een goede status verkeer ontvangen, moet u ook de te gebruiken statustest definiëren.
Gebruik az network lb rule create om een load balancer-regel te maken. In het volgende voorbeeld wordt een regel met de naam myLoadBalancerRule gemaakt, de statustest myHealthProbe gebruikt en het verkeer verdeeld op poort 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
Virtueel netwerk configureren
Voordat u enkele VM's implementeert en uw balancer test, maakt u de ondersteunende virtuele-netwerkbronnen. Zie de zelfstudie Manage Azure Virtual Networks (Virtuele Azure-netwerken beheren) voor meer informatie over virtuele netwerken.
Netwerkbronnen maken
Maak een virtueel netwerk met az network vnet create. In het volgende voorbeeld wordt een virtueel netwerk gemaakt met de naam myVnet met het subnet mySubnet:
az network vnet create \
--resource-group myResourceGroupLoadBalancer \
--name myVnet \
--subnet-name mySubnet
Als u een netwerkbeveiligingsgroep wilt toevoegen, gebruikt u az network nsg create. In het volgende voorbeeld wordt een netwerkbeveiligingsgroep met de naam myNetworkSecurityGroup gemaakt:
az network nsg create \
--resource-group myResourceGroupLoadBalancer \
--name myNetworkSecurityGroup
Maak een netwerkbeveiligingsgroepregel met az network nsg rule create. In het volgende voorbeeld wordt een netwerkbeveiligingsgroepregel met de naam myNetworkSecurityGroupRule gemaakt:
az network nsg rule create \
--resource-group myResourceGroupLoadBalancer \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRule \
--priority 1001 \
--protocol tcp \
--destination-port-range 80
Virtuele NIC's zijn gemaakt met az network nic create. In het volgende voorbeeld worden drie virtuele NIC's gemaakt. (Eén virtuele NIC voor elke VM die u in de volgende stappen voor uw app maakt). U kunt op elk gewenst moment extra virtuele NIC's en VM's maken en toevoegen aan de load balancer:
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
Wanneer alle drie de virtuele NIC's zijn gemaakt, gaat u door naar de volgende stap
Virtuele machines maken
Een cloud-init-configuratiebestand maken
In een vorige zelfstudie over Het aanpassen van een virtuele Linux-machine bij de eerste keer opstarten, hebt u geleerd hoe u de aanpassing van de virtuele machine met cloud-init moet automatiseren. U kunt hetzelfde cloud-init-configuratiebestand gebruiken om NGINX te installeren en een eenvoudige 'Hallo wereld' Node.js-app uit te voeren in de volgende stap. Als u de load balancer in actie wilt zien, opent u aan het einde van de zelfstudie deze simpele app in een webbrowser.
Maak in uw huidige shell een bestand met de naam cloud-init.txt en plak de volgende configuratie. Maak bijvoorbeeld het bestand in de Cloud Shell, niet op uw lokale computer. Voer sensible-editor cloud-init.txt
in voor het maken van het bestand en om een overzicht van beschikbare editors te zien. Controleer of het hele cloud-init-bestand correct is gekopieerd, met name de eerste regel:
#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
Virtuele machines maken
Verbeter de hoge beschikbaarheid van uw app door uw VM's in een beschikbaarheidsset te plaatsen. Zie de vorige zelfstudie How to create highly available virtual machines (Maximaal beschikbare virtuele machines maken) voor meer informatie over beschikbaarheidssets.
Maak een beschikbaarheidsset met behulp van az vm availability-set create. In het volgende voorbeeld wordt een beschikbaarheidsset met de naam myAvailabilitySet gemaakt:
az vm availability-set create \
--resource-group myResourceGroupLoadBalancer \
--name myAvailabilitySet
Nu kunt u de VM's maken met az vm create. In het volgende voorbeeld worden drie VM's gemaakt en SSH-sleutels gegenereerd als deze nog niet bestaan:
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
Er zijn achtergrondtaken die nog worden uitgevoerd nadat u door de Azure CLI bent teruggeleid naar de prompt. De parameter --no-wait
wacht niet totdat alle taken zijn voltooid. Het duurt mogelijk nog een paar minuten voordat u toegang hebt tot de app. De statustest van de load balancer wordt automatisch gedetecteerd wanneer de app wordt uitgevoerd op een virtuele machine. Wanneer de app wordt uitgevoerd, begint de load balancer-regel het verkeer te distribueren.
Load balancer testen
Achterhaal het openbare IP-adres van de load balancer met az network public-ip show. In het volgende voorbeeld wordt het IP-adres opgehaald voor het eerder gemaakte myPublicIP:
az network public-ip show \
--resource-group myResourceGroupLoadBalancer \
--name myPublicIP \
--query [ipAddress] \
--output tsv
Vervolgens kunt u het openbare IP-adres invoeren in een webbrowser. Het duurt enkele minuten voordat de virtuele machines gereed zijn en de load balancer begint met het distribueren van verkeer naar de VM's. De app wordt weergegeven met de hostnaam van de VM waarnaar de load balancer verkeer heeft gedistribueerd, zoals in het volgende voorbeeld:
Als u wilt zien hoe de load balancer verkeer distribueert naar alle drie de VM's waarop uw app wordt uitgevoerd, kunt u vernieuwing van uw webbrowser afdwingen.
VM's toevoegen en verwijderen
Het is mogelijk dat u onderhoud moet uitvoeren op de VM's waarop uw app wordt uitgevoerd, zoals het installeren van besturingssysteemupdates. U moet mogelijk extra VM's toevoegen vanwege toegenomen verkeer naar uw app. In dit gedeelte wordt beschreven hoe u een VM aan de load balancer toevoegt of ervan verwijdert.
Een VM van de load balancer verwijderen
U kunt een VM verwijderen uit de back-end-adresgroep met az network nic ip-config address-pool remove. In het volgende voorbeeld wordt de virtuele NIC voor myVM2 van myLoadBalancer verwijderd:
az network nic ip-config address-pool remove \
--resource-group myResourceGroupLoadBalancer \
--nic-name myNic2 \
--ip-config-name ipConfig1 \
--lb-name myLoadBalancer \
--address-pool myBackEndPool
Als u wilt zien hoe de load balancer verkeer distribueert naar de resterende twee VM's waarop uw app wordt uitgevoerd, kunt u vernieuwing van uw webbrowser afdwingen. U kunt nu onderhoud uitvoeren op de VM, zoals het installeren van updates voor het besturingssysteem of het opnieuw opstarten van de VM.
Gebruik az network lb address-pool show om een overzicht van VM's met virtuele NIC's die zijn verbonden met de load balancer weer te geven. Voer als volgt query's uit en filter op de id van de virtuele NIC:
az network lb address-pool show \
--resource-group myResourceGroupLoadBalancer \
--lb-name myLoadBalancer \
--name myBackEndPool \
--query backendIpConfigurations \
--output tsv | cut -f5
De uitvoer is vergelijkbaar met het volgende voorbeeld, waaruit blijkt dat de virtuele NIC voor VM 2 niet langer deel uitmaakt van de back-end-adresgroep:
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic1/ipConfigurations/ipconfig1
/subscriptions/<guid>/resourceGroups/myResourceGroupLoadBalancer/providers/Microsoft.Network/networkInterfaces/myNic3/ipConfigurations/ipconfig1
Een VM toevoegen aan de load balancer
Na het uitvoeren van VM-onderhoud, of als u de capaciteit wilt uitbreiden, kunt u een VM toevoegen aan de back-end-adresgroep met az network nic ip-config address-pool add. In het volgende voorbeeld wordt de virtuele NIC voor myVM2 aan myLoadBalancer toegevoegd:
az network nic ip-config address-pool add \
--resource-group myResourceGroupLoadBalancer \
--nic-name myNic2 \
--ip-config-name ipConfig1 \
--lb-name myLoadBalancer \
--address-pool myBackEndPool
Gebruik opnieuw az network lb address-pool show uit de vorige stap om te controleren of de virtuele NIC is verbonden met de back-end-adresgroep.
Volgende stappen
In deze zelfstudie hebt u een load balancer gemaakt en er VM's aan gekoppeld. U hebt geleerd hoe u:
- Een Azure-load balancer maken
- Een load balancer-statustest maken
- Load balancer-verkeersregels maken
- Cloud-init gebruiken voor het maken van een eenvoudige Node.js-app
- Virtuele machines maken en koppelen aan een load balancer
- Een load balancer in actie zien
- VM's toevoegen aan en verwijderen uit een load balancer
Ga naar de volgende zelfstudie voor meer informatie over de onderdelen van het virtuele Azure-netwerk.