High-Availability mit Heartbeat – TecArt-CRM Developer-Wiki

High-Availability mit Heartbeat

Aus TecArt-CRM Developer-Wiki

Wechseln zu: Navigation, Suche

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