openHAB2 HACluster mit Pacemaker und Corosync

Veröffentlicht von

Überblick

Um die Verfügbarkeit von openHAB2 sicherzustellen wollte ich ein redundantes System mit Hilfe von Pacemaker und Corosync aufzubauen.
Dazu werden mindestens 2 Linux Systeme benötigt auf denen openHAB2 lauffähig ist. Von Vorteil ist eine möglichst identische Hardware, da so weniger Fallstricke bei der Konfiguration vorhanden sind. Falls dies nicht möglich ist sollte darauf geachtet werden, dass die gleichen Versionen von Pacemaker und Corosync verwendet werden.

Die eingesetzte Hardware ist ein Rapberry Pi 3 und ein Odroid C1+ . Beide besitzen einen ARMv7 mit 32Bit.

Als Linux Distribution wird DietPi verwendet, diese besitzt wenig Overhead und ist recht komfortabel zu konfigurieren. DietPi basiert auf Debian 8 (Jessie).

Alle folgende Anleitungen müssen, sofern nicht anders beschrieben, auf beiden SBCs durchgeführt werden.
Die Nodes werden openhab21 (192.168.178.171) und openhab22 (192.168.178.172) sein.

Linux Setup

Auf der DietPi Seite kann die passende Distribution herunter geladen werden.
Danach die heruntergeladene Datei entpacken und z.B. mit dem Win32 Disk Imager auf eine microSD Karte schreiben.
Diese kann dann in den Raspi oder Odroid gesteckt werden. Die SBCs mit der Stromversorgung und dem Netzwerk verbinden und warten… Wie meistens dauert das erste Booten etwas länger.
Der SSH Server startet gleich mit, d.h. man kann sich unter Windows direkt mit PuTTY oder unter MacOS/Linux mit dem Terminal einloggen.

openHAB2 Installation

Nachdem das erste Booten und ein evtl. Neustart vorüber sind kann mit der openHAB2 Installation begonnen werden.
Vorbereitend für openHAB2 muss Java installiert werden. Dazu kann man nach folgender Anleitung vorgehen: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html

Für die openHAB2 Installation verwende ich die Debian Pakete (http://docs.openhab.org/installation/linux.html).

Mit folgenden Linux Befehle kann Java 8 und openHAB2 installiert werden:

Danach ist openHAB2 unter <RechnerIP:8080> zu erreichen.

Pacemaker und Corosync Installation

Für die Installation von Pacemaker und Corosync wird die jessie-backports Quelle benötigt. Falls die noch nicht in /etc/apt/sources.list eingetragen ist, dann folgende Zeile hinzufügen:

Danach mit:

Pacemaker und die CRM Shell installieren. Corosync wird bei der Pacemaker Installation mit installiert.

Corosync Konfiguration

Cluster Authorization Key

Damit sich die Nodes des Clusters verbinden können müssen alle einen identischen Schlüssel besitzen. Dieser wird mit

auf einem der Cluster Nodes erzeugt und z.B. mit

auf den 2. Server kopiert.

corosync.conf

Wenn die Konfiguration auf beiden Rechnern durchgeführt wurde kann mit

überprüft werden ob der Cluster funktioniert.
Falls die Ausgabe wie folgt aussieht haben sich die Nodes erfolgreich verbunden:

Pacemaker Konfiguration

Um Pacemaker die Kontrolle über dem openHAB2 Service zu geben mit

der Autostart von openHAB2 deaktiviert werden.

Da hier ein Cluster mit nur 2 Nodes beschrieben wird sollten noch folgende Eigenschaften angepasst werden:

Pacemaker soll nun so konfiguriert werden, dass der Cluster unter der IP 192.168.178.170 erreichbar ist. Der Knoten openhab21 soll priorisiert sein, d.h. wenn dieser aktiv ist soll openHAB2 auf diesem laufen und unter der genannten IP Adresse erreichbar sein.

Zuerst wird dafür eine sogenannte primitive cluster resource, die dafür sorgt, dass der aktive Node unter der Cluster IP erreichbar ist. Dies wird mit folgendem Befehl erreicht:

failover_ip ist die Bezeichnung der Ressource
ocf:heartbeat:IPaddr2 ist der OCF Resource Agent
ip die IP Adresse unter der der Cluster erreichbar sein soll
cidr_netmask ist die Subnetmask (255.255.255.0)
monitor intervals definiert den Zeitabstand des Checks

Mit

kann die Konfiguration angezeigt werden. Diese sollte dann wie folgt aussehen:

Im folgenden habe ich noch die notwendigen Konfigurationen mit kurzen Erklärungen aufgelistet die nötig sind, damit die Übernahme und IP Zuweisung funktioniert.

Der folgende Befehl definiert die Ressource failover_openhab2, diese das init-Script /etc/init.d/openhab2 steuert/überwacht.
op monitor interval=15s definiert einen “operation monitor” mit einem Intervall von 15s.
op start timeout=”40s” definiert, dass der openhab2-Prozess 40s Zeit zum starten hat, nachdem das init-Script ausgeführt wurde.
op stop timeout=”60s” definiert die Zeit nach welcher der der stop-Befehl als fehlgeschlagen definiert ist.

 

Definition der Gruppe “OPENHAB2-GROUP”, so werden die beiden Ressourcen failover_ip und failover_openhab2 verknüpft:

 

Mit dem folgenden Kommando wird die Reihenfolge definiert, wie die Ressourcen gestartet werden, d.h. die IP-Adresse (failover_ip) sollte vor dem Starten von openHAB2 (failover_openhab2) gesetzt werden.

 

Außerdem muss noch mit dem Kommando:

definiert werden, dass die failover_ip Ressource nur auf dem node mit aktiver failover_openhab2 Ressource laufen soll.

Zuletzt sagen wir Pacemaker noch, dass die Gruppe OPENHAB2-GROUP bevozugt auf dem Node openhab21 laufen soll:

 

Update openHAB2

In meinem Setup hatte ich immer wieder Probleme, wenn ich openHAB2 mit dem Paketmanger aktualisiert habe. Das habe ich gelöst indem ich Pacemaker in den Wartungsmodus geschaltet habe:

Außerdem wird zumindest manchmal der openhab2.service wieder aktiviert, also muss man auch diesen mit

deaktivieren.

Wenn das update vorbei ist, daran denken den Wartungsmodus auch wieder zu deaktivieren:

Das Ganze habe ich bei mir noch nicht automatisiert.

 

So, jetzt hoffe ich, dass ich es geschafft habe die ganzen Ausführungen verständlich rüber zu bringen. Ich habe für das zusammentragen der ganzen Kommandos eine Weile benötigt und hoffe, dass es einigen die Arbeit etwas erleichtert.
Falls es Hinweise oder Fragen gibt, freue ich mich über einen Kommentar.

 

Quellen:
http://docs.openhab.org/installation/linux.html
https://www.digitalocean.com/community/tutorials/how-to-create-a-high-availability-setup-with-corosync-pacemaker-and-floating-ips-on-ubuntu-14-04
https://geekpeek.net/linux-cluster-resources/

Kommentar hinterlassen

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.