Pi-Hole – Keepalived für die Hochverfügbarkeit

Wer ebenfalls Pi-Hole aus meinem November Beitrag fleißig getestet hat, kann sich nun mit dieser Anleitung an eine Hochverfügbarkeit machen. Was ihr braucht – lediglich einen zweiten Linux Rechner der 24 Stunden am Tag erreichbar ist und im selben Netz steht wie euer bestehender Pi-Hole Server.

Am Ende habt ihr 2 Pi-Hole Instanzen und eine Failover IP-Adresse die in eurem Router fest als DNS Adresse hinterlegt ist. Oftmals ist genau an dieser Stelle nur eine IP-Adresse möglich. Eine Pi-Hole Master Node und eine Backup Node. Sollte die Master Node offline gehen wandert die Failover-IP Adresse durch den keepalived Dienst auf die Backup Node. Die Heimgeräte müssen für die Ausfallzeit der Master Node keiner Anpassung unterzogen werden.

Ich gehe in dieser Anleitung auf eine Raspbian/Debian Installation auf 2x Raspberry Pi ein.

Punkt 1: Vorbereitungen

Um zu erlauben, dass IP-Adressen auch auf nicht lokale Schnittstellen zugewiesen werden dürfen, ist eine kleine Anpassung auf beiden Nodes (Master und Backup) notwendig.

Punkt 2: Installation von keepalived

Wir installieren auf der Master und Backup Node den Failover Dienst keepalived.

Vergewissert euch, dass der Dienst auch automatisch beim Booten startet.

Punkt 3: keepalived Konfiguration Master

Folgendes tragen wir auf der primären Pi-Hole Node, dem Master, ein.

Punkt 4: keepalived Konfiguration Backup

Folgendes tragen wir auf der sekundären Pi-Hole Node, dem Backup ein.

Punkt 5: Testen

Zuerst restarten wir beide keepalived Dienste.

Auf dem Master sollte die Failover IP-Adresse 192.168.1.10 nun zu sehen sein.

Jetzt stoppen wir den keepalived auf dem Master.

Die IP-Adresse ist umgehend auf der Backup Node hochgefahren und Pi-Hole DNS Blackhole funktioniert weiter.

Nach einem erneuten Starten des Dienstes ist euere Pi-Hole HA Installation abgeschlossen.
Vorhandene Blacklist und Whitelist Einträge solltet ihr auf beide Nodes übernehmen oder synchronisieren.

Dazu könnt ihr beispielsweise Lsyncd verwenden.

 

UnterstützenDas Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld.
Unterstütze unsere Arbeit mit einer Spende.
Dominion

Dominion

Linux Systemadministrator

Das könnte dich auch interessieren …

9 Antworten

  1. Avatar BastyJuice sagt:

    Erstmal super technisch geht es, abe ich bekomme bei dem befehl sudo systemctl enable keepalived.service

    immer folgendes und der autostart läuft bei mir nicht

    Synchronizing state of keepalived.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install enable keepalived

  2. Avatar BastyJuice sagt:

    ● keepalived.service – Keepalive Daemon (LVS and VRRP)
    Loaded: loaded (/lib/systemd/system/keepalived.service; enabled; vendor preset: enabled)
    Active: inactive (dead) since Thu 2018-01-04 20:08:02 CET; 22s ago
    Process: 426 ExecStart=/usr/sbin/keepalived $DAEMON_ARGS (code=exited, status=0/SUCCESS)
    Main PID: 473 (code=exited, status=0/SUCCESS)

    Jan 04 20:07:56 pbx-01 Keepalived_vrrp[475]: Unable to load ipset library – libipset.so.3: cannot open shared object file:
    Jan 04 20:07:56 pbx-01 Keepalived_vrrp[475]: (Instance0): Cannot find an IP address to use for interface eth0
    Jan 04 20:07:56 pbx-01 Keepalived_healthcheckers[474]: Registering Kernel netlink reflector
    Jan 04 20:07:56 pbx-01 Keepalived_healthcheckers[474]: Registering Kernel netlink command channel
    Jan 04 20:07:56 pbx-01 Keepalived_healthcheckers[474]: Opening file ‚/etc/keepalived/keepalived.conf‘.
    Jan 04 20:07:56 pbx-01 systemd[1]: Started Keepalive Daemon (LVS and VRRP).
    Jan 04 20:07:56 pbx-01 Keepalived_healthcheckers[474]: Using LinkWatch kernel netlink reflector…
    Jan 04 20:07:57 pbx-01 Keepalived[473]: Keepalived_vrrp exited with permanent error CONFIG. Terminating
    Jan 04 20:07:57 pbx-01 Keepalived[473]: Stopping
    Jan 04 20:08:02 pbx-01 Keepalived[473]: Stopped Keepalived v1.3.2 (12/25,2016)

    • Dominion Dominion sagt:

      installier mal das Paket „libipset3“ obs dann funktioniert.
      Hast du das korrekte Interface angegeben? Gibt es ein eth0 ?
      <--- (Instance0): Cannot find an IP address to use for interface eth0 --->

  3. Avatar BastyJuice sagt:

    lösung war folgendes

    vrrp_instance meineinstance {
    interface eth0 # Genutztes Interface
    state BACKUP
    virtual_router_id 51 # ID der Route
    priority 100 # Master Prio 150, Backup Prio 100
    virtual_ipaddress {
    192.168.0.2/24 # Virtuelle Failover IP-Adresse
    }
    unicast_src_ip 192.168.0.7
    }
    }

  4. Avatar onkel_peter sagt:

    Hallo Dominion,
    habe einen Raspi mit Debian Buster und PiHole aufgesetzt. Das funktioniert auch schon längere Zeit.
    Wollte nun die Hochverfügbarkeit nachrüsten – habe aber so meine Probleme damit.
    Kannst Du mir sagen, was genau an den beiden Config-Dateien angepasst werden muss.
    Ich habe meine Raspi mit einer festen IP eingerichtet. 192.168.168.221 und 223
    Als Failover IP soll die 192.168.168.222 eingerichtet werden.
    Auch würde mich interessieren, was bei „authentication“ eingetragen werden muss.
    Habe auch schon mit den „Unicast Quell- und Zieladressen“ „rumexperimentiert“.
    Aber es klappt einfach nicht. Beide Raspibehalten stehts ihre festen IP’s.
    Wäre Dir dankbar wenn Du mich etwas „an Händchen nehmen“ würdest.

    Vielen Dank
    Peter

    • Dominion Dominion sagt:

      Hallo Peter,
      bei „auth_pass“ muss ein Passwort rein, dies dann auf jedem System identisch eintragen.

      Wenn die VIP 192.168.168.222 nicht hochgefahren werden kann steht das eigentlich im Log. Steht was im Log?

      Gruß

  5. Avatar Marcel sagt:

    Hallo Dominion,

    die Anleitung ist gut und funktioniert auch, aber die VRRP-Authentisierung würde ich in aktuellen Versionen weglassen. Auch die Keepalived-Entwickler raten vom Einsatz der Authentisierung ab:
    # Note: authentication was removed from the VRRPv2 specification by
    # RFC3768 in 2004.
    # Use of this option is non-compliant and can cause problems; avoid
    # using if possible, except when using unicast, where it can be helpful.

    In unseren aktuellen Installationen wird im Logfile sogar ein Hinweis auf die veraltete Funktion gewarnt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.