Um mich mal ein wenig von IBM abzulenken, mache ich einfach mal mit der alten Artikelserie die wohl die meisten interessieren wird weiter. Unsere letzte Aktion war DRBD einrichten, dies ist nun erledigt und wir können den nächsten Schritt gehen: OCSF2.
Kernel
Wenn wir nicht gerade einen Ur- Alt Kernel verwenden ist OCFS2 bereits mit enthalten (im Kernelsource). Dieses müssen wir nun nur noch in den Kernel mit einbauen. Wer nun wie ich denkt, dies könne man fest einkompilieren da die Funktionalität eh gebraucht wird, der irrt. Die entsprechenden Funktionen MÜSSEN als Modul kompiliert werden, nach dem Neustart muss es entsprechend so aussehen:
node ~ # lsmod
Module Size Used by
drbd 185640 4
ocfs2_dlmfs 20752 1
ocfs2 385256 1
ocfs2_dlm 176540 2 ocfs2_dlmfs,ocfs2
ocfs2_nodemanager 196424 7 ocfs2_dlmfs,ocfs2,ocfs2_dlm
configfs 25704 2 ocfs2_nodemanager
Das “drbd” Modul geht uns momentan nichts an. Unter Umständen kann es auch sein das die Module noch nicht geladen wurden, dies wird dann vom init Script erledigt, falls nicht kann man diese auch einfach in die autoload einfügen.
OCFS2 Tools
Damit nach ein Blockdevice als Clusterdateisystem genutzt werden kann, benötigen wir noch einige Tools. Wie immer wird von Gentoo ausgegangen:
emerge ocsf2-tools
Einmal davon abgesehen das das Paket maskiert ist (was für Gentoo Kenner kein Problem sein sollte) wird es nicht sauber emergen da das “make” abstürzen wird. Theoretisch könnte ich damit den Artikel beenden und die Lösung nur gegen Geld zur Verfügung stellen, aber wir machen nun einfach weiter, folgendes funktioniert zum aktuellen Zeitpunkt Copy und Paste:
cd /usr/portage/sys-fs/ocfs2-tools/
ebuild ocfs2-tools-1.2.1.ebuild unpack
cd /var/tmp/portage/sys-fs/ocfs2-tools-1.2.1/work/ocfs2-tools-1.2.1/libocfs2/include/
vi ocfs2.h
In die ocfs2.h fügen wir nun die Zeilen mit dem + am Anfang ein, die anderen sind nur als Navigationshilfe gezeigt (Zeile 48), das + (PLUS) sollte natürlich entfernt werden:
#include "byteorder.h"
+#if !defined(offsetof)
+# define offsetof(type,memb) ((size_t)&((type*)0)->memb)
+#endif
#if OCFS2_FLAT_INCLUDES
#include "o2dlm.h"
Noch einen anderen “Bug” fixen:
cd /usr/portage/sys-fs/ocfs2-tools/
ln -s /usr/src/linux/include/asm/page.h /usr/include/asm/
Und den “Gentoo Way” weiter:
ebuild ocfs2-tools-1.2.1.ebuild compile
ebuild ocfs2-tools-1.2.1.ebuild install
ebuild ocfs2-tools-1.2.1.ebuild qmerge
Konfigurieren
Die Konfigurationsdatei, Copy und Paste muss natürlich angepasst werden, die Datei heisst:
/etc/ocfs2/cluster.conf
node:
ip_port = 7777
ip_address = 172.16.4.20
number = 0
name =web1
cluster = ocfs2
node:
ip_port = 7777
ip_address = 172.16.4.21
number = 1
name = web2
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2
Da da bei cluster “ocfs2” steht hat nichts zu sagen, dies ist nur der Name des Clusters, da könnte auch Wurstbrot stehen (ich bin jetzt mal gespannt wer seinen Cluster Wurstbrot nennt). Wichtig ist noch das die Namen der Nodes auflösbar sind, sonst können lustige Probleme entstehen, müssen aber nicht.
Weitere Vorbereitungen
Zwei neue Zeilen in der fstab:
none /config configfs defaults 0 0
none /dlm ocfs2_dlmfs defaults 0 0
Die entsprechenden Ordner /config und /dlm müssen von Hand angelegt werden.
Formatieren
Nun formatieren wir unser DRBD Device mit OCFS2:
mkfs.ocfs2 /dev/drbd0
Unter Umständen sollten noch andere Inode und Cluster Größen gewählt werden, der Standard war mir zu verschwenderisch. Das formatieren ist natürlich nur auf einer Seite notwendig, wir haben ja DRBD.
Starten und nutzen
Mit einem beherzten:
/etc/init.d/ocfs2 start
mount /dev/drbd0 /mnt/sonstwohin
Das natürlich auf beiden Nodes bzw. allen Nodes ausgeführt werden sollte ist unser Cluster nun fertig.
Theoretisch ist diese Serie nun zu Ende, es wird aber noch ein paar Teile geben, die auf das Loadbalancing und vor allem auf mögliche Probleme die entstehen können eingehen.