Datenbank-Setup · 9 min read · Dec 07, 2025

So richten Sie die Hochverfügbarkeit von MariaDB mit Heartbeat und DRBD auf Ubuntu 16.04 LTS ein

Heartbeat und DRBD werden beide für eine Clusterlösung für jede Anwendung verwendet, die zwei Server nutzt. Beide Server arbeiten im aktiven und passiven Modus, ein Server wird gleichzeitig arbeiten und der andere Server als Backup-Server. DRBD (Distributed Replicated Block Device) ist ein Kernel-Level-Dienst, der Daten zwischen zwei Servern in Echtzeit synchronisiert. Heartbeat ist ein Open-Source-Programm, das es einem primären und einem Backup-Linux-Server ermöglicht zu bestimmen, ob der andere “lebendig” ist und wenn der primäre nicht ist, die Ressourcen auf den Backup zu übertragen. Es verwaltet auch die IP-Hochverfügbarkeit und andere Dienste auf Ihren Servern.

In diesem Tutorial lernen wir, wie man die Hochverfügbarkeit von MariaDB mit Heartbeat und DRBD auf einem Ubuntu 16.04-Server erreicht.

Anforderungen

  • Zwei Knoten mit installiertem Ubuntu 16.04-Server.
  • Zwei Netzwerkkarten, die auf jedem Knoten installiert sind.
  • Zusätzliche nicht partitionierte Festplatte, die auf jedem Knoten installiert ist.
  • Nicht-Root-Benutzer mit sudo-Rechten, der auf jedem Knoten eingerichtet ist.

Erste Schritte

Bevor Sie beginnen, müssen Sie die IP-Adresse auf jedem Knoten einrichten. Verwenden Sie die folgende IP-Adresse auf jedem Knoten:

Node1 :

172.16.0.1 auf eth0 und 192.168.0.101 auf eth1

Node2 :

172.16.0.2 auf eth0 und 192.168.0.102 auf eth1

IP 192.168.0.103 wird die IP für die Hochverfügbarkeit sein.

Als Nächstes müssen Sie auch den Hostnamen und die Hostnamenauflösung auf jedem Knoten einrichten, damit sich die Knoten gegenseitig kommunizieren können. Öffnen Sie auf dem ersten Knoten die Datei /etc/hosts und die Datei /etc/hostname:

sudo nano /etc/hosts

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Ändern Sie die Datei wie unten gezeigt:

Node1

Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.

Öffnen Sie auf dem zweiten Knoten die Datei /etc/hosts und die Datei /etc/hostname:

sudo nano /etc/hosts

Fügen Sie die folgenden Zeilen am Ende der Datei hinzu:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Ändern Sie die Datei wie unten gezeigt:

Node2

Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.

Als Nächstes aktualisieren Sie jeden Knoten mit der neuesten Version mit dem folgenden Befehl:

sudo apt-get update -y  
sudo apt-get upgrade -y

Sobald Ihr System aktualisiert ist, starten Sie das System neu, um diese Änderungen anzuwenden.

DRBD und Heartbeat installieren

Als Nächstes müssen Sie DRBD und Heartbeat auf beiden Knoten installieren. Standardmäßig sind beide im Standard-Repository von Ubuntu 16.04 verfügbar. Sie können sie installieren, indem Sie einfach den folgenden Befehl auf beiden Knoten ausführen:

sudo apt-get install drbd8-utils heartbeat -y

Als Nächstes starten Sie den DRBD- und Heartbeat-Dienst und aktivieren Sie sie, damit sie beim Booten gestartet werden:

sudo systemctl start drbd  
sudo systemctl start heartbeat  
systemctl enable drbd  
systemctl enable heartbeat

DRBD und Heartbeat konfigurieren

Als Nächstes müssen Sie das DRBD-Gerät auf jedem Knoten einrichten. Erstellen Sie eine einzelne Partition auf der zweiten nicht partitionierten Festplatte /dev/sdb auf jedem Knoten.

Sie können dies tun, indem Sie einfach den folgenden Befehl auf jedem Knoten ausführen:

sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb

Als Nächstes müssen Sie DRBD auf beiden Knoten konfigurieren. Sie können dies tun, indem Sie die Datei /etc/drbd.d/r0.res auf jedem Knoten erstellen.

sudo nano /etc/drbd.d/r0.res

Fügen Sie die folgenden Zeilen hinzu:

