Heartbeat: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 16: Zeile 16:
  
 
[[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 [[Secure Shell|SSH]]-Daemon) angewiesen ist. Um die Auswirkung von Hardware-Ausfällen zu minimieren sind ''Heartbeat''-Netze häufig mit redundanten [[Switch (Computertechnik)|Switches]] aufgebaut und jedes beteiligte System mit zwei oder mehr Netzwerkkarten angebunden.
 
[[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 [[Secure Shell|SSH]]-Daemon) angewiesen ist. Um die Auswirkung von Hardware-Ausfällen zu minimieren sind ''Heartbeat''-Netze häufig mit redundanten [[Switch (Computertechnik)|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!:
 +
 +
<source lang=bash>
 +
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
 +
</source>
 +
<source lang=bash>
 +
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
 +
</source>
 +
 +
===Eintrag in /etc/hosts===
 +
Eintragen der Node IPs mit Namen in '''/etc/hosts'''
 +
 +
IPs müssen entsprechend angepasst sein!:
 +
<source lang=bash>
 +
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
 +
</source>
 +
 +
===Austausch ssh-keys===
 +
Erstellen und austauschen der ssh-keys zwischen Nodes:
 +
 +
<source lang=bash>
 +
root@hb1:~# ssh-keygen
 +
root@hb1:~# ssh-copy-id hb2
 +
 +
root@hb2:~# ssh-keygen
 +
root@hb2:~# ssh-copy-id hb1
 +
</source>
 +
 +
==Installation Heartbeat==
 +
 +
===Benötigte Pakete===
 +
Installieren des Heartbeatpakets
 +
 +
<source lang=bash>
 +
root@hb1:~# apt-get install -y heartbeat
 +
</source>
 +
<source lang=bash>
 +
root@hb2:~# apt-get install -y heartbeat
 +
</source>
 +
 +
===Minimale Konfiguration===
 +
Minimale Konfiguration für heartbeat (die 3 benötigten files können auch unter /usr/share/doc/heartbeat/ liegen)
 +
 +
<source lang=bash>
 +
root@hb1:~# cat /etc/ha.d/ha.cf
 +
logfacility    local0
 +
bcast eth1
 +
node    hb1 hb2
 +
auto_failback on
 +
</source>
 +
 +
Verschlüsselung wählen
 +
 +
<source lang=bash>
 +
root@hb1:~# cat /etc/ha.d/authkeys
 +
auth 1
 +
1 sha1 geheimerSchlüssel
 +
</source>
 +
 +
Lese und Schreibrecht von authkeys auf root beschränken
 +
 +
<source lang=bash>
 +
root@hb1:~# chmod 600 /etc/ha.d/authkeys
 +
</source>
 +
 +
Cluster-IP einrichten
 +
 +
<source lang=bash>
 +
root@hb1:~# cat /etc/ha.d/haresources
 +
hb1 192.168.100.215/NETZMASKE
 +
</source>
 +
 +
Konfiguration mit anderer Node konsistent halten
 +
 +
<source lang=bash>
 +
root@hb1:~# scp /etc/ha.d/ha.cf /etc/ha.d/authkeys /etc/ha.d/haresources hb2:/etc/ha.d/
 +
</source>
 +
 +
==Heartbeat Starten==
 +
Heartbeat ist jetzt einsatzbereit und der Dienst kann gesteuert werden mit:
 +
 +
<source lang=bash>
 +
root@hb1:~# service heartbeat stop
 +
root@hb1:~# service heartbeat start
 +
root@hb1:~# service heartbeat status
 +
</source>
 +
 +
=DRBD=
 +
==Voraussetzungen==
 +
*Minimalinstallation Heartbeat ( siehe oben )
 +
*Jeweils zusätzliche Festplatte
 +
 +
==Installation DRBD==
 +
<source lang=bash>
 +
root@hb1:~# apt-get install drbd8-utils -y
 +
root@hb2:~# apt-get install drbd8-utils -y
 +
</source>
 +
 +
Die Konfigurationsdatei für DRBD ist /etc/drbd.conf.
 +
Eine Minimalkonfiguration sieht wie folgt aus:
 +
 +
<source lang=bash>
 +
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;
 +
        }
 +
}
 +
</source>
 +
 +
Diese muss auch auf beiden Nodes identisch sein.
 +
 +
<source lang=bash>
 +
root@hb1:~# scp /etc/drbd.conf hb2:/etc/
 +
</source>
 +
 +
Nun wird das DRBD-device erstellt, die Kernel Module geladen und das Device zum Test aktiviert.
 +
<source lang=bash>
 +
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
 +
</source>
 +
Als letztes wird auf dem DRBD-device ein Dateisystem eingerichtet.
 +
<source lang=bash>
 +
root@hb1:~# mkfs.ext3 /dev/drbd0
 +
</source>
 +
 +
Zum eindinden in Heartbeat haresources anpassen:
 +
 +
<source lang=bash>
 +
root@hb1:~# cat /etc/ha.d/haresources
 +
hb1 192.168.242.15
 +
hb1 drbddisk::data Filesystem::/dev/drbd0::/data::ext3
 +
</source>
 +
Konfiguration auf andere Node kopieren:
 +
<source lang=bash>
 +
root@hb1:~# scp /etc/ha.d/haresources hb2:/etc/ha.d/
 +
</source>
 +
 +
Auf beiden Nodes Mountpunkt erstellen:
 +
<source lang=bash>
 +
root@hb1:~# mkdir /data
 +
root@hb2:~# mkdir /data
 +
</source>
 +
 +
Heartbeat neu starten
 +
<source lang=bash>
 +
root@hb1:~# service heartbeat stop
 +
root@hb1:~# service heartbeat start
 +
</source>

Aktuelle Version vom 6. August 2014, 07:52 Uhr

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