Die Abkürzung steht für Distrituted Replicated Block Device und stellt uns Blockdevices zur Verfügung, die über das IP-Netzwerk ein Mirroring der Daten ermöglicht. Dabei wird ein weiterer Layer zwischen Festplatte/Partition (oder sogar ein LVM-Volume ist möglich) und dem Dateisystem geschoben. Auf diese Weise replizieren wir unsere Daten der Nodes auf den jeweils anderen, um so für den Fall eines Failovers alle Daten vorliegen zu haben, die der "Reserveserver" braucht, um den Dienst aufzunehmen.
Nach dem wir ein funktionierendes Heartbeat haben und die Umschaltung problemlos läuft, installieren wir auf beiden Servern DRBD mit folgender Zeile:
apt-get install -y drbd8-utils
Nach der Installation wechseln wir das Verzeichnis nach /etc/ und editieren folgende Datei: drbd.conf
Wir löschen darin den Inhalt und fügen folgenden Inhalt hinzu:
### globale Angaben ###
global {
# an Statistikauswertung auf usage.drbd.org teilnehmen?
usage-count no;
}
### Optionen, die an alle Ressourcen vererbt werden ###
common {
syncer {
rate 100M;
}
}
### Ressourcenspezifische Optionen
resource home-data {
# Protokoll-Version
protocol C;
startup {
# Timeout (in Sekunden) für Verbindungsherstellung beim Start
wfc-timeout 0;
# Timeout (in Sekunden) für Verbindungsherstellung beim Start
# nach vorheriger Feststellung von Dateninkonsistenz
# ("degraded mode")
degr-wfc-timeout 120;
}
disk {
# Aktion bei EA-Fehlern: Laufwerk aushängen
on-io-error detach;
}
net {
### Verschiedene Netzwerkoptionen, die normalerweise nicht gebraucht werden, ###
### die HA-Verbindung sollte generell möglichst performant sein... ###
# timeout 60;
# connect-int 10;
# ping-int 10;
# max-buffers 2048;
# max-epoch-size 2048;
}
syncer {
# Geschwindigkeit der HA-Verbindung
rate 100M;
}
on node1 {
### Optionen für Master-Server ###
# Name des bereitgestellten Blockdevices
device /dev/drbd0;
# dem DRBD zugrunde liegendes Laufwerk
disk /dev/sdb;
# Adresse und Port, über welche die Synchr. läuft
address 192.168.2.44:7788;
# Speicherort der Metadaten, hier im Laufwerk selbst
meta-disk internal;
}
on node2 {
## Optionen für Slave-Server
# Name des bereitgestellten Blockdevices
device /dev/drbd0;
# dem DRBD zugrunde liegendes Laufwerk
disk /dev/sdb;
# Adresse und Port, über welche die Synchr. läuft
address 192.168.2.45:7788;
# Speicherort der Metadaten, hier im Laufwerk selbst
meta-disk internal;
}
}
In den unteren beiden Blöcken müssen die IPs der Nodes noch angepasst werden. Ebenso ggf die Angabe der Festplatte (sdb oder hdc...)
Nun sind wir an einem Punkt wo wir den Node runterfahren und eine weitere Festplatte hinzufügen. Falls sie schon drin sein sollte, dann mit lsblk schauen, ob sie auch da ist. Diese Disk wird nicht partitioniert!
Jetzt müssen wir noch eine Resource erstellen und dann noch festlegen, dass Node1 die primäre "Disk" hat dessen Daten auf die anderen Disk (remote) repliziert werden. Beim Erstellen der Resource muss natürlich der Resourcennamen verwendet werden, den wir in der drbd.conf angegeben haben.
drbdadm create-md home-data
Ab jetzt lässt sich DRBD neu starten. Das macht man mit:
/etc/init.d/drbd restart
Danach noch festlegen welcher Node die aktive Disk hat:
drbdsetup /dev/drbd0 primary --overwrite-data-of-peer
Nun schauen wir uns an, ob die Replikation läuft:
cat /proc/drbd
Oder besser noch ein "watch" davor setzen. Dann kann man den Prozess beobachten.
watch cat /proc/drbd
Während der Replikation kann man aber die Disk formatieren. Das macht nichts aus. Alle Änderungen werden dann sofort auf die "remote"-Disk (also die Disk auf Node2) übertragen.
Verbindungsprobleme?
Mit einem cat /proc/drbd bekommt man die Info "WFConnection" was für "waiting for connection" steht und bedeutet, dass die Nodes aus irgend einem Grund sich nicht verbinden wollen. Da habe ich zugegebenermaßen auch jedes mal Trouble mit. Ich löse das wie folgt:
Auf der Secondary-Seite:
drbdadm secondary all drbdadm disconnect all drbdadm -- --discard-my-data connect all
Auf der Primary-Seite:
drbdadm primary all drbdadm disconnect all drbdadm connect all
Nachtrag:
Für die Replikation kann man eine ganze Festplatte oder auch nur eine Partition verwenden. Hier habe ich die ganze Platte gewählt, aber es funktioniert genau so gut mit einer Partition. Da ist kein Unterschied. Es lässt sich aber auch noch mit LVM arbeiten, wenn man das möchte. Das ist etwas komplizierter, aber das kann man hier mal nachlesen und ausprobieren.