Filer und Cluster mit mehreren Servern



Vorwort


HINWEIS: Diese Beschreibung (bzw. einige Details) gilt nicht für Server, welche sich aktuell im Angebot von OVH befinden (Stand 08.06.2009).

Sie verfügen über einen gesicherten Speicherbereich (RAID) auf einem Filer. Sie teilen diesen Bereich unter mehreren dedizierten Servern auf (per NFS). OVH hat Ihnen eine neue IP-Adresse zugewiesen (IP für die Lastverteilung, "balanced IP"). Ausserdem hat OVH Ihre Server konfiguriert damit diese auf den gesicherten Speicherbereich zugreifen und den Traffic von der IP zur Lastverteilung aus erhalten.


Wie wird der Server modifiziert?


Wenn Sie den Cluster Dienst direkt nutzen wollen ohne sich mit seiner Funktionsweise zu beschäftigen können Sie direkt zum Abschnitt "Erste Schritte mit Ihrem Cluster" springen.


1. Konfiguration der IP zur Lastverteilung

Damit der Server Pakete von der IP zur Lastverteilung akzeptiert wird ein virtuelles Netzwerkinterface als lo:0 hinzugefügt:

lo:0 Link encap:Local Loopback
inet addr:213.251.xxx.xxx Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1


Das Routing wird auch auf der Ebene des Servers modifiziert (Hinzufügen der table 201 in iproute2).

2. Konfiguration eines privaten Netzwerks zum Zugang auf den Filer

Der Zugang zum Filer erfolgt über ein privates Netzwerk vom Typ 192.168.xxx.xxx. Jeder Server verfügt über seine eigene als eth0:0 konfigurierte IP:

eth0:0 Link encap:Ethernet HWaddr 00:E0:4C:82:32:3F
inet addr:192.168.xxx.xxx Bcast:192.168.xxx.255 Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:19 Base address:0xc000


3. Mounten der gesicherten Partition

Der gesicherte Speicherbereich wird auf den Servern per NFS als /home/ha gemountet. Die Datei /etc/fstab enthält eine neue Zeile:

192.168.xxx.xxx:/vol0/Z-xxx-xxx /home/ha nfs rw 0 0


4. Installation der Sonde

Um das Prinzip der "High Availability" zu sichern muss das System zur Lastverteilung eine Maschine aus dem Cluster entfernen können wenn diese nicht mehr verfügbar ist. Dazu installieren wir einen Daemon (OCO) auf jedem Server der prüft ob der Server in der Lage ist auf Anfragen zu antworten. Standardmässig prüft OCO nur ob der Port 80 auf HHTP Requests antwortet. Sie können jedoch ganz einfach Skripte hinzufügen die Sie benötigen um speziellere Überprüfungen durchzuführen (prüfen ob PHP korrekt antwortet, ob FTP funktioniert...).

Funktionsweise von OCO

OCO wird in /usr/local/oco installiert, der Daemon wird automatisch beim Start des Servers per /etc/init.d/oco ausgeführt.
Die Skripte zur Überprüfung liegen in den Verzeichnissen:
/usr/local/oco/60sec , /usr/local/oco/120sec oder /usr/local/oco/300sec.

Diese werden automatisch mit der im Ordnernamen bezeichneten Frequenz ausgeführt. Jedes Skript schreibt eine Datei in das Verzeichnis /usr/local/oco/result. Der Inhalt dieser Datei ist eine Zahl:
  • 200 wenn alles in Ordnung ist
  • 300 oder mehr wenn es einen Fehler gibt

Es muss mindestens eine Datei mit Inhalt 200 im Verzeichnis /usr/local/oco/result vorhanden sein damit der Server dem Cluster hinzugefügt wird. Wenn eine oder mehrere Dateien 300 (oder mehr als 300) enthält, dann wird der Server aus dem Cluster entfernt. Wenn mindestens eine Datei eine Änderungszeit grösser als 15 Minuten aufweist wird der Server ebenfalls aus dem Cluster entfernt.

Warnung:
Wenn Sie die mit OCO gelieferten Prüfskripte modofizieren, dann ändern Sie den Namen der Skripte, da Ihre Änderungen sonst bei einem Update von OCO überschrieben werden würden.

5. Freizugebende Netzwerkströme

