Linux Cluster MiniHowTo 18. Mai 2009, 22:30 · von thomas_ Das folgende HowTo beschreibt den Aufbau eines Linux Clusters, auf dem ein Webserver läuft. Es kann aber auch auf Cluster mit anderen Einsatzzwecken und mehr Nodes angewendet werden. Das HowTo wird nur auf eine Minimalkonfiguration eingehen, ist aber voll funktionsfähig. Anforderungen: zwei PC’s jeweils eine leere Partition oder Festplatte eine frische Minimalinstallation von Debian Lenny auf jedem Node Webserver auf jedem Node installiert jeder der zwei Nodes sollte bereits mit einer IP Adresse und einem Hostnamen vorkonfiguriert sein eine zusätzliche, nicht belegte, IP-Adresse beide Nodes müssen sich über den Hostnamen ansprechen können (z.B. über Einträge in der /etc/hosts) Umgesetzt wird der Cluster mit heartbeat, drbd und ocfs2. heartbeat Heartbeat ist die eigentliche Clustermanagement-Software. Die beiden anderen Applikationen sind nur Beiwerk und je nach Einsatzgebiet auch optional. Wir nutzen Heartbeat zum Umschalten einer virtuellen IP-Adresse im Fehlerfall, oder bei einem manuellen Clusterschwenk. Heartbeat kann aber deutlich mehr. Einen kleinen Überblick dazu gibt es auf der englischen Wikipedia. Zunächst muss Heartbeat natürlich installiert werden. Unter Debian geschieht dies einfach mit dem Befehl apt-get install heartbeat Die Konfiguration geschieht vornehmlich in drei Dateien: /etc/ha.d/ha.cf node node1 node2 #alle Nodes des Clusters werden hier aufgeführt # Bekanntgabe der IP-Adressen aller Nodes und wie diese über # welche Schnittstelle zu erreichen sind: ucast eth0 192.168.178.185 # wird automatisch von node1 ignoriert ucast eth0 192.168.178.186 # wird automatisch von node2 ignoriert # Anhand von Pings auf die folgende IP-Adresse wird ermittelt # ob der aktive Node erreichbar ist ping 192.168.178.184 # gemeinsame virtuelle IP der Nodes # Debug/Logfiles: debugfile /var/log/ha-debug logfile /var/log/ha-log deadtime 10 # Sekunden bis ein Node für tot erklärt wird /etc/ha.d/authkeys auth 3 #1 crc # keine Sicherheit #2 sha1 HI! # oder ein gemeinsamer sha1-hash 3 md5 supergeheimerstring # oder md5-hash /etc/ha.d/haresources node1 192.168.178.184 # der bevorzugte Node und die umzuschaltenden Ressourcen Die obige Installation ist auf beiden Nodes durchzuführen. Die Konfiguration kann dann von einem auf den anderen Node kopiert werden, sodass dieses auf beiden Nodes exakt gleich ist. Nun kann Heartbeat mit /etc/init.d/heartbeat restart aktiviert werden. Jetzt sollte der Webserver über die virtuelle IP-Adresse erreichbar sein. Ein manueller Failover kann mit folgenden Befehlen erreicht werden: /usr/lib/heartbeat/hb_standby /usr/lib/heartbeat/hb_takeover Weitere Informationen zur Konfiguration gibt es auf der offiziellen Homepage des Tools. drbd Drbd (Distributed Replicated Block Device) ist eine Netzwerkspeicherlösungs-Software. Damit ist es möglich gleichzeitig auf die lokale Festplatte und eine entfernte Festplatte zu speichern. Eine genauere Beschreibung findet sich auf Wikipedia. Installiert wird die Software über das Debian Paketmanagementsystem: aptitude install drbd8-utils drbd8-modules-`uname -r` Das letztere Paket enthält ein Kernelmodul das für den Betrieb von drbd erforderlich ist. Damit das Kernelmodul beim Systemstart geladen wird, muss es zur /etc/modules hinzugefügt werden. echo drbd >>/etc/modules Um das Modul sofort (vor dem nächsten Systemneustart) zu laden muss es mit modprobe geladen werden: modporbe drbd Konfiguriert wird drbd über das File drbd.conf: # erlaubt das Erfassen von Statistikdaten seitens Linbit #(siehe http://usage.drbd.org) global { usage-count yes; } # Bestimmt die Replikationsmethode resource r0 { protocol C; # Gibt die Netzwerkgeschwindigkeit an syncer { rate 100M; } # gibt an, dass zwei Nodes primär sein dürfen (per Default nur einer) net { allow-two-primaries; } # gibt an, dass sich beide Nodes beim Starten als Primär registrieren startup { become-primary-on both; } on node1 { device /dev/drbd0; disk /dev/hdb; address 192.168.178.185:7788; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/hdb; address 192.168.178.186:7788; meta-disk internal; } } Nach dem Erstellen des Konfigurationsfiles muss es natürlich auf den anderen Node kopiert werden. Nach dem Kopieren muss das Drbd-Device auf beiden Nodes initialisiert werden: drbdadm create-md r0 Nun müssen Beide Nodes synchronisiert werden. Dies geschieht in dem der eine die Daten des anderen Nodes überschreibt. Die folgende Zeile sollte deshalb auch nur auf einem Node ausgeführt werden. drbdsetup /dev/drbd0 primary --overwrite-data-of-peer Ob die Synchronisation beendet ist kann mit /etc/init.d/drbd status in der Spalte „ds“ begutachtet werden. Dort müssen beide Nodes als „UpToDate“ ausgewiesen sein. Die beiden Nodes können nun mit dem Befehl drbdadm primary r0 zu primären Nodes gemacht werden. D.h. beide Nodes dürfen gleichzeitig auf das Device schreiben. Zur Veranschaulichung: Wir haben jetzt auf beiden Nodes ein Device Namens „/dev/drbd0„. Sobald einer der beiden Nodes auf dieses Device schreibt, wird der Schreibvorgang auf der lokalen Festplatte und auf der Festplatte des anderen Nodes durchgeführt. ocfs2 oracle_logo Was nun noch fehlt um Dateien auf dem Device ablegen zu können, ist ein Dateisystem. „Normale“ Dateisysteme, wie z.B. ext2/3/4, reiserfs, FAT oder NTFS, verbieten sich von selbst da sie nicht für diesen Zweck ausgelegt sind. Würde man von mehr als einem Node schreibend darauf Zugriff nehmen, würde das Dateisystem sofort inkonsistent. Deshalb gibt es sog. Clusterdateisysteme, die das Schreiben mehrerer Nodes gleichzeitig auf ein einziges Dateisystem beherrschen. Eines Davon ist das Oracle Cluster Filesystem 2, kurz ocfs2. Installiert wird es ebenfalls über die Debian Paketverwaltung: aptitude install ocfs2-tools Wer dazu lieber noch ein grafisches Tool installieren will, kann noch das Paket „ocfs2console“ installieren. Konfiguriert wird das Dateisystem über die Datei „/etc/ocfs2/cluster.conf„: cluster: node_count = 2 name = ocfs2 node: ip_port = 7777 ip_address = 192.168.178.185 number = 0 name = node1 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.178.186 number = 1 name = node2 cluster = ocfs2 Achtung! Hier ist das Einrücken zwingend erforderlich. Die Konfiguration muss natürlich wieder auf beiden Nodes erstellt werden, damit die Konfiguration mit /etc/init.d/ocfs2 restart aktiviert werden kann. Die Konfiguration alleine bewirkt natürlich noch nichts, denn das Dateisystem muss, bevor man es verwenden kann, zunächst einmal auf das Device aufgebracht werden: mkfs.ocfs2 /dev/drbd0 Diese Prozedur sollte nur an einem Node durchgeführt werden. Damit man das Dateisystem nutzen kann muss man es online nehmen: /etc/init.d/o2cb online ocfs2 Dies kann auch automatisiert geschehen. Dazu muss das Init-Script mit dem „configure“ aufgerufen werden. /etc/init.d/o2cb configure Nun kann das Dateisystem gemounted und genutzt werden. Sämtliche Änderungen werden live auf dem anderen Node sichtbar. mount /dev/drbd0 /dein/lieblings/mountpoint