Heartbeat
Ein Heartbeat (engl. für „Herzschlag”) ist eine Netzwerkverbindung zwischen zwei (oder mehr) Rechnern in einem Cluster, um sich gegenseitig darüber zu benachrichtigen, dass sie betriebsbereit sind und ihre Aufgaben noch erfüllen können, also „am Leben” sind.
Das Ziel ist dabei, wichtige Aufgaben zuverlässiger erfüllen zu können, als dies mit einem einzelnen Rechner alleine möglich wäre.
Wenn die Benachrichtigungen eines anderen Rechners ausbleiben, geht ein Programm auf dem „überlebenden” Rechner davon aus, dass dieser Partner Pendant nicht mehr verfügbar ist (z. B. durch einen Defekt oder einen Programmfehler) und dass es dafür sorgen soll, dass diese Aufgaben von einem noch funktionierenden Rechner übernommen werden.
Außerhalb der Clustertechnik wurde der Begriff auch für eine zur Fehleranalyse verwendete Funktion bei der Ethernet-Verkabelung über Yellowcable (10 MBit/s) verwendet. Der Heartbeat konnte für jeden Transceiver ein- oder ausgeschaltet werden.
„Gespaltenes-Gehirn”-Situationen
Split Brain ist eine Situation wenn die Heartbeat-Verbindung zwischen den Rechnern (etwa via Ethernet oder serieller Schnittstelle) unterbrochen wird und nicht innerhalb der benötigen Zeit wieder zustande kommt. Obwohl die Rechner jeder für sich einwandfrei funktionieren, dann müssen die Kontrollprogramme auf diesen Rechnern davon ausgehen, dass der jeweils andere ausgefallen ist.
Danach weiß kein Node, welche Rolle er aktuell spielen soll, und macht sich automatisch selbst zum Primary Node. Dies führt bei Aktiv-/Passiv-Konfigurationen zum Ausfall des Clusters, der angebotenen Dienste und kann beim Einsatz eines gemeinsam genutzten Datenspeichers (Storage Backends wie zum Beispiel DRBD) dazu führen, dass beide Systeme versuchen, gleichzeitig auf denselben Speicher zu schreiben.
Gegenseitiger Ausschluss
Wenn zwei oder mehr Rechner dasselbe Betriebsmittel benötigen, um eine Aufgabe zu erfüllen, zum Beispiel eine Netzwerk-Adresse MAC-Adresse oder ein Dateisystem, besteht unter Umständen die Notwendigkeit sicherzustellen, dass dieses Betriebsmittel nie von mehr als einem Rechner gleichzeitig benutzt wird. In der englischsprachigen Literatur ist hierfür der Begriff Node Fencing gebräuchlich, was so viel bedeutet wie Rechner-Abzäunung.
STONITH ist eine Möglichkeit dieses Ausschlusses. Wenn beide Rechner an ein STONITH-Gerät angebunden sind (in der Regel über eine serielle Schnittstelle), kann ein Rechner in einer Splitbrain-Situation den gegenüberliegenden Rechner abschalten. Es gibt zwei Arten, das STONITH-Prinzip einzusetzen: Auf Applikations- oder Hardware-Ebene. Letzteres hat den Vorteil, dass es nicht auf eine Software (z. B. einen SSH-Daemon) angewiesen ist. Um die Auswirkung von Hardware-Ausfällen zu minimieren sind Heartbeat-Netze häufig mit redundanten Switches aufgebaut und jedes beteiligte System mit zwei oder mehr Netzwerkkarten angebunden.
Heartbeat
Voraussetzungen
- 2 frisch aufgesetzte Systeme
- Gleiches Betriebsystem
- Jeweils 2 Netzwerkschnittstellen
- Eine im LAN
- Eine direktverbindung zwischen beiden Nodes
Allgemeine Konfiguration
Konfiguration der Netzwerkschnittstellen
IPs müssen entsprechend angepasst sein!:
root@hb1:~# cat /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.242.210
netmask 255.255.248.0
gateway 192.168.240.100
dns-nameservers 192.168.240.21
dns-domainname xinux
auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0
root@hb2:~# cat /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.242.220
netmask 255.255.248.0
gateway 192.168.240.100
dns-nameservers 192.168.240.21
dns-domainname xinux
auto eth1
iface eth1 inet static
address 10.0.0.2
netmask 255.255.255.0
Eintrag in /etc/hosts
Eintragen der Node IPs mit Namen in /etc/hosts
IPs müssen entsprechend angepasst sein!:
root@hb1:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 hb1
10.0.0.2 hb2
root@hb2:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 hb2
10.0.0.1 hb1
Austausch ssh-keys
Erstellen und austauschen der ssh-keys zwischen Nodes:
root@hb1:~# ssh-keygen
root@hb1:~# ssh-copy-id hb2
root@hb2:~# ssh-keygen
root@hb2:~# ssh-copy-id hb1
Installation Heartbeat
Benötigte Pakete
Installieren des Heartbeatpakets
root@hb1:~# apt-get install -y heartbeat
root@hb2:~# apt-get install -y heartbeat
Minimale Konfiguration
Minimale Konfiguration für heartbeat (die 3 benötigten files können auch unter /usr/share/doc/heartbeat/ liegen)
root@hb1:~# cat /etc/ha.d/ha.cf
logfacility local0
bcast eth1
node hb1 hb2
auto_failback on
Verschlüsselung wählen
root@hb1:~# cat /etc/ha.d/authkeys
auth 1
1 sha1 geheimerSchlüssel
Lese und Schreibrecht von authkeys auf root beschränken
root@hb1:~# chmod 600 /etc/ha.d/authkeys
Cluster-IP einrichten
root@hb1:~# cat /etc/ha.d/haresources
hb1 192.168.100.215/NETZMASKE
Konfiguration mit anderer Node konsistent halten
root@hb1:~# scp /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/haresources hb2:/etc/ha.d/
Heartbeat Starten
Heartbeat ist jetzt einsatzbereit und der Dienst kann gesteuert werden mit:
root@hb1:~# service heartbeat stop
root@hb1:~# service heartbeat start
root@hb1:~# service heartbeat status
DRBD
Voraussetzungen
- Minimalinstallation Heartbeat ( siehe oben )
- Jeweils zusätzliche Festplatte
Installation DRBD
root@hb1:~# apt-get install drbd8-utils -y
root@hb2:~# apt-get install drbd8-utils -y
Die Konfigurationsdatei für DRBD ist /etc/drbd.conf. Eine Minimalkonfiguration sieht wie folgt aus:
root@hb1:~# cat /etc/drbd.conf
global { usage-count yes; }
common {
syncer { rate 100M; }
protocol C;
}
resource data {
device /dev/drbd0;
meta-disk internal;
on hb1 {
disk /dev/sdb;
address 10.0.0.1:7788;
}
on hb2 {
disk /dev/sdb;
address 10.0.0.2:7788;
}
}
Diese muss auch auf beiden Nodes identisch sein.
root@hb1:~# scp /etc/drbd.conf hb2:/etc/
Nun wird das DRBD-device erstellt, die Kernel Module geladen und das Device zum Test aktiviert.
root@hb1:~# drbdadm create-md data
root@hb2:~# drbdadm create-md data
root@hb1:~# modprobe drbd
root@hb2:~# modprobe drbd
root@hb1:~# drbdadm up data
root@hb2:~# drbdadm up data
root@hb1:~# drbdsetup /dev/drbd0 primary -o
Als letztes wird auf dem DRBD-device ein Dateisystem eingerichtet.
root@hb1:~# mkfs.ext3 /dev/drbd0
Zum eindinden in Heartbeat haresources anpassen:
root@hb1:~# cat /etc/ha.d/haresources
hb1 192.168.242.15
hb1 drbddisk::data Filesystem::/dev/drbd0::/data::ext3
Konfiguration auf andere Node kopieren:
root@hb1:~# scp /etc/ha.d/haresources hb2:/etc/ha.d/
Auf beiden Nodes Mountpunkt erstellen:
root@hb1:~# mkdir /data
root@hb2:~# mkdir /data
Heartbeat neu starten
root@hb1:~# service heartbeat stop
root@hb1:~# service heartbeat start