Menu

Developers

Automatisch internetverbinding switchen

Ons kantoor is voorzien van twee internetverbindingen. De snelste hiervan is onze primaire verbinding. Als die uitvalt wordt automatisch omgeschakeld naar de secundaire verbinding. Om dit voor elkaar te krijgen hebben we twee Linux-machines die als gateway fungeren. Beide machines maken gebruik van hun eigen vaste internetverbinding en ze delen een virtueel (ook wel ‘floating’) ip-adres dat op de client-machines als router-adres is ingesteld. In onderstaand schema wordt de setup weergegeven.

Beide gateways maken gebruik van Heartbeat voor het virtuele ip-adres. Hier de configuratie (/etc/ha.d/haresources) die daar bij hoort:

# /etc/ha.d/haresources content
gateway1 192.168.0.1

De eerste parameter is de naam van de ‘preferred node’, in dit geval ‘gateway1’. Deze configuratie zorgt er voor dat onder normale omstandigheden het virtuele ip-adres (192.168.0.1) als alias wordt toegekend aan gateway1. Die machine heeft dus 2 interne ip-adressen. Als gateway1 zou worden herstart (of uitvalt) wordt dat gedetecteerd door gateway2 die op dat moment het virtuele ip-adres overneemt (failover). Zodra gateway1 weer normaal draait geeft gateway2 weer automatisch het ip-adres terug (failback) aan gateway1.

Aangezien op de werkstations het virtuele ip-adres als gateway-adres gebruiken wordt bij omschakelen van het virtuele ip-adres dus omgeschakeld naar de secundaire internetverbinding. Dat zou dus kunnen betekenen dat bestaande connecties met externe servers komen te vervallen aangezien het publieke ip-adres van die connecties verandert. In de praktijk levert dit weinig problemen op; tijdens het surfen merk je hier in ieder geval niets van.

Hoewel Heartbeat geschikt is voor het detecteren van uitval van een machine (door hardware-falen of een systeemcrash) is het niet eenvoudig om het wegvallen van een internetverbinding als trigger voor een failover in te regelen. Een tool als Monit is daar beter voor geschikt, aangezien die zeer flexibel is in het definiëren van condities die een failover of failback kunnen triggeren. Vandaar dat we gebruik maken van de combinatie van Monit en Heartbeat.

Op de primaire gateway wordt door middel van Monit een publiek ip-adres gepingd. Met opzet is gekozen voor een ip-adres buiten het netwerk van de provider zodat ook diens upstream connectie wordt getest. Om het eenvoudig te houden pingen we ip-adres 8.8.8.8, ook wel bekend als het ip-adres van Google Public DNS. De reden daarvoor is dat het een makkelijk te onthouden ip-adres is dat waarschijnlijk altijd wel zal blijven bestaan. Hieronder de monit-configuratie die we daarvoor gebruiken op gateway1:

# set daemon mode timeout
set daemon 30

# ping google
check host google with address 8.8.8.8
  if failed icmp type echo count 5 with timeout 15 seconds
    then exec "/usr/share/heartbeat/hb_standby"
  else if succeeded 2 cycles
    then exec "/usr/share/heartbeat/hb_takeover"

Met deze configuratie wordt elke 30 seconden 5 keer gepingd naar 8.8.8.8 met een timeout van 15 seconden. Als dit niet lukt wordt de Heartbeat-status primaire gateway op ‘standby’ gezet. Daarmee wordt gateway2 dus de actieve gateway. Ondertussen blijven de checks op gateway1 weer doorlopen en zodra de test weer slaagt neemt gateway1 het ip-adres weer terug en wordt zo weer de actieve gateway.

blog comments powered by Disqus

Nieuwsbrief ontvangen?

Velden met een * zijn verplicht

Like ons op Facebook

Klik hieronder om ons te liken op Facebook.