Website-Suche

So richten Sie DRBD ein, um Speicher auf zwei CentOS 7-Servern zu replizieren


Das DRBD (steht für Distributed Replicated Block Device) ist eine verteilte, flexible und vielseitige replizierte Speicherlösung für Linux. Es spiegelt den Inhalt von Blockgeräten wie Festplatten, Partitionen, logischen Volumes usw. zwischen Servern. Dabei handelt es sich um eine Kopie der Daten auf zwei Speichergeräten, sodass bei Ausfall eines Speichergeräts die Daten auf dem anderen verwendet werden können.

Man kann es sich wie eine Netzwerk-RAID-1-Konfiguration vorstellen, bei der die Festplatten auf mehreren Servern gespiegelt sind. Es funktioniert jedoch ganz anders als RAID und sogar Netzwerk-RAID.

Ursprünglich wurde DRBD hauptsächlich in Computerclustern mit hoher Verfügbarkeit (HA) verwendet, ab Version 9 kann es jedoch für die Bereitstellung von Cloud-Speicherlösungen verwendet werden.

In diesem Artikel zeigen wir, wie man DRBD in CentOS installiert und demonstrieren kurz, wie man damit Speicher (Partition) auf zwei Servern repliziert. Dies ist der perfekte Artikel für den Einstieg in die Verwendung von DRBD unter Linux.

Testumgebung

Für den Zweck dieses Artikels verwenden wir für dieses Setup einen Cluster mit zwei Knoten.

  • Node1: 192.168.56.101 – tecmint.tecmint.lan
  • Node2: 192.168.56.102 – server1.tecmint.lan

Schritt 1: DRBD-Pakete installieren

DRBD ist als Linux-Kernelmodul implementiert. Es stellt genau einen Treiber für ein virtuelles Blockgerät dar und wird daher ganz unten im E/A-Stack eines Systems installiert.

DRBD kann aus den Repositorys ELRepo oder EPEL installiert werden. Beginnen wir mit dem Importieren des Signaturschlüssels des ELRepo-Pakets und aktivieren das Repository wie auf beiden Knoten gezeigt.

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

Dann können wir das DRBD-Kernelmodul und die Dienstprogramme auf beiden Knoten installieren, indem wir Folgendes ausführen:

yum install -y kmod-drbd84 drbd84-utils

Wenn Sie SELinux aktiviert haben, müssen Sie die Richtlinien ändern, um DRBD-Prozesse von der SELinux-Kontrolle auszunehmen.

semanage permissive -a drbd_t

Wenn auf Ihrem System außerdem eine Firewall aktiviert ist (firewalld), müssen Sie der Firewall den DRBD-Port 7789 hinzufügen, um die Synchronisierung der Daten zwischen den beiden Knoten zu ermöglichen.

Führen Sie diese Befehle auf dem ersten Knoten aus:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4"  source address="192.168.56.102" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

Führen Sie dann diese Befehle auf dem zweiten Knoten aus:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.101" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

Schritt 2: Vorbereiten des Speichers auf niedrigerer Ebene

Nachdem wir nun DRBD auf den beiden Clusterknoten installiert haben, müssen wir auf beiden Knoten einen ungefähr gleich großen Speicherbereich vorbereiten. Dabei kann es sich um eine Festplattenpartition (oder eine vollständige physische Festplatte), ein Software-RAID-Gerät, ein logisches LVM-Volume oder einen anderen Blockgerätetyp auf Ihrem System handeln.

Für den Zweck dieses Artikels erstellen wir mit dem Befehl dd ein Dummy-Blockgerät mit einer Größe von 2 GB.

 
dd if=/dev/zero of=/dev/sdb1 bs=2024k count=1024

Wir gehen davon aus, dass es sich um eine ungenutzte Partition (/dev/sdb1) auf einem zweiten Blockgerät (/dev/sdb) handelt, das an beide Knoten angeschlossen ist.

Schritt 3: DRBD konfigurieren

Die Hauptkonfigurationsdatei von DRBD befindet sich unter /etc/drbd.conf und zusätzliche Konfigurationsdateien finden Sie im Verzeichnis /etc/drbd.d.

Um den Speicher zu replizieren, müssen wir die erforderlichen Konfigurationen in der Datei /etc/drbd.d/global_common.conf hinzufügen, die die globalen und allgemeinen Abschnitte der DRBD-Konfiguration enthält, und wir können Ressourcen in .res-Dateien.