global {
usage-count no;
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 60;
}
disk {
}
syncer {
rate 100M;
}
net {
cram-hmac-alg sha1;
shared-secret "aBcDeF";
}
on Node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.1:7789;
meta-disk internal;
}
on Node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.2:7789;
meta-disk internal;
}
}

Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind, und öffnen Sie dann eine weitere Konfigurationsdatei auf jedem Knoten:

sudo nano /etc/ha.d/ha.cf

Fügen Sie die folgenden Zeilen hinzu:

# Überprüfungsintervall
keepalive 1
# Zeit, bevor der Server als tot erklärt wird
deadtime 10
# Sekundärwarteverzögerung beim Booten
initdead 60
# Automatisches Failback
auto_failback off
# Heartbeat-Schnittstelle
bcast eth1
# Zu überwachende Knoten
node Node1
node Node2

Speichern Sie die Datei und schließen Sie sie.

Öffnen Sie als Nächstes die Ressourcen-Datei /etc/ha.d/haresources auf jedem Knoten:

sudo nano /etc/ha.d/haresources

Fügen Sie die folgenden Zeilen hinzu:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime

Hier ist Node1 der Hostname Ihres Hauptknotens, 192.168.0.103 ist die schwebende IP-Adresse, /var/lib/mysql ist ein Einhängepunkt und /dev/drbd0 ist das DRBD-Gerät.

Als Nächstes müssen Sie identische Autorisierungsschlüssel auf beiden Knoten definieren und speichern. Sie können dies tun, indem Sie die Datei /etc/ha.d/authkeys auf jedem Knoten bearbeiten:

sudo nano /etc/ha.d/authkeys

Fügen Sie die folgenden Zeilen hinzu:

auth1
1 sha1 Ihr-sicheres-Passwort

Hier ist Ihr-sicheres-Passwort Ihr sicheres Passwort. Verwenden Sie dasselbe Passwort auf beiden Knoten.

Als Nächstes erstellen und starten Sie DRBD, indem Sie den folgenden Befehl auf Node1 ausführen:

sudo drbdadm create-md r0  
sudo systemctl restart drbd  
sudo drbdadm outdate r0  
sudo drbdadm -- --overwrite-data-of-peer primary all  
sudo drbdadm primary r0  
sudo mkfs.ext4 /dev/drbd0  
sudo chmod 600 /etc/ha.d/authkeys  
sudo mkdir /var/lib/mysql

Sobald die DRBD-Disk auf Node1 erstellt ist, erstellen Sie die DRBD-Disk auf Node2 mit dem folgenden Befehl:

sudo drbdadm create-md r0  
sudo systemctl restart drbd  
sudo chmod 600 /etc/ha.d/authkeys  
sudo mkdir /var/lib/mysql

Jetzt können Sie überprüfen, ob die DRBD-Disk verbunden ist und ordnungsgemäß synchronisiert, indem Sie den folgenden Befehl ausführen:

sudo cat /proc/drbd

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe sehen:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752
[>....................] sync'ed: 3.3% (14752/14350)M
finish: 0:12:23 speed: 12,156 (16,932) K/sec

Als Nächstes starten Sie Heartbeat auf beiden Knoten, um den Failover-Teil Ihrer Einrichtung zu aktivieren.

sudo systemctl start heartbeat

Überprüfen Sie als Nächstes die eingehängte DRBD-Partition mit dem folgenden Befehl auf Node1:

sudo mount | grep drbd

Sie sollten die folgende Ausgabe sehen:

/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Überprüfen Sie als Nächstes, ob die schwebende IP nur an Node1 gebunden ist, mit dem folgenden Befehl:

sudo ip addr show | grep 192.168.0.103

Sie sollten die folgende Ausgabe sehen:

inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

MariaDB installieren und konfigurieren

Sobald alles ordnungsgemäß auf beiden Knoten konfiguriert ist, ist es Zeit, den MariaDB-Server auf beiden Knoten zu installieren.

Führen Sie den folgenden Befehl auf beiden Knoten aus, um den MariaDB-Server zu installieren:

sudo apt-get install mariadb-server -y

Als Nächstes müssen Sie den MariaDB-Dienst auf beiden Knoten deaktivieren:

sudo systemctl disable mysql

Hier verwenden wir Node1 als primären Knoten, und die Datenbanken auf Node2 sollten durch Synchronisierung mit Node1 erstellt und befüllt werden. Daher müssen Sie den MariaDB-Dienst stoppen und den Inhalt von /var/lib/mysql auf Node2 entfernen. Sie können dies mit dem folgenden Befehl tun:

