Mittels Heartbeat, DRBD und OCFS2 lässt sich ein relativ stabiles Cluster auf Linux aufbauen.
Ich habe dieses Konstrukt nun schon mehrere male aufgezogen und jedes einzelne lief bisher ohne nennenswerte Probleme.
Es ist sehr praktisch, um damit mehrere Apache2 Webserver in einem Cluster zu betreiben. Alle Maschinen haben damit den exakt gleichen Datenbestand. Wenn man nun noch einen Load Balancer (zum Beispiel: nginx) davor schaltet hat man schon ein recht gutes Konstrukt.
Hier nun die Anleitung zur Installation von Heartbeat, DRBD und OCFS2
Schritt 1 – Heartbeat
Zuerst installieren wir Heartbeat:
apt-get install heartbeat
Und editieren die Konfigurationsdateien (die Dateien werden dabei erstellt!)
vim /etc/ha.d/ha.cf
#alle Nodes des Clusters werden hier aufgefuehrt node web-node1.domain.de web-node2.domain.de #Bekanntgabe der IP-Adressen aller Nodes ucast eth0 192.168.1.121 # wird automatisch von node1 ignoriert ucast eth0 192.168.1.122 # wird automatisch von node2 ignoriert # Anhand von Pings auf die folgende IP-Adresse wird ermittelt # ob der aktive Node erreichbar ist ping 192.168.1.140 # gemeinsame virtuelle IP der Nodes # Debug/Logfiles: debugfile /var/log/ha-debug logfile /var/log/ha-log deadtime 10 # Sekunden bis ein Node fuer Tod erklaert wird warntime 7
Und die nächste Konfigurationsdatei:
vim /etc/ha.d/haresources
web-node1.domain.de 192.168.1.120 # der bevorzugte Node und die umzuschaltenden Ressourcen
vim /etc/ha.d/authkeys
auth 3 #1 crc # keine Sicherheit #2 sha1 HI! # oder ein gemeinsamer sha1-hash 3 md5 einSchluessel # oder md5-hash
Nun noch die Rechte anpassen und Heartbeat restarten:
chmod 600 /etc/ha.d/authkeys /etc/init.d/heartbeat restart
Schritt 2 – DRBD
Jetzt ist übrigens spätestens der Zeitpunkt gekommen, wo eine weitere Festplatte bereitgestellt werden sollte 😉
Installation von DRBD:
apt-get install drbd8-utils modprobe drbd echo drbd >>/etc/modules
Nun die Knfigurationen von DRBD vornehmen:
vim /etc/drbd.d/global_common.conf
global { usage-count yes; # minor-count dialog-refresh disable-ip-verification } common { protocol C; # A, B, C je nach Netzwerk handlers { pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; # fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; # split-brain "/usr/lib/drbd/notify-split-brain.sh root"; # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { become-primary-on both; # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb; } disk { # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes # no-disk-drain no-md-flushes max-bio-bvecs } net { allow-two-primaries; # sndâf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork } syncer { rate 1000M; # rate after al-extents use-rle cpu-mask verify-alg csums-alg } }
Weitere Konfiguration:
vim /etc/drbd.d/default.res
resource r0 { protocol C; on web-node1.comain.de { device /dev/drbd0; disk /dev/xvdb; address 192.168.1.121:7788; meta-disk internal; } on web-node2.domain.de { device /dev/drbd0; disk /dev/xvdb; address 192.168.1.122:7788; meta-disk internal; } }
DRBD Device erstellen und starten
drbdadm create-md r0 /etc/init.d/drbd start
drbdadm primary r0 drbdadm -- --overwrite-data-of-peer primary r0
Status einsehen?!
# /etc/init.d/drbd status # cat /proc/drbd
Schritt 3 – OCFS2 Tools
Nun installieren wir das “Oracle Cluster File System”:
apt-get install ocfs2-tools
Und passen die Konfigurationen an:
vim /etc/ocfs2/cluster.conf
cluster: node_count = 2 name = ocfs2 node: ip_port = 7777 ip_address = 192.168.1.121 number = 0 name = web-node1.domain.de cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.1.122 number = 1 name = web-node2.domain.de cluster = ocfs2
Und starten!
/etc/init.d/ocfs2 restart
Folgenden Befehl nur auf einem Node ausführen:
mkfs.ocfs2 /dev/drbd0 ###### nur auf einem node
Und das DRBD Device mounten:
dpkg-reconfigure ocfs2-tools mount /dev/drbd0 /dein/lieblings/mountpoint