High-Availability mit Heartbeat
Aus TecArt-CRM Developer-Wiki
Hinweis: Wenn nicht anders angegeben, müssen die Befehle grundsätzlich auf allen beteiligten Nodes durchgeführt werden. Das virtuelle Netzwerkinterface, welches die virtuelle IP abbildet, wird von Heartbeat erstellt, weshalb sowohl IP als auch NIC noch nicht existieren sollten und nicht in etwaigen NIC-Konfigurationen enthalten seien sollten
Installation
Um die benötigten Tools zu installieren, muss der folgende Befehl ausgeführt werden:
root@server~: aptitude install heartbeat
Zusätzliche Skripts
Unter Debian ist es auf Grund eines Bugs nötig, das Netzwerk nach dem automatischen Hinzufügen des NICs durch Heartbeat neuzustarten. Hierfür bietet sich folgendes Skript an:
root@server~: touch /etc/ha.d/networkrestart.sh && chmod +x /etc/ha.d/networkrestart.sh && nano /etc/ha.d/networkrestart.sh #!/bin/bash echo "Waiting to restart network for secure IP forwarding" sleep 10 /etc/init.d/networking restart exit 100
Das Skript wird dann später durch die ha.cf eingebunden.
Konfiguration
Nachdem Heartbeat installiert ist, müssen zuerst einige Systemeinstellungen geändert werden:
root@server~: sysctl -w net.ipv4.ip_nonlocal_bind=1 && echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf root@server~: touch /etc/ha.d/authkeys && chmod 0600 /etc/ha.d/authkeys
Außerdem müssen einige Heartbeat-Konfigurations-Dateien erstellt werden.
Die Datei /etc/ha.d/authkeys - hier muss ZufaelligerString durch eine zufällige Zeichenkette ersetzt werden. Die Datei muss auf beiden Nodes gleich sein.
auth 1 1 sha1 ZufaelligerString
Um eine zufällige Vorlage zu speichern, kann man auch den nachfolgenden Befehl ausführen. Die Datei muss anschließend auf den zweiten Node kopiert werden.
root@server~: ( echo -ne "auth 1\n1 sha1 "; \
dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
> /etc/ha.d/authkeys
Die Datei /etc/ha.d/ha.cf. Die Optionen bcast, mcast, ucast, udp müssen entsprechend der Serverkonfiguration angepasst werden. Die IP-Adresse der Option ucast muss auf die Adresse des jeweilig anderen Nodes geändert werden.
# keepalive: Sekunden zwischen Heartbeat-Anfragen keepalive 2 # deadtime: Nach wie vielen Sekunden ein Host als offline erkannt wird deadtime 10 # UDP port für udp oder ppp-udp Kommunikation udpport 694 bcast eth1 ucast eth1 10.10.10.101 # NIC Für Heartbeat - internes Netzwerk-Interface. udp eth1 logfacility local0 # node nodename ... -- must match uname -n node loadbalance1 node loadbalance2 # Netzwerk neu initialisieren. # Wg. Bug bei iptables für ifup/ifdown in Debian dringend notwendig respawn root /etc/ha.d/networkrestart.sh
Die Datei /etc/ha.d/haresources. Die Datei ist auf beiden Nodes gleich. Der erste Teil ist die Ausgabe von uname -n auf dem ersten Node, der zweite Teil ist die Virtuelle IP-Adresse die genutzt werden soll.
loadbalance1.tecart.de 82.197.134.201
Zusätzlich sollte die Netzwerkkonfiguration angepasst werden. Im Beispiel wurde die Datei /etc/network/interfaces angepasst:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
# Statische private IP
# -> je Node eine eigene IP
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
# Nameserver des Öffentlichen Netzes
dns-nameservers 82.197.134.3
# Öffentliches Gateway
gateway 82.197.134.1
# Routing für eth0:1 bei ifup vorbereiten
# Netzadresse ist die des Gateways
up iptables -t nat -A POSTROUTING -j MASQUERADE -s 82.197.134.0/24
down iptables -t nat -D POSTROUTING -j MASQUERADE -s 82.197.134.0/24
# Optionales zweites Netzwerkinterface
auto eth1
iface eth1 inet static
address 10.10.10.101
netmask 255.255.255.0
network 10.10.10.0
broadcast 10.10.10.255
dns-nameservers 10.10.10.2
Sind alle Konfigurationen angepasst und gespeichert, kann Heartbeat gestartet werden:
root@server~: /etc/init.d/heartbeat start