Wenn Ihr Server mit einer Firewall ausgestattet ist, dann müssen Sie folgendes auf dem Server freigeben:

  • Kommunikation mit dem Lastverteiler (OCO): Sie müssen Verbindungen von xx.yy.zz.240 , xx.yy.zz.241 und xx.yy.zz.242 zum Port 79 Ihres Servers erlauben (xx.yy.zz sind dabei die ersten Oktette Ihrer Haupt-IP). Zum Beispiel:
iptables -A INPUT -s 213.251.164.240 -i eth0 -p tcp -m tcp --dport 79 -j ACCEPT
iptables -A INPUT -s 213.251.164.241 -i eth0 -p tcp -m tcp --dport 79 -j ACCEPT
iptables -A INPUT -s 213.251.164.242 -i eth0 -p tcp -m tcp --dport 79 -j ACCEPT


  • Kommunikation mit dem Filer: Sie müssen den NFS Traffic zwischen Ihrem Server und dem Filer erlauben (Sie finden die IP des Filers in der Datei /etc/fstab, diese ist vom Typ 192.168.1.1). Zum Beispiel:

iptables -A INPUT -s 192.168.59.2 -i eth0 -j ACCEPT



Erste Schritte mit Ihrem Cluster


Das Erste was Sie mit Ihrem Cluster machen wollen ist wahrscheinlich die Verteilung der HTTP Anfragen.

1. Verwendung des Filers

Damit die Lastverteilung optimal funktioniert müssen Sie die selben Webseiten und die selben Skripte auf allen Servern verwenden. Dazu ist es am einfachsten, den Speicherbereich der in /home/ha gemountet wurde zu verwenden. Kopieren Sie Ihre Seiten nach /home/ha/xxxxx; diese sind dann von jedem Server aus abrufbar. Wenn Sie CGI mit suexec oder suphp verwenden, dann müssen Sie darauf achten dass die users und die uid auf jedem Server identisch sind (und eventuell /etc/passwd modifizieren).

Ausserdem muss die Konfigurationsdatei apache httpd.conf modifiziert werden um den korrekten Pfad (/home/ha/yyyy) in den 'DocumentRoot' anzugeben.

2. Verteilung der HTTP Requests

Nehmen wir zum Beispiel einen dedizierten Server mit der IP 213.186.33.2, und die fürs Loadbalancing zugewiesene IP ist 213.251.131.8.

Die Konfigurationsdatei von Apache httpd.conf muss modifiziert werden:
  • Hinzufügen von 'NameVirtualHost' 213.251.131.8 unter der Zeile 'NameVirtualHost' 213.186.33.2
  • Modifizieren der 'VirtualHost' so dass Apache auf Requests an alle IPs des Servers antwortet; dazu ersetzen Sie <'VirtualHost' 213.186.33.2> durch <'VirtualHost' 213.186.33.2 213.251.131.8>
  • Verwenden der Loadbalancing IP anstelle der IP des Servers in der DNS Konfiguration Ihrer Domains, zum Beispiel:
www.meine_domain.tld A 213.186.33.2
wird zu:
www.meine_domain.tld A 213.251.131.8


3. Testen der Lastverteilung vor der Modifikation der DNS und/oder während der Propagation

Auf Ihrem Client Rechner (Browser) können Sie temporär die Auflösung einer einer Domain auf die Loadbalancing IP einstellen:

  • Unter Linux fügen Sie folgende Zeile der Datei /etc/hosts hinzu:
213.251.131.8 www.meine_domain.tld


  • Unter Windows editieren Sie die Ihrer Version entsprechende Datei:
Windows 95/98/Me : c:windowshosts
Windows NT/2000/XP Pro : c:winntsystem32driversetchosts
Windows XP Home : c:windowssystem32driversetchosts
und fügen Sie folgende Zeile hinzu:
213.251.131.8 www.meine_domain.tld


Beschränkungen:

Es ist technisch möglich die Pakete die an alle Ports (HTTP:80, SMTP:25, STREAMING...) gerichtet sind zu verteilen. Es ist jedoch nicht möglich, diese Lösung für MySQL (und wahrscheinlich die grosse Mehrheit der Datenbankprogramme) zu verwenden. Diese Limitierung ist Bestandteil der Datenbankprogramme, es ist dann notwendig die Lösungen der Entwickler der Software zu nutzen.