Binnen je OpenStack-project heb je de mogelijkheid om een load balancer aan te maken. Een load balancer verdeelt netwerkverkeer over meerdere servers binnen OpenStack, ookwel Instances genoemd. Zo zorg je ervoor dat zelfs onder hoge belasting jouw applicatie niet overbelast raakt. Ook verbetert het de betrouwbaarheid, want als een server uitvalt, kan de load balancer het verkeer verdelen over de servers die nog wel beschikbaar zijn.
In deze handleiding leggen we je uit hoe je een load balancer kan aanmaken met drie webservers in de aangesloten pool. Mocht je al een netwerk, router en meerdere webservers geconfigureerd hebben dan kan je direct doorgaan naar het kopje ‘De load balancer maken’. De stappen voor het aanmaken van een load balancer komen neer op:
- Een intern/private netwerk maken
- De webservers maken
- De load balancer maken
De load balancer kan in één availability zone worden opgeleverd. Om de load balancer highly available te maken, moet er een extra load balancer aangemaakt worden in een van de andere zones. Octavia (en vergelijkbare tools) stellen je in staat om bij onbereikbaarheid van de ene load balancer de load balancer in de andere zone te gebruiken.
Een intern netwerk maken
Voordat we een load balancer maken, heb je een intern ofwel private OpenStack-netwerk nodig. In deze handleiding noemen we het netwerk 'webserver-network'. Voel je vooral vrij om je eigen naam naar keuze toe te wijzen aan het netwerk.
Na het aanmaken van het netwerk verbind je deze met je webservers.
In deze tutorial vind je een stapsgewijze handleiding over hoe je een intern netwerk kunt maken. Vervang de naam van het netwerk door 'webserver-netwerk' en de naam van het subnet door 'webserver-subnet'.
De webservers maken
In deze paragraaf configureer je drie identieke webservers. Wij raden aan om bij het gebruik van een load balancer de daaraan gekoppelde instances identiek te configureren. Het is immers de bedoeling dat de eindgebruiker altijd bij hetzelfde resultaat terecht komt, ongeacht van naar welke server deze verwezen wordt door de load balancer. Het aanmaken van bijvoorbeeld één instance en deze achter een load balancer plaatsen heeft weinig zin omdat de ‘load’ dan niet verdeeld kan worden over meerdere instances. Alle aantallen van instances van twee tot meer zullen wel effect hebben, let dan wel goed op dat je deze in unieke 'availability zones' plaatst voor redundantie. Je bent vrij om een andere use case te gebruiken, bijvoorbeeld een database of custom applicatie.
Mocht je nog niet weten hoe je een instance aanmaakt, dan kan je gebruik maken van onze ‘OpenStack getting started’-handleiding. De stappen die je in de getting started-handleiding bij stap 2 volgt worden vervangen door de onderstaande stappen:
Stap 1
Door in het linkermenu op de knop ‘Details’ te drukken krijg je de onderstaande instellingen te zien. Deze instellingen dienen als een voorbeeld, zorg er voor dat de configuratie die je kiest past bij de toepassing van je load balancer.
In deze tutorial maken we maar gebruik van één availability zone, maar in een productie-omgeving is het aan te raden om je instances te verspreiden over zones zodat je een redundante opstelling hebt.
Stap 2
Bij het tabblad ‘Source’ maken we in deze handleiding gebruik van de image: Ubuntu 22.04 LTS. Maak bij het kiezen van een image voor je webservers een keuze die aansluit bij je toepassing.
Stap 3
Voor het aanmaken van de webservers gebruik je het private/interne netwerk dat je eerder in deze tutorial hebt aangemaakt.
Stap 4
Wijs in ieder geval de security group ‘allow-web’ toe aan de servers. Je bent vrij eventueel nog andere security groups toe te wijzen.
Stap 5
Voor toegang tot je instances kan je één of meerdere key pairs toevoegen, voor het toevoegen van een key pair kan je gebruik maken van de paragraaf Een (SSH) keypair maken uit de Getting Started handleiding
Stap 6
Voor de configuratie van de instances kan je gebruik maken van een cloud-config bestand. Een cloud-config bestand is een bestand voor het initialiseren van een Linux-based cloud instance. Je kan er bijvoorbeeld schijven van de instance mee initialiseren, ssh access toebedelen en andere server taken mee uitvoeren, nog voordat je voor de eerste keer inlogt op de server.
Binnen OpenStack kan je ook gebruik maken van een cloud-init bestand, dat doe je bij het aanmaken van je instance onder het menu-item ‘Configuration’. In deze tutorial maak je gebruik van het onderstaande cloud-init bestand. Plak de ‘cloud-config’-configuratie onder het veld ‘Customization script’. Het bestand in deze tutorial dient alleen als voorbeeld, gebruik deze niet in een productie-omgeving.
#cloud-config
package_upgrade: true
packages:
- apache2
- php
- libapache2-mod-php
write_files:
- path: /var/www/html/index.php
content: |
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>load balancer Tutorial</title>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
<div class='container mt-5'>
<div class='card'>
<div class='card-header'>
Hostname Information
</div>
<div class='card-body'>
<h5 class='card-title'>Server Hostname</h5>
<p class='card-text'><?php echo gethostname(); ?></p>
</div>
</div>
</div>
</body>
</html>
runcmd:
- systemctl restart apache2
Wanneer je de instellingen hebt overgenomen en op ‘LAUNCH INSTANCE’ drukt wordt de hoeveelheid instances aangemaakt die je bij stap 1 onder ‘count’ ingevuld hebt.
Stap 7
Je kan de zojuist aangemaakte instances bekijken door in het linkermenu op ‘Compute’ te klikken en vervolgens in het submenu op ‘Instances’.
De load balancer maken
De volgende stap is het aanmaken van de load balancer, Je maakt een load balancer met een ‘listener’, ‘pool’ en een 'healthmonitor’. Deze onderdelen doen het volgende:
- listener: De listener is een proces dat verantwoordelijk is voor het controleren van inkomende verbindingsverzoeken. De listener verwijst als het ware van een front-end (client naar load balancer) naar een back-end (load balancer naar back-end)
- pool: Een load balancing pool is een verzameling van apparaten, zoals bijvoorbeeld webservers die je groepeert om verkeer te ontvangen en verwerken.
- healthmonitor: Een health monitor controleert de status van de leden van de ‘pool’, om te bepalen naar welke leden er wel of geen verkeer doorgestuurd kan worden.
Stap 1
Ga naar het tabblad ‘Network’ en selecteer ‘Load Balancers’, klik vervolgens op de knop ‘create load balancer’
Stap 2
Vul de gegevens hieronder in de velden in. Voor uitleg over de punten in de afbeelding, verwijzen we je graag naar de opsomming onder de schermafbeelding.
- Naam: webserver-load balancer (je mag hier ook een andere naam gebruiken).
- IP-adres: In deze handleiding laten wij het veld 'IP-address' leeg. Dit zorgt ervoor dat de load balancer een willekeurig ip-adres krijg toegewezen uit het gekoppelde subnet. In een productie-omgeving raden wij aan om hier een floating ip-adres aan te koppelen zodat je load balancer altijd verkeer blijft doorsturen.
- Omschrijving: Load balancer voor onze webservers (je kan hier je eigen omschrijving invullen).
- Availability Zone: Laat leeg of kies een beschikbaarheidszone naar keuze (AMS2-EQ3, AMS2-EU4 of AMS2-GS5).
- Flavor: Kies een flavor naar keuze, voor deze tutorial gebruiken we de Medium flavor. Wij raden aan om met de Medium flavour te starten, wanneer de workload stijgt kan je de flavour altijd opschalen.
- Subnet: webserver-subnet (zoals aangemaakt in paragraaf een intern netwerk aanmaken).
Stap 3
Drup op de knop ‘Next’ om in het tabblad ‘Listener Details' te komen. Vul de volgende velden in:
- Name: webserver-listener-https
- Description: HTTPS-listener voor onze webservers (Vul deze in naar wat het beste is voor jou)
- Protocol: HTTPS
- port: 443
- Admin state up: Yes (Als de beheerstatus ‘YES’ is, verdeelt de load balancer inkomend verkeer tussen de backend-servers. Bij ‘NO’ is hij inactief en verwerkt het geen verkeer.)
Laat alle andere opties zoals ze zijn.
Stap 4
Navigeer naar het tabblad 'Pool Details'.
Voer in de velden de volgende informatie in:
- Name: webserver-pool-https.
- Description: HTTPS-pool voor onze webservers.
- Algorithm: least connections (meer informatie over de verschillende soorten algoritmes en wat ze doen kan je hier vinden).
- Session Persistence: Deze optie zorgt ervoor dat alle requests van een client tijdens de sessie verbonden blijven met dezelfde instance. Deze optie moet aan staan voor toepassingen die ‘state information’ gebruiken, zoals shopping carts van webshops.
- TLS Enabled: yes (om de meest actuele SSL-standaard te gebruiken).
- TLS Cipher String: Vul hier je TLS Cipher String in, bijvoorbeeld ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384 voor een combinatie van veiligheid en compatibiliteit, of ECDHE-ECDSA-AES256-GCM-SHA384 voor een sterke versleutelingen.
- Admin State up: yes.
Stap 5
Open nu het tabblad ‘Pool Members’. Zoek naar de instances die je wilt opnemen in de load balancer pool (allocated members) en klik op ‘ADD’ voor elke instance.
Stap 6
Voer de aangewezen ‘Port’ in voor de host (443) en stel het ‘Weight’ in op (1). De weight dient als bepaling voor welke server als eerst een verbinding toebedeeld krijgt. Hoe hoger je de weight instelt, hoe eerder een verbinding doorgezet wordt naar deze instance. Herhaal deze stap voor alle webservers die je toevoegt. In het voorbeeld hieronder hebben alle webservers dezelfde ‘Weight’ dat resulteert in een gelijke verdeling van alle inkomende verbindingen richting de loadbalancer over de achterliggende webservers (round robin). Het pool ‘algorithm’ wat je bij stap 4 hebt ingesteld ook impact op het verloop van de verbindingen, houd daar rekening mee.
Klik op ‘Next’ om door te gaan naar het tabblad ‘Monitor Details’.
Ga door naar het tabblad 'Monitor Details' door op ‘Next’ te klikken.
Stap 7
Pas alleen de volgende velden aan in het 'Monitor Details' scherm:
1. Name: webserver-gezondheidsmonitor-https.
2. Type: HTTPS.
3. Admin state up: Yes.
Maak tot slot de load balancer aan door te klikken op (4) ‘Create Load balancer’.
Stap 8
Zoek de load balancer die je zojuist hebt ingesteld en klik op het kleine pijltje ernaast. Selecteer uit het vervolgmenu ‘Associate Floating IP’.
Stap 9
Kies een beschikbaar Floating IP of kies de net-float-pool om automatisch een nieuw Floating IP-adres toe te wijzen. Bevestig je keuze door op Associate te klikken.
Stap 11
Wacht totdat er in het 'Load Balancers'-overzichtsvenster de operating status op ‘ONLINE’ staat. Nadat deze status gewijzigd is kan je navigeren naar http://<floating-ip>
om je load balancer in werking te zien.
Je hebt zojuist een load balancer aangemaakt in OpenStack.
Mocht je geinteresseerd zijn in het verder aanpassen van je load balancer, dan raden wij aan om naar de documentatie van OpenStack Octavia load balancer te kijken.