Lassen Sie uns auf beiden Knoten eine Sicherungskopie der Originaldatei erstellen und dann eine neue Datei zur Bearbeitung öffnen (verwenden Sie einen Texteditor Ihrer Wahl).

mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.orig
vim /etc/drbd.d/global_common.conf 

Fügen Sie in beiden Dateien die folgenden Zeilen hinzu:

global {
 usage-count  yes;
}
common {
 net {
  protocol C;
 }
}

Speichern Sie die Datei und schließen Sie dann den Editor.

Lassen Sie uns kurz etwas mehr Licht auf die Linie Protokoll C werfen. DRBD unterstützt drei verschiedene Replikationsmodi (also drei Grade der Replikationssynchronität):

  • Protokoll A: Asynchrones Replikationsprotokoll; Es wird am häufigsten in Replikationsszenarien über große Entfernungen verwendet.
  • Protokoll B: Halbsynchrones Replikationsprotokoll, auch bekannt als Memory Synchronous Protocol.
  • Protokoll C: Wird häufig für Knoten in Netzwerken mit kurzen Entfernungen verwendet. Es ist bei weitem das am häufigsten verwendete Replikationsprotokoll in DRBD-Setups.

Wichtig: Die Wahl des Replikationsprotokolls beeinflusst zwei Faktoren Ihrer Bereitstellung: Schutz und Latenz. Der Durchsatz hingegen ist weitgehend unabhängig vom gewählten Replikationsprotokoll.

Schritt 4: Hinzufügen einer Ressource

Eine Ressource ist der Sammelbegriff, der sich auf alle Aspekte eines bestimmten replizierten Datensatzes bezieht. Wir werden unsere Ressource in einer Datei namens /etc/drbd.d/test.res definieren.

Fügen Sie der Datei auf beiden Knoten den folgenden Inhalt hinzu (denken Sie daran, die Variablen im Inhalt durch die tatsächlichen Werte für Ihre Umgebung zu ersetzen).

Notieren Sie sich die Hostnamen. Wir müssen den Netzwerk-Hostnamen angeben, den Sie erhalten, indem Sie den Befehl uname -n ausführen.

resource test {
        on tecmint.tecmint.lan {
 		device /dev/drbd0;
       		disk /dev/sdb1;
        		meta-disk internal;	
                	address 192.168.56.101:7789;
        }
        on server1.tecmint.lan  {
		device /dev/drbd0;
        		disk /dev/sdb1;
        		meta-disk internal;
                	address 192.168.56.102:7789;
        }
}
}

Wo :

  • on hostname: Der on-Abschnitt gibt an, für welchen Host sich die beigefügten Konfigurationsanweisungen beziehen.
  • test: ist der Name der neuen Ressource.
  • device /dev/drbd0: Gibt das neue virtuelle Blockgerät an, das von DRBD verwaltet wird.
  • disk /dev/sdb1: ist die Blockgerätepartition, die das Sicherungsgerät für das DRBD-Gerät ist.
  • meta-disk: Definiert, wo DRBD seine Metadaten speichert. Die Verwendung von „Intern“ bedeutet, dass DRBD seine Metadaten auf demselben physischen Gerät auf niedrigerer Ebene speichert wie die tatsächlichen Produktionsdaten.
  • Adresse: Gibt die IP-Adresse und Portnummer des jeweiligen Knotens an.

Beachten Sie außerdem, dass Sie, wenn die Optionen auf beiden Hosts gleiche Werte haben, diese direkt im Ressourcenabschnitt angeben können.

Die obige Konfiguration kann beispielsweise wie folgt umstrukturiert werden:

resource test {
	device /dev/drbd0;
	disk /dev/sdb1;
        	meta-disk internal;	
        	on tecmint.tecmint.lan {
 		address 192.168.56.101:7789;
        	}
        	on server1.tecmint.lan  {
		address 192.168.56.102:7789;
        		}
}

Schritt 5: Ressource initialisieren und aktivieren

Um mit DRBD zu interagieren, verwenden wir die folgenden Verwaltungstools, die mit dem Kernelmodul kommunizieren, um DRBD-Ressourcen zu konfigurieren und zu verwalten:

  • drbdadm: ein übergeordnetes Verwaltungstool des DRBD.
  • drbdsetup: ein Verwaltungstool auf niedrigerer Ebene zum Anschließen von DRBD-Geräten an ihre Backing-Block-Geräte, zum Einrichten von DRBD-Gerätepaaren zum Spiegeln ihrer Backing-Block-Geräte und zum Überprüfen der Konfiguration laufender DRBD-Geräte.
  • Drbdmeta: ist das Tool zur Metadatenverwaltung.

