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
Categories: DRBDLinux