Dienstag, 7. Juni 2011

(Keepalived) Loadbalancer für Nameserver

Es soll ja vorkommen das komische Menschen wie ich einer bin, einmal ausprobieren möchten wie man einen Nameserver per keepalived ansprechen kann.
Gründe hierfür sind dann zB die Lastverteilung auf zwei Nameserver, oder natürlich die hochverfügbarkeit eines Nameservers. 


hier die Übersicht

keepalived Eintrag

# DNS
virtual_server 10.0.0.10 53 {
    delay_loop 10
    lb_algo wlc
    lb_kind DR
    protocol TCP
    ha_suspend

 # ns1
    real_server 10.0.1.11 53 {
        weight 100
          MISC_CHECK {
                "/usr/local/misc_check/dns.sh
10.0.1.11"
                                  }

    }

    # ns2
    real_server 10.0.1.12 53 {
        weight 100
          MISC_CHECK {
                "/usr/local/misc_check/dns.sh
10.0.1.12"
                                  }


misc_check
Der zugehörige misc_check könnte dann so aussehen

#!/bin/bash

if [ `dig +time=1 www.example.com @$1 | grep -c 1.2.3.5` -eq 1 ]; then
                exit 0
    else
            exit 1
fi

Known issues
  1. Auf dem Zielserver hinter dem Loadbalancer muss ein dummy0 Interface vorhanden sein welches die IP vom Virtualserver hat 10.0.0.10/32
  2. Da wir ein Problem bei UDP haben, müssen wir noch eine Zeile bein powerdns setzen, der pdns darf nur auf die beiden IP Adressen des Realservers und des Virtualservers hören, Andernfalls "verfliegen" sich die Pakete, also
local-address=10.0.0.10,10.0.1.11