Hochverfügbares NFS-System mit DRBD, Pacemaker und Corosync auf 2 Nodes
Voraussetzungen
- Zwei separate Nodes (node1.lab.int und node2.lab.int) mit Linux (z.B. Ubuntu, CentOS, SUSE)
- Identische Speicherkapazität auf beiden Nodes für die DRBD-Replikation
- Netzwerkkonnektivität zwischen den Nodes
- Administrative Zugriffsrechte (root)
- ssh root-key Austausch auf der Nodes
Konfig
- node1.lab.int
- ip: 10.0.10.231/24
- node2.lab.int
- ip: 10.0.10.232/24
- storage.lab.int
- ip: 10.0.10.230/24
Einrichtung von DRBD
Installation der benötigten Pakete
Installiere die DRBD-Pakete auf beiden Nodes:
sudo apt-get update
sudo apt-get install drbd-utils nfs-server
Erstellung der DRBD-Konfigurationsdatei
Erstelle die DRBD-Ressourcendatei /etc/drbd.d/nfs.res auf beiden Nodes mit folgendem Inhalt:
resource nfs {
on node1.lab.int {
device /dev/drbd0;
disk /dev/vdb;
address 10.0.10.231:7789;
meta-disk internal;
}
on node2.lab.int {
device /dev/drbd0;
disk /dev/vdb;
address 10.0.10.232:7789;
meta-disk internal;
}
}Initialisiere und starte DRBD
Führe die folgenden Befehle auf beiden Nodes aus:
sudo drbdadm create-md nfs
sudo drbdadm up nfs
Setze einen der Nodes als Primär-Node
Führe diesen Befehl nur auf einem Node aus (z.B. auf node1):
sudo drbdadm -- --overwrite-data-of-peer primary nfs
Überprüfen der Synchronisation
watch -n 1 cat /proc/drbd
Formatieren und Mountpunkt erstellen des DRBD-Devices
Auf dem Primär-Node (node1):
sudo mkfs.ext4 /dev/drbd0
sudo mkdir -p /mnt/nfs
Auf dem Sekundärer-Node (node2):
sudo mkdir -p /mnt/nfs
Einrichtung von Corosync
Installation der benötigten Pakete
Installiere die notwendigen Pakete auf beiden Nodes:
sudo apt-get install corosync pacemaker crmsh
Keys generieren
sudo corosync-keygen
Dadurch wird eine Datei namens /etc/corosync/authkey erstellt.
Kopiere den Schlüssel auf den anderen Node: Kopiere den erstellten Schlüssel auf den zweiten Node (z. B. node2) mit scp oder einem ähnlichen Tool:
scp /etc/corosync/{authkey,corosync.conf} root@10.0.10.232:/etc/corosync/
Stelle sicher, dass die Berechtigungen korrekt gesetzt sind, indem du auf beiden Nodes folgende Befehle ausführst:
sudo chown root:root /etc/corosync/authkey sudo chmod 400 /etc/corosync/authkey
Erstellung der Corosync-Konfigurationsdatei
Erstelle die Datei /etc/corosync/corosync.conf auf beiden Nodes mit folgendem Inhalt:
totem {
version: 2
cluster_name: nfs
crypto_cipher: none
crypto_hash: none
}
nodelist {
node {
ring0_addr: 10.0.10.231
name: node1.lab.int
nodeid: 1
}
node {
ring0_addr: 10.0.10.232
name: node2.lab.int
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
two_node: 1
wait_for_all: 1
last_man_standing: 1
auto_tie_breaker: 0
}
logging {
to_syslog: yes
}Starte Corosync und Pacemaker auf beiden Nodes
sudo systemctl restart corosync
sudo systemctl restart pacemaker
Einrichtung von Pacemaker
Öffne die Pacemaker-Konfiguration
Starte die Pacemaker-Konfiguration:
sudo crm configure
Konfiguriere die Ressourcen
property stonith-enabled=false
property no-quorum-policy=ignore
primitive drbd_nfs ocf:linbit:drbd \
params drbd_resource=nfs \
op monitor interval=15s
primitive nfs_export exportfs \
params directory="/mnt/nfs" options="rw,sync,no_root_squash,no_subtree_check" clientspec="10.0.10.0/24" fsid=2 \
op monitor interval=30s
primitive nfs_server systemd:nfs-server \
op monitor interval=30s
primitive resFS Filesystem \
params device="/dev/drbd0" directory="/mnt/nfs" fstype=ext4 \
op monitor interval=20s
primitive vip_nfs IPaddr2 \
params ip=10.0.10.230 cidr_netmask=24 \
op monitor interval=30s
clone ms_drbd_nfs drbd_nfs \
meta clone-max=2 clone-node-max=1 notify=true promotable=true
order drbd_before_fs Mandatory: ms_drbd_nfs:promote resFS:start
colocation export_with_fs inf: nfs_export resFS
order fs_before_nfs Mandatory: resFS nfs_server
colocation fs_with_drbd inf: resFS ms_drbd_nfs:Master
order nfs_after_drbd Mandatory: ms_drbd_nfs:promote nfs_server:start
order nfs_before_export Mandatory: nfs_server nfs_export
colocation nfs_with_drbd inf: nfs_server ms_drbd_nfs:Master
colocation nfs_with_fs inf: nfs_server resFS
order vip_after_nfs Mandatory: nfs_server vip_nfs
colocation vip_with_nfs inf: vip_nfs nfs_server
commit
Pacemaker Befehle zur Überwachung und Verwaltung von Ressourcen
Diese Befehle helfen dir, den Status deines Clusters zu überwachen und die Ressourcen bei Bedarf zu verwalten.
Überprüfung des Cluster-Status
Um den aktuellen Status des Clusters und der Ressourcen zu überprüfen, verwende folgende Befehle:
crm status
Dieser Befehl zeigt eine Übersicht über den Zustand der Nodes und Ressourcen im Cluster.
crm_mon
`crm_mon` bietet eine ähnliche Statusübersicht und aktualisiert die Informationen kontinuierlich in Echtzeit.
Bereinigung und Aktualisierung von Ressourcen
Wenn Ressourcen blockiert oder fehlerhaft sind, können sie mit den folgenden Befehlen zurückgesetzt oder aktualisiert werden:
crm resource cleanup <ressourcenname>
Dieser Befehl setzt den Zustand der angegebenen Ressource zurück, was Pacemaker erlaubt, die Ressource neu zu starten.
crm resource refresh <ressourcenname>
Der `refresh`-Befehl aktualisiert den Zustand einer Ressource und kann verwendet werden, um Änderungen an der Ressourcenkonfiguration anzuwenden.
Verschieben von Ressourcen
Um eine Ressource gezielt auf einen bestimmten Node zu verschieben, nutze:
crm resource move ms_drbd_nfs node1.lab.int
Dieser Befehl verschiebt die Master-Slave-Ressource `ms_drbd_nfs` auf den Node `node1.lab.int`.
Zurücksetzen der Migration
Falls du die manuelle Verschiebung rückgängig machen möchtest und Pacemaker die Kontrolle über die Ressourcenzuweisung zurückgeben willst:
crm resource unmigrate ms_drbd_nfs
Mit diesem Befehl hebst du die manuelle Migration der Ressource auf, sodass Pacemaker basierend auf den definierten Regeln entscheidet, wo die Ressource laufen soll.