Heartbeat: Unterschied zwischen den Versionen
Denis (Diskussion | Beiträge) |
|||
| 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