HowTo: Bind9 DNS Failover – Failover Script

Hat man die “Macht” über seine Nameserver, ist ein DNS-Failover eigentlich ein Kinderspiel. Leider habe ich aus vielen Ecken gelesen, dass ein dies nicht die professionellste Möglichkeit für einen Backup-Webserver darstellt. Da manche Endgeräte bzw. Browser nicht mit den geringen TTL’s ( Time to Live ) zurecht kommen. Meiner Meinung nach gehört diese Zeit der Vergangenheit an! Die TTL’s sind in den letzten Jahren drastisch gesunken. Goolge’s A-Record steht, wie bei mir, auf 300 sprich 5 Minuten. Das ist ein Bruchteil der “Standart” Time to Live die stellenweiße sogar 24 Stunden oder höher betragen. Da scheiden sich jeddoch die Meinungen…ältere Browser sorgen sicher für Probleme.

Kurzer Hand habe ich mir dazu ein Bash-Script geschrieben, die den Header meiner Webserver abfragen. Sollte der Master-Webserver nicht erreichbar sein wird auf den Backup-Webserver umgeschaltet. Ab diesem Zeitpunkt wird geprüft ob der Master wieder Online ist, sollte dies der Fall sein beginnt das Spiel von vorne.

Soviel zur Theorie.


failover.sh

#!/bin/bash
while [ $n "200 OK" ]
do
n=`curl -s --head http://hostname-master | grep "200 OK" > /dev/null`
if curl -s --head http://hostname-master | grep "200 OK" > /dev/null
then
echo "The HTTP server is up!"
sleep 15
else
echo "The HTTP server is down!"
echo "Bad - Failover to IP-Adress"
s=`head /home/scripts/zahl # Serial Nummer erhöhen damit Slave Server änderung mitbekommen`
echo "$((s+1))"
echo "$((s+1))" > /home/scripts/zahl
echo "@ 100 IN SOA master.name.server. master.email.adress. (" > /etc/bind/zones/example.com.db
echo "`head /home/scripts/zahl` ; serial, todays date+todays" >> /etc/bind/zones/example.com.db
# Hier muss jz noch der Rest des Zone-Files rein die auf den Backup Server zeigt, Schema:
# echo "eine Zeile in der Zone-Datei" >> /pfad/zur/zone/datei
/usr/sbin/rndc reload
sleep 10
cat /dir/to/mail/body | mail -s "Webserver Down - Failover to IP" master.email.adress # Mail Body
unset s
while [ $n "200 OK" ]
do
n=`curl -s --head http://hostname-master | grep "200 OK" > /dev/null`
if curl -s --head http://hostname-master | grep "200 OK" > /dev/null
then
echo "HTTP-Server Up Again! Switch back to Master"
s=`head /home/scripts/zahl`
echo "$((s+1))"
echo "$((s+1))" > /home/scripts/zahl
echo "@ 100 IN SOA master.name.server. master.email.adress. (" > /etc/bind/zones/example.com.db
echo "`head /home/scripts/zahl` ; serial, todays date+todays" >> /etc/bind/zones/example.com.db
# Und hier das selbe Spiel nur mit den Master-Daten
break
else
echo "HTTP-Server Down...check again in 15 seconds"
sleep 15
unset s
fi
done
fi
done
exit

Leave a Reply

Your email address will not be published. Required fields are marked *