Hochverfügbares NFS-System mit DRBD, Pacemaker und Corosync auf 2 Nodes

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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

crm-erklärung

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.