Nachdem wir alle anfänglichen Ressourcenkonfigurationen hinzugefügt haben, müssen wir die Ressource auf beiden Knoten aufrufen.

drbdadm create-md test

Als nächstes sollten wir die Ressource aktivieren, die die Ressource mit ihrem Backing-Gerät verbindet, dann Replikationsparameter festlegt und die Ressource mit ihrem Peer verbindet:

drbdadm up test

Wenn Sie nun den Befehl lsblk ausführen, werden Sie feststellen, dass das DRBD-Gerät/Volume drbd0 mit dem Sicherungsgerät /dev/sdb1 verknüpft ist:

lsblk

Um die Ressource zu deaktivieren, führen Sie Folgendes aus:

drbdadm down test

Um den Ressourcenstatus zu überprüfen, führen Sie den folgenden Befehl aus (beachten Sie, dass zu diesem Zeitpunkt der Festplattenstatus Inkonsistent/Inkonsistent erwartet wird):

drbdadm status test
OR
drbdsetup status test --verbose --statistics 	#for  a more detailed status 

Schritt 6: Legen Sie die primäre Ressource/Quelle der anfänglichen Gerätesynchronisierung fest

Zu diesem Zeitpunkt ist DRBD nun betriebsbereit. Wir müssen ihm nun mitteilen, welcher Knoten als Quelle für die anfängliche Gerätesynchronisierung verwendet werden soll.

Führen Sie den folgenden Befehl nur auf einem Knoten aus, um die erste vollständige Synchronisierung zu starten:

drbdadm primary --force test
drbdadm status test

Sobald die Synchronisierung abgeschlossen ist, sollte der Status beider Festplatten UpToDate lauten.

Schritt 7: DRBD-Setup testen

Abschließend müssen wir testen, ob das DRBD-Gerät für die replizierte Datenspeicherung gut geeignet ist. Denken Sie daran, dass wir ein leeres Festplattenvolume verwendet haben. Daher müssen wir ein Dateisystem auf dem Gerät erstellen und es mounten, um zu testen, ob wir es für die Speicherung replizierter Daten verwenden können.

Mit dem folgenden Befehl können wir auf dem Knoten, auf dem wir die anfängliche vollständige Synchronisierung gestartet haben (der die Ressource mit der primären Rolle hat), ein Dateisystem auf dem Gerät erstellen:

mkfs -t ext4 /dev/drbd0 

Mounten Sie es dann wie gezeigt (Sie können dem Mount-Punkt einen passenden Namen geben):

mkdir -p /mnt/DRDB_PRI/
mount /dev/drbd0 /mnt/DRDB_PRI/

Kopieren oder erstellen Sie nun einige Dateien im obigen Mount-Punkt und erstellen Sie eine lange Liste mit dem Befehl ls:

cd /mnt/DRDB_PRI/
ls -l 

Als nächstes unmounten Sie das Gerät (stellen Sie sicher, dass der Mount nicht geöffnet ist, wechseln Sie nach dem Unmounten das Verzeichnis, um Fehler zu vermeiden) und ändern Sie die Rolle des Knotens von primär in <sekundär:

umount /mnt/DRDB_PRI/
cd
drbdadm secondary test

Machen Sie ihn auf dem anderen Knoten (der die Ressource mit einer sekundären Rolle hat) zum Primärknoten, mounten Sie dann das Gerät darauf und führen Sie eine lange Auflistung des Mountpunkts durch. Wenn das Setup einwandfrei funktioniert, sollten alle auf dem Volume gespeicherten Dateien vorhanden sein:

drbdadm primary test
mkdir -p /mnt/DRDB_SEC/
mount /dev/drbd0 /mnt/DRDB_SEC/
cd /mnt/DRDB_SEC/
ls  -l 

Weitere Informationen finden Sie in den Manpages der User-Space-Verwaltungstools:

man drbdadm
man drbdsetup
man drbdmeta
Zusammenfassung

DRBD ist äußerst flexibel und vielseitig, was es zu einer Speicherreplikationslösung macht, die sich zum Hinzufügen von HA zu nahezu jeder Anwendung eignet. In diesem Artikel haben wir gezeigt, wie man DRBD in CentOS 7 installiert und wie man es zum Replizieren von Speicher verwendet. Teilen Sie uns gerne Ihre Gedanken über das unten stehende Feedback-Formular mit.