Grundlagen
- Lesen Sie bitte zunächst die Howto-Grundlagen, welche Sie hier finden.
Prämisse
Dieses Howto beschreibt die Einrichtung eines hochverfügbaren Load-Balancers unter dem Einsatz von 'Ldirectord', sowie Hearbeat. Es beschreibt, wie zwei Rechner als Load-Balancer eingerichtet und in einen mittels Heartbeat überwachten Verbund zusammen gefasst werden.
Ferner wird beschrieben, wie eine einfache aber hochverfügbare Lastenverteilung eines Webserver-Clusters erreicht werden kann.
Um dies an Hand eines Beispiels zu verdeutlichen, orientiert sich das vorliegende Howto am folgenden Netzwerkschema
| Dienst | IP Server 1 | IP Server 2 | NetMask | Virtuelle IP |
|---|---|---|---|---|
| Load-Balancer | 192.168.1.1 | 192.168.1.2 | 255.255.255.0 | - |
| Web-Server | 192.168.1.100 | 192.168.1.101 | 255.255.255.0 | 10.0.10.50 |
Voraussetzungen
Software
Die meisten der folgenden Pakete werden im Laufe dieser Installation bnötigt und sollen an dieser Stelle lediglich informationshalber erwähnt werden. Unter Fedora Core sollten diese Abhängigkeiten durch Yum aufgelöst und die benötigten Packete somit automatisch installiert werden.
- fedora-usermgmt
- fedora-usermgmt-core
- fedora-usermgmt-default-fedora-setup
- fedora-usermgmt-shadow-utils
- libtool-ltdl
- net-snmp-libs
- pils
- stonith
- ipvsadm
- perl-MailTools
- perl-TimeDate
- perl-URI
- perl-libwww-perl
Arbeitsverzeichnis
-bash-3.1# mkdir -p /root/build/ha -bash-3.1# cd /root/build/ha
Kernelmodule
Die folgenden Kernelmodule müssen durch den Server beim Hochfahren geladen werden, da Ldirectord diese zur Laufzeit verwendet.
- ip_vs
- ip_vs_dh
- ip_vs_ftp
- ip_vs_lblc
- ip_vs_lblcr
- ip_vs_lc
- ip_vs_nq
- ip_vs_rr
- ip_vs_sed
- ip_vs_sh
- ip_vs_wlc
- ip_vs_wrr
Um zu erreichen, dass diese beim Hochfahren geladen werden, erstellen Sie einfach die Datei /etc/sysconfig/modules/ip_vs.modules und fügen den folgenden Inhalt hinzu.
#!/bin/sh
#
# Load the ipvs kernel modules needed by ldirectord
#
for i in ip_vs ip_vs_dh ip_vs_ftp ip_vs_lblc ip_vs_lblcr ip_vs_lc ip_vs_nq ip_vs_rr ip_vs_sed ip_vs_sh ip_vs_wlc ip_vs_wrr;do
modprobe $i >/dev/null 2>&1
done
Anschliessend sorgen Sie noch dafür, dass die Datei auch ausgeführt werden kann.
-bash-3.1# chmod 755 /etc/sysconfig/modules/ip_vs.modules
IP-Forwarding
Die Load-Balancer müssen dazu in der Lagen sein, eingehenden Netzwerkverkehr an die hinter ihnen platzierten Server, auf welchen die Dienste ausgeführt werden, weiter zu leiten. Hierzu muss das Packet Forwarding auf ihnen aktiviert werden.
Mit folgenden Eintrag in der Datei /etc/sysctl.conf ist die zu bewerkstelligen, wobei der Eintrag an sich aller Wahrscheinlichkeit nach bereits existieren wird und somit lediglich der Wert von 0 auf 1 zu setzen ist.
# Enable packet forwarding net.ipv4.ip_forward = 1
Abschliessend muss dem Server noch gesagt werden, dass er die Änderung übernehmen soll, was mit dem folgenden Kommando zu erreichen ist
-bash-3.1# sysctl -p
Installation
Die Installation unter Fedora Core erweisst sich als recht simpel. Führe Sie hierzu lediglich das folgende Kommando aus.
-bash-3.1# yum install heartbeat
Konfiguration
Die Konfiguration des Load-Balancers stellt ebenfalls keine grosse Hürde dar. Im Folgenden wird sie vorgestellt.
Heartbeat
Heartbeat wird mittels zweier Dateine konfiguriert, welche beide im Verzeichnis /etc/ha.d zu finden sind:
- ha.cf
- haresources
Ferner wird eine Datei benötigt, in welcher die Zugangsdaten gespeichert sind, welche im Laufenden System dann von den beiden Load-Balancern dazu verwendet wird, mit dem jeweils anderen zu kommunizieren. Auch diese wird unter /etc/ha.d abgelegt.
- authkeys
ha.cf
Legen Sie Datei /etc/ha.d/ha.cf an und fügen den folgenden Inhalt ein.
logfile /var/log/ha-log logfacility local0 bcast eth0 mcast eth0 225.0.0.1 694 1 0 auto_failback off node fqdn.lb1.mydom.local node fqdn.lb2.mydom.local respawn hacluster /usr/lib64/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster
Ersetzen Sie fqdn.lb{1,2}.mydom.local durch den jeweiligen Vollqualifizierten Domänenname Ihrer beiden Load-Balancer-Systeme.
lib64 durch lib für den Parameter respawn.
haresources
Legen Sie Datei /etc/ha.d/haresources an und fügen den folgenden Inhalt ein.
fqdn.lb1.mydom.local \
ldirectord::ldirectord.cf \
LVSSyncDaemonSwap::master \
IPaddr2::10.0.10.50/24/eth0/10.0.10.255
Das jede Zeile abschliessenden \-Zeichen dienen der Aufteilung eines Konfigurationsparameters auf mehrere Zeilen, wodurch sich der Eintrag deutlich besser liest.
| Zeile | Konfigurationswert | Bedeutung |
|---|---|---|
| 1 | fqdn.lb1.mydom.local | Definiert den FQDN des ersten Load-Balancers. Hier ist auf jedem LB immer der des ersten einzutragen. |
| 2 | ldirectord::ldirectord.cf | Definiert die für diesen Dienst zu verwendende Ldirectord-Konfigurationsdatei. |
| 3 | LVSSyncDaemonSwap::master | ? |
| 4 | IPaddr2::10.0.10.50/24/eth0/10.0.10.255 | Definiert die IP-Einstellungen für den Virtuellen Server und legt fest, an welches Netzwerkinterface dieser zu binden ist. |
authkeys
Damit die sich im selben Verbund befindlichen Load-Balancer miteinander kommunizieren können, müssen sie über ein und die selbe authkeys-Datei verfügen.
Legen Sie Datei /etc/ha.d/authkeys an und fügen den folgenden Inhalt ein.
3 md5 saglk3lkaofdhvdsa9634lknalfk02lkn5lbnglsdhfg
Der dritte Teil des Eintrags, saglk3lkaofdhvdsa9634lknalfk02lkn5lbnglsdhfg stellt einen zufälligen Wert dar, den Sie durch willkürliches Betätigen Ihrer Tastatur oder auch nach belieben anderweitig erstellen können. Lediglich von dem hier verwendeten Wert sollte sich Ihrer unterscheiden.
Da es sich bei dieser Datei um eine Passwortdatei handelt, sollten Sie die Zugriffsrechte auf diese entsprechend setzen.
-bash-3.1# chmod 600 /etc/ha.d/authkeys
Ldirectord
Nachdem Sie Heartbeat konfiguriert haben, ist es nun an der Zeit, Ldirectord mit der benötigten Konfiguration zu versehen. Eine diesen Teil abdekende Anleitung finden Sie in diesem Howto.
Last but not least finden Sie hier eine Anleitung, wie Sie Ihre Webserver zu konfigurieren haben, damit diese über den Load-Balancer verfügbar gemacht werden können.
SysInit
Heartbeat
Heartbeat sollte bei der Installation bereits im SysInit veranckert und dort auch aktiviert sein. Zur Sicherheit sorgen wir dafür, dass er es auch wirklich ist. Zuvor jedoch erstellen wir noch einen symbolischen Link, damit wir nicht immer so viel Tippen müssen.
-bash-3.1# ln -s /etc/init.d/heartbeat /usr/sbin/rcheartbeat -bash-3.1# chkconfig heartbeat on
Ldirectord
Ldirectord sollte bei der Installation ebenfalls im SysInit veranckert und dort aktiviert worden sein. Da in unserer Installation der Ldirectord jedoch von Heartbeat verwendet und gestartet wird, muss dafür gesorgt werden, dass Ldirectord nicht als eigenständiger Dienst ausgeführt wird. Zuvor jedoch erstellen wir noch einen symbolischen Link, damit wir nicht immer so viel Tippen müssen.
-bash-3.1# ln -s /etc/init.d/ldirectord /usr/sbin/rcldirectord -bash-3.1# chkconfig ldirectord off