Soms wil je een hoge beschikbaarheid bouwen voor servers maar heb je een klein budget. Nu kun je met allerlei open source software gaan knutselen en rommelen en daarbij gemakshalve vergeten hoeveel uren je hiermee bezig bent om het maar goedkoop te laten lijken. In het verleden heb ik voor een klant wel eens een High Availlability (HA) set-up gemaakt op basis van twee Dell R200 servers met ESXi 3.5 (update 2) en een Linksys NAS. De investering voor hardware was amper 2000 euro voor deze omgeving, het aantal uren om alles werkend te krijgen was 4, inclusief testen en documentatie.

Om te beginnen zal ik zeggen dat HA in een klein aantal gevallen voordelen zal bieden. Het zal je namelijk enkel beschermen tegen uitval aan hardware. Met moderne hardware is de kans op storingen echter minimaal, de meeste fouten (>90%) kent nog steeds een menselijke oorzaak. Dat gezegd hebbende: let’s rock!

Op beide servers installeer je VMware ESXi. Destijds heb ik het met versie 3.5 (update 2) gedaan. Of het met vSphere danwel ESXi4 nog steeds werkt: geen idee. Installeer de storage, (iSCSI heeft de voorkeur boven NFS) en zorg dat beide servers bij dezelfde storage pool kunnen komen.

Vanuit beide nodes gaan we een heartbeat doen, dan wil zeggen kijken of de andere server nog beschikbaar is. Wanneer dit gedurende 15 pings niet zo is (dit is een relatief korte tijd, maar wachten tijdens testen is vervelend omdat systeembeheerders altijd ongeduldig zijn) dan zal hij de virtuele servers gaan opstarten op de andere node. We maken hiervoor een script met de naam esx_ha.sh en zetten deze in de /usr/bin. Zorg er wel voor dat het script uitvoerbaar is.

#!/bin/bash
if ! ping -c 14 10.0.0.1 > /dev/null; then
for $i in `cat /etc/other_host` ; do vmware-cmd -s register $i  && vmware-cmd $i start ; done
fi
sleep 16
if ! ping -c 14 10.0.0.1 > /dev/null; then
for $i in `cat /etc/other_host` ; do vmware-cmd -s register $i  && vmware-cmd $i start ; done
fi

Vervolgens moeten we een lijst van alle virtual machines hebben. Dat doen we met het onderstaande commando. Voer deze op beide ESXi hosts uit en SCP deze dan naar de andere ESXi node toe in de /etc directory. In het bestanbd komt een lijst met alle geregistreerde VM’s. Deze kun je nog bewerken omdat er mogelijk machines in staan die je geen HA wil geven. Ook de volgorde is belangrijk, omdat de bovenste VM als eerste opgestart gaat worden bij een storing. De sleep 16 waarde geeft de tijd tussen het opstarten weer.

vmware-cmd -l | sed ’s/\ /\\ /g’ > /root/other_host

Wat we nu nog moeten doen is een crontab aanmaken die elke minuut zal draaien om te kijken of de andere host nog leeft. Nu snap je ook waarom het eerste script eigenlijk dubbel uitgevoerd is. We kunnen een cron namelijk enkel eens per minuut laten lopen. Met de sleep 16 waarde zetten we de lopende cron in de wacht. Tel hier de (2x) 14 pingpogingen bij en je zult precies op 60 seconden uitkomen. Onderstaande kun je in je /etc/crontab zetten op ESXi hosts.

MAILTO=”mail@example.com”
* * * * * /usr/bin/esx_ha.sh

Bovenstaande is natuurlijk verre van een nette oplossing voor bedrijfskritische toepassingen maar wel een leuk voorbeeld om in een lab uit te voeren. Probeer zelf te achterhalen wat ieder commando doet en ga niet klakkeloos lopen copy/pasten omdat je anders de werking ervan niet gaat snappen.