Debian Squeeze + DRBD + Pacemaker Tutorial

Vorbereitung

Ich benutze 2 Debian Systeme (phobos und deimos) für diese Installation. Die Systeme sind mit einer Netboot-CD mit einem Minimalsystem installiert und bis auf das LVM (das es später um einiges leichter macht neue Platten in das System oder ins DRBD einzubinden) habe ich nicht viel abweichend installiert.

Jedes System hat 2 Netzwerkinterfaces (eines für den “normalen” Netzwerktraffic und eines für die direkte übertragung der DRBD-Daten. Alternativ könnte man die beiden Interfaces auch als bond redundant ans Netzwerk anbinden und die DRBD Kommunikation über ein seperates VLAN laufen lassen, aber das heb ich mir vielleicht für ein anderes Tuturial auf ;)

In meinem Setup hat jeder Server auch 2 Festplatten (eine für das System und eine für die DRBD-Daten). Durch das LVM ist das zwar nicht notwendig, aber aus Performancegründen empfiehlt es sich die Systemdaten von den DRBD Daten zu trennen.

Die Systeme

+---------------------------+ +---------------------------+
|           phobos          | |          deimos           |
+---------------------------+ +---------------------------+
| eth0: 192.168.1.244/24 |--| |--| eth0: 192.168.1.245/24 |
| eth1: 10.11.12.1/24    |-------| eth1: 10.11.12.2/24    |
+---------------------------+ +---------------------------+

Es empfiehlt sich, die internen (die 10.11.12.* IP-Adressen und Hostnames in die /etc/hosts auf den beiden Servern einzutragen, um DNS Abfragen für die beiden Hosts zu vermeiden. Sobald das Minimalsystem steht und die IP-Adressen konfiguriert sind können wir mit der eigentlich Installation unseres HA-Clusters beginnen.

Debian Sources erweitern

Bevor wir mit der Installation beginnen können, müssen wir noch unsere Packetquellen abändern damit wir die Pakete bekommen die wir brauchen. Weiters empfiehlt es sich wenn du es nicht eh schon gemacht hast, das Debian Backports Repository zu aktivieren, um frische Packete zu bekommen, was nie schaden kann.

Meine /etc/apt/sources.list sieht so aus:

deb http://debian.inode.at/debian/ squeeze main contrib non-free
deb-src http://debian.inode.at/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

deb http://ftp.at.debian.org/debian-backports/ squeeze-backports main contrib non-free
deb-src http://ftp.at.debian.org/debian-backports/ squeeze-backports main contrib non-free

Um die Paketlisten zu aktualisieren führen wir danach noch ein apt-get update aus.

DRBD installieren

Das wichtigste bei einem HA-Cluster ist Zeit. Da beide Server genau die selbe Uhrzeit haben sollen installieren wir ntp auf beiden Servern, um die lokale Uhrzeit mit Zeitservern im Internet abzugleichen.

apt-get install ntp ntpdate

Nachdem wir uns um die Zeit gekümmert haben, kommen als nächstes das DRBD Paket und der Cluster Manager Pacemaker.

apt-get install drbd8-utils pacemaker

Wenn die Pakte installiert sind, laden wir als nächstes das DRBD Kernel Modul und probieren es gleich aus:

modprobe drbd
lsmod | grep drbd

Beim letzten Befehl solltest du in der Auflistung das DRBD Modul sehen, wenn nicht dann hat es bei den vorigen Schritten ein Problem gegeben. Du solltest auch mit cat /proc/drbd schon ein paar Infos zur DRBD Installation sehen können:

phobos:~# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

Bearbeite als nächstes auf beiden Servern die Datei /etc/drbd.d/mars.res und passe die Config an dein Setup an:

resource mars {
disk {
on-io-error detach;
}
on phobos {
device /dev/drbd0;
disk /dev/mapper/data-drbd;
address 10.11.12.1:7788;
meta-disk internal;
}
on deimos {
device /dev/drbd0;
disk /dev/mapper/data-drbd;
address 10.11.12.2:7788;
meta-disk internal;
}
}

Als nächstes erstellen wir (wie schon die ganze Zeit auf beiden Servern) die DRBD Metadaten.

drbdadm create-md mars
drbdadm up all

Wenn du jetzt cat /proc/drbd eingibst, sieht du das beide Nodes im Secondary Mode sind und auch beide Inkonsistent sind.

phobos:~# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

Das ist aber eh klar weil wir ja noch einstellen müssen, welcher Node der Primäre sein soll und wir auch noch kein Filesystem und nichts auf unserer Virutellen DRBD Platte haben. Dazu führen wir auf einem Server, in meinem fall phobos die folgenden Befehle aus:

phobos:~# drbdsetup /dev/drbd0 primary -o
phobos:~# mkfs.ext3 /dev/drbd0
mkdir /mnt/data # den Ordner solltest du auf beiden Nodes erstellen
mount /dev/drbd0 /mnt/data

Damit ist unser DRBD Setup grundsätzlich fertig. Wenn du jetzt df -h eingibst, solltest du deine Hochverfügbare Partition sehen können.

phobos:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/phobos-root
7.3G 829M 6.1G 12% /
tmpfs 379M 0 379M 0% /lib/init/rw
udev 10M 640K 9.4M 7% /dev
tmpfs 379M 0 379M 0% /dev/shm
/dev/sda1 228M 9.4M 207M 5% /boot
/dev/drbd0 2.0G 35M 1.8G 2% /mnt/data

cat /proc/drbd zeigt nun auf beiden Nodes wer in welchem Modus ist und das die Daten überall aktuell und konsistent sind.

phobos:~# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
ns:2050468 nr:0 dw:65608 dr:1984973 al:25 bm:125 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:16377 misses:40 starving:0 dirty:15 changed:25
deimos:~# cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate C r---
ns:0 nr:2050468 dw:2050468 dr:0 al:0 bm:125 lo:0 pe:0 ua:0 ap:0
resync: used:0/61 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

Pacemaker installieren

Eigentlich haben wir ja schon einen voll funktionierenden DRBD-Cluster. Das einzige Manko ist, das wenn unser Primärknoten jetzt ausfällt wir uns erst händisch am Sekundärknoten per SSH (oder Console) anmelden müssen um ihm zu sagen das er jetzt für das DRBD Zuständig ist und dann noch das Volume mounten und Dienste starten müssten. Damit wir das nicht müssen verwenden wir Pacemaker, das unsren Cluster managen wird.

Zuerst müssen wir auf den Primären Knoten einen Authorisations Key für Corosync erzeugen und diesen auf den anderen Knoten kopieren:

phobos:~# corosync-keygen
phobos:~# scp /etc/corosync/authkey deimos:/etc/corosync/authkey

Als nächstes müssen wir ein paar Einstellungen von Corosync bearbeiten damit beide Knoten miteinander reden können. Bearbeite in der interface Sektion von totem den Wert von bindnetaddr:

...
interface {
ringnumber: 0
bindnetaddr: 10.11.12.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
...

Wenn du mit den Änderungen an der Config fertig bist, muss Corosync noch aktiviert werden indem du START=no durch START=yes in der Datei /etc/default/corosync ersetzt.

Nachdem Corosync konfiguriert ist, starten wir den Dienst auf beiden Knoten und schauen ob er auch brav startet:

phobos:~# /etc/init.d/corosync start
Starting corosync daemon: corosync.
deimos:~# /etc/init.d/corosync start
Starting corosync daemon: corosync.
phobos:~# crm_mon --one-shot -V
crm_mon[7363]: 2010/11/14_12:34:56 ERROR: unpack_resources: No STONITH resources have been defined
crm_mon[7363]: 2010/11/14_12:34:54 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_mon[7363]: 2010/11/14_12:34:56 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity

============
Last updated: Fri Nov 14 12:34:56 2010
Stack: openais
Current DC: phobos - partition with quorum
Version: 1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ phobos deimos ]

Das schaut ja schon mal (bis auf den STONITH Fehler den wir gleich beheben werden) ja schon mal nicht schlecht aus. Jetzt konfigurieren wir mal ein paar Resourcen, die wir für unseren DRBD-Cluster benötigen werden:

phobos:~# sudo crm
crm(live)# cib new config20101114001
crm(config20101114001)# configure
crm(config20101114001)configure# edit

Meine Pacemaker Config sieht so aus:

node phobos
node deimos
primitive drbd_mars ocf:linbit:drbd params drbd_resource="mars" op monitor interval="15s"
ms ms_drbd_mars drbd_mars meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
primitive fs_mars ocf:heartbeat:Filesystem params device="/dev/drbd/by-res/mars" directory="/mnt/data" fstype="ext3"
primitive ip_mars ocf:heartbeat:IPaddr2 params ip="192.168.1.243" nic="eth0"
group mars fs_mars ip_mars
colocation mars_on_drbd inf: mars ms_drbd_mars:Master
property $id="cib-bootstrap-options"
dc-version="1.0.6-cebe2b6ff49b36b29a3bd7ada1c4701c7470febe"
stonith-enabled=false
cluster-infrastructure="openais"
expected-quorum-votes="2"

Wenn du mit dem bearbeiten der Config fertig bist verifiziere deine Änderungen und wenn alles OK ist aktiviere die Config.

crm(config20101114001)configure# verify
crm(config20101114001)configure# end
There are changes pending. Do you want to commit them? y
crm(config20101114001)#
crm(config20101114001)# cib use live
crm(live)# cib commit config20101114001
INFO: commited 'config20101114001' shadow CIB to the cluster
crm(live)# quit
bye

Sources (Linkz)

2 thoughts on “Debian Squeeze + DRBD + Pacemaker Tutorial

  1. Hallo Andi,

    habe da mal eine Frage du hast ja ein Tutorial geschrieben zu Debian Squeeze + DRBD. Hast du zufällig auch Erfahrung vom Upgrade eines bestehenden Debian Lenny + DRBD mit Heartbeat. Kann ich da einfach zuerst alle Pakete updaten und im Anschluss das Upgrade von Lenny auf Squeeze starten oder gibt es da Probleme?
    Für eine kurze Antwort wäre ich dir sehr dankbar da ich bisher noch nicht all zu viel mit DRBD gemacht habe und ich gerade hier vor einem bestehenden System sitze. Bin leider ein Newbie was das angeht ;)
    Liebe Grüße Sascha

  2. Hi,

    wie schaut denn deine Grundkonfiguration von der Partitionierung her aus?
    Ich bekomme das drbd bei mir nicht zum laufen.

Leave a Reply

Your email address will not be published. Required fields are marked *