CARP-Cluster auf Ubuntu Linux

Anmerkung: Diese kleine Anleitung ist für fortgeschrittene Anwendung und setzt ein paar Grundlagen voraus. Ihr solltet mit dem Umgang von vi (oder einem anderen Consolen-Text-Editor eurer Wahl, beispielsweise nano) vertraut sein und wissen, wie Ihr Euch per SSH auf Eurem Ubuntu-Server einloggt. Außerdem gehen alle Befehle davon aus, dass Ihr bereits priviligierte Rechte habt!

Erläuterung: ucarp dient dazu, dass sich zwei Hosts eine gemeinsame IP-Adresse teilen können (shared IP), um einen automatischen Failover zu ermöglichen. Ein ganzheitliches hochverfügbares Setup wird dadurch allerdings nicht möglich, es geht hier lediglich um die gemeinsame IP und einen entsprechenden automatisierten Zielsystemwechsel. Für eine vollständige Hochverfügbarkeit müssten sich die Systeme noch untereinander abgleichen.


Wir richten einen CARP-Cluster auf Ubuntu Linux (>18.04 LTS) mit Hilfe von ucarp ein. Die Anleitung ist getestet auf Ubuntu 20.04 LTS und Ubuntu 22.04 LTS, sollte aber auch auf andere Versionen des Ubuntu-Ökosystems übertragbar sein. Solltet Ihr Rückfragen haben, meldet Euch einfach im Forum!

Wir starten mit unseren beiden Servern knotena und knotenb.

Vorprüfung
root@knotena:~# ip -br a lo UNKNOWN 127.0.0.1/8 ens3 UP 172.22.172.98/24 root@knotena:~# root@knotenb:~# ip -br a lo UNKNOWN 127.0.0.1/8 ens3 UP 172.22.172.99/24 root@knotenb:~# In unserem Beispiel haben diese die IPv4-Adressen 172.22.172.98 und 172.22.172.99 zugeordnet, für unsere CARP-IP bietet sich somit förmlich die IPv4-Adresse 172.22.172.100 an!

Installation
Vom Start ab ist das Paket ucarp meistens noch nicht installiert, also fahren wir fort mit:
root@knotena:~# apt install ucarp
root@knotenb:~# apt install ucarp

Höchstwahrscheinlich wird apt nun Abhängigkeiten finden, die aufgelöst werden müssen. Das macht apt aber für Euch, ihr müsst dem Tool nur, falls es nachfragt, erlauben dies zu tun. Nachdem ucarp auf beiden Systemen installiert ist, geht es mit der Konfiguration weiter.

Konfiguration
Werte, die für beide Knoten gelten, sind in schwarz dargestellt, individuelle Werte in der Farbe des Clusterknotens.
CARP-Cluster auf Ubuntu Linux - Konfigurationsübersicht
Auf beiden Clusterknoten müssen die up- und down-Skripte angepasst werden. Häufig sind diese nämlich noch nicht auf das netplan-Verfahren, das Ubuntu seit Version 18.04 nutzt, umgestellt und arbeiten noch mit der alten ifconfig-Logik.
vi /usr/share/ucarp/vip-up

Bitte ändert den Dateiinhalt so ab, dass er wie folgt aussieht.
#!/bin/sh exec 2>/dev/null ip address add "$2"/32 dev "$1" Wir verfahren entsprechend auch für das andere Skript.
vi /usr/share/ucarp/vip-down

Bitte ändert den Dateiinhalt so ab, dass er wie folgt aussieht.
#!/bin/sh exec 2>/dev/null ip address del "$2"/32 dev "$1" Wenn wir dies auf beiden Clusterknoten erledigt haben geht es weiter.

Nun bauen wir uns, auch wieder auf beiden Clusterknoten, einen Service für die Ausführung von ucarp.

vi /etc/systemd/system/ucarp.service

Der Inhalt auf Knoten A:
[Unit] Description=ucarp-Dienst fuer die virtuelle CARP-IP After=syslog.target After=network.target
[Service] Type=oneshot ExecStart=/usr/sbin/ucarp --interface=ens3 --pass=pa$$w0rd --vhid=1 --addr=172.22.172.100 --srcip=172.22.172.98 --advbase=1 --advskew=0 --upscript=/usr/share/ucarp/vip-up --downscript=/usr/share/ucarp/vip-down --preempt --daemonize KillMode=control-group RemainAfterExit=yes
[Install] WantedBy=multi-user.target
Der Inhalt auf Knoten B:
[Unit] Description=ucarp-Dienst fuer die virtuelle CARP-IP After=syslog.target After=network.target
[Service] Type=oneshot ExecStart=/usr/sbin/ucarp --interface=ens3 --pass=pa$$w0rd --vhid=1 --addr=172.22.172.100 --srcip=172.22.172.99 --advbase=1 --advskew=100 --upscript=/usr/share/ucarp/vip-up --downscript=/usr/share/ucarp/vip-down --daemonize KillMode=control-group RemainAfterExit=yes
[Install] WantedBy=multi-user.target
Aktivierung
Der letzte Schritt ist die Aktivierung unseres neuen ucarp-Dienstes. Es ist geschickt auf Knoten A (Master) zu beginnen und dann auf Knoten B (Backup). Allerdings könnt ihr, bewusst zum Test, auch genau anders herum starten. Dadurch simuliert ihr direkt einen nicht vorhandenen Master mit anschließendem Fallback.
systemctl enable ucarp.service
systemctl start ucarp.service

Herzlichen Glückwunsch! Sowie ihr die letzten beiden Schritte auf beiden Clusterknoten ausgeführt habt, ist Euer CARP-Cluster fertig und einsatzbereit. Der abgesicherte Dienst ist im Netzwerk nun unter 172.22.172.100 verfügbar.

Anmerkungen
Ihr werdet es Euch gedacht haben... ucarp stoppen/beenden könnt ihr über systemctl stop ucarp.service.
Falls ihr Informationen zum Status Eures UCARP-Cluster wollt, so nutzt systemctl status ucarp.service.

---

Vielen Dank an den User Barungar für diese Anleitung!

Wenn Du Fragen zu dieser Anleitung hast, dann schau doch einfach mal bei uns im vorbei!