Heartbeat

Aus xinux.net
Zur Navigation springen Zur Suche springen

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