sudo systemctl stop mysql  
sudo rm -rf /var/lib/mysql/*

Als Nächstes müssen Sie die MySQL-Wartungskonfigurationsdatei von Node1 nach Node2 kopieren. Sie können dies tun, indem Sie den folgenden Befehl ausführen:

sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Als Nächstes müssen Sie einen Root-Benutzer für die Fernverwaltung und den Zugriff auf die Datenbanken auf der hochverfügbaren MySQL-Instanz erstellen.

Sie können dies tun, indem Sie den folgenden Befehl auf Node1 ausführen:

mysql -u root -p

Geben Sie Ihr Root-Passwort ein und erstellen Sie dann einen Root-Benutzer mit dem folgenden Befehl:

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';  
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;  
MariaDB [(none)]> FLUSH PRIVILEGES;  
MariaDB [(none)]> QUIT;

Als Nächstes setzen Sie die Bind-Adresse für MySQL auf beiden Knoten mit dem folgenden Befehl:

sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

Heartbeat für den MariaDB-Dienst initiieren

Als Nächstes müssen Sie den MariaDB-Dienst in Ihren Heartbeat-Instanzen auf beiden Knoten hinzufügen. Sie können dies tun, indem Sie die Datei /etc/ha.d/haresources bearbeiten:

sudo nano /etc/ha.d/haresources

Ändern Sie die folgenden Zeilen:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql

Speichern Sie die Datei und schließen Sie sie, wenn Sie fertig sind.

Sobald der Heartbeat konfiguriert ist, müssen Sie ihn auf beiden Knoten neu starten.

Zuerst starten Sie Heartbeat auf Node1 neu:

sudo systemctl restart heartbeat

Warten Sie als Nächstes 50 Sekunden und starten Sie dann den Heartbeat-Dienst auf Node2 neu:

sudo systemctl restart heartbeat

Heartbeat und DRBD testen

Jetzt, wo alles ordnungsgemäß konfiguriert ist, ist es Zeit, eine Reihe von Tests durchzuführen, um zu überprüfen, ob Heartbeat tatsächlich einen Transfer vom aktiven Server zum passiven Server auslöst, wenn der aktive Server auf irgendeine Weise ausfällt.

Überprüfen Sie zuerst, ob Node1 der primäre DRBD-Knoten ist, mit dem folgenden Befehl auf Node1:

sudo cat /proc/drbd

Sie sollten die folgende Ausgabe sehen:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Als Nächstes überprüfen wir, ob die DRBD-Disk mit dem folgenden Befehl eingehängt ist:

sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Überprüfen Sie als Nächstes den MariaDB-Dienst mit dem folgenden Befehl:

sudo systemctl status mysql

Greifen Sie als Nächstes von der Remote-Maschine aus auf den MariaDB-Server über die schwebende IP zu und erstellen Sie eine Testdatenbank:

mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;  
MariaDB [(none)]> quit

Starten Sie als Nächstes Heartbeat auf Node1 neu:

sudo systemctl restart heartbeat

Jetzt wird Heartbeat diesen Neustart als Ausfall von MariaDB auf Node1 interpretieren und sollte einen Failover auslösen, um Node2 zum primären Server zu machen.

Sie können überprüfen, dass DRBD jetzt Node1 als sekundären Server behandelt, mit dem folgenden Befehl auf Node1:

sudo cat /proc/drbd

Sie sollten die folgende Ausgabe sehen:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Überprüfen Sie jetzt, ob Node2 der primäre DRBD-Knoten ist, indem Sie den folgenden Befehl auf Node2 ausführen:

sudo cat /proc/drbd

Sie sollten die folgende Ausgabe sehen:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Überprüfen Sie als Nächstes, ob MariaDB auf Node2 läuft:

sudo systemctl status mysql

Verbinden Sie sich jetzt mit dem MariaDB-Server über die schwebende IP auf Node2 von einem Remote-Benutzer aus.

mysql -h 192.168.0.103 -u root -p

Sehen Sie sich als Nächstes die Testdatenbank an, die wir zuvor erstellt haben, während Node1 der primäre Server war.

MariaDB [(none)]> show databases;

Sie sollten die folgende Ausgabe sehen:

 +--------------------+
| Datenbank          |
+--------------------+
| test               |
| information_schema  |
| lost+found         |
| mysql              |
| performance_schema  |
+--------------------+
5 Zeilen im Set (0.04 Sek)
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.