Base de données · 9 min read · Dec 07, 2025
Comment configurer la haute disponibilité de MariaDB avec Heartbeat et DRBD sur Ubuntu 16.04 LTS
Heartbeat et DRBD sont tous deux utilisés pour une solution de cluster pour toute application utilisant deux serveurs. Les deux serveurs fonctionnent en mode actif et passif, un serveur fonctionnant en même temps et l’autre serveur comme serveur de secours. DRBD (Distributed Replicated Block Device) est un service au niveau du noyau qui synchronise les données entre deux serveurs en temps réel. Heartbeat est un programme open source qui permet à un serveur Linux principal et à un serveur de secours de déterminer si l’autre est “vivant” et si le principal ne l’est pas, de transférer les ressources au secours. Il gérera également l’IP de haute disponibilité et d’autres services sur vos serveurs.
Dans ce tutoriel, nous allons apprendre comment atteindre la haute disponibilité de MariaDB en utilisant Heartbeat et DRBD sur un serveur Ubuntu 16.04.
Exigences
- Deux nœuds avec le serveur Ubuntu 16.04 installé.
- Deux cartes réseau installées sur chaque nœud.
- Un disque dur non partitionné supplémentaire installé sur chaque nœud.
- Un utilisateur non root avec des privilèges sudo configuré sur chaque nœud.
Mise en route
Avant de commencer, vous devrez configurer l’adresse IP sur chaque nœud. Utilisez les adresses IP suivantes sur chaque nœud :
Nœud1 :
172.16.0.1 sur eth0 et 192.168.0.101 sur eth1
Nœud2 :
172.16.0.2 sur eth0 et 192.168.0.102 sur eth1
L’IP 192.168.0.103 sera l’IP de haute disponibilité.
Ensuite, vous devrez également configurer le nom d’hôte et la résolution du nom d’hôte sur chaque nœud. Ainsi, chaque nœud pourra communiquer avec l’autre. Sur le premier nœud, ouvrez le fichier /etc/hosts et le fichier /etc/hostname :
sudo nano /etc/hostsAjoutez les lignes suivantes à la fin du fichier :
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameModifiez le fichier comme indiqué ci-dessous :
Node1
Enregistrez et fermez le fichier lorsque vous avez terminé.
Sur le deuxième nœud, ouvrez le fichier /etc/hosts et le fichier /etc/hostname :
sudo nano /etc/hostsAjoutez les lignes suivantes à la fin du fichier :
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameModifiez le fichier comme indiqué ci-dessous :
Node2
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, mettez à jour chaque nœud avec la dernière version avec la commande suivante :
sudo apt-get update -y
sudo apt-get upgrade -yUne fois votre système mis à jour, redémarrez le système pour appliquer ces changements.
Installer DRBD et Heartbeat
Ensuite, vous devrez installer DRBD et Heartbeat sur les deux nœuds. Par défaut, les deux sont disponibles dans le dépôt par défaut d’Ubuntu 16.04. Vous pouvez les installer en exécutant simplement la commande suivante sur les deux nœuds :
sudo apt-get install drbd8-utils heartbeat -yEnsuite, démarrez le service DRBD et Heartbeat et activez-les pour qu’ils démarrent au démarrage :
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeatConfigurer DRBD et Heartbeat
Ensuite, vous devrez configurer le périphérique DRBD sur chaque nœud. Créez une seule partition sur le deuxième disque non partitionné /dev/sdb sur chaque nœud.
Vous pouvez le faire en exécutant simplement la commande suivante sur chaque nœud :
sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdbEnsuite, vous devrez configurer DRBD sur les deux nœuds. Vous pouvez le faire en créant le fichier /etc/drbd.d/r0.res sur chaque nœud.
sudo nano /etc/drbd.d/r0.resAjoutez les lignes suivantes :
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;
}
}Enregistrez et fermez le fichier lorsque vous avez terminé, puis ouvrez un autre fichier de configuration sur chaque nœud :
sudo nano /etc/ha.d/ha.cfAjoutez les lignes suivantes :
# Intervalle de vérification
keepalive 1
# Temps avant que le serveur soit déclaré mort
deadtime 10
# Délai d'attente secondaire au démarrage
initdead 60
# Auto-retour
auto_failback off
# Interface de heartbeat
bcast eth1
# Nœuds à surveiller
node Node1
node Node2
Enregistrez et fermez le fichier.
Ensuite, ouvrez le fichier de ressources /etc/ha.d/haresources sur chaque nœud :
sudo nano /etc/ha.d/haresourcesAjoutez les lignes suivantes :
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
Ici, Node1 est le nom d’hôte de votre nœud actif principal, 192.168.0.103 est l’adresse IP flottante, /var/lib/mysql est un point de montage et /dev/drbd0 est le périphérique DRBD.
Ensuite, vous devrez définir et stocker des clés d’autorisation identiques sur les deux nœuds. Vous pouvez le faire en utilisant le fichier /etc/ha.d/authkeys sur chaque nœud :
sudo nano /etc/ha.d/authkeysAjoutez les lignes suivantes :
auth1
1 sha1 votre-mot-de-passe-sécurisé
Ici, votre-mot-de-passe-sécurisé est votre mot de passe sécurisé. Utilisez le même mot de passe sur les deux nœuds.
Ensuite, créez et démarrez DRBD en exécutant la commande suivante sur Node1 :
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/mysqlUne fois le disque DRBD créé sur Node1, créez le disque DRBD sur Node2 avec la commande suivante :
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysqlMaintenant, vous pouvez vérifier que le disque DRBD est connecté et se synchronise correctement en exécutant la commande suivante :
sudo cat /proc/drbdSi tout va bien, vous devriez voir la sortie suivante :
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
Ensuite, démarrez heartbeat sur les deux nœuds pour activer la partie basculement de votre configuration.
sudo systemctl start heartbeatEnsuite, vérifiez la partition DRBD montée avec la commande suivante sur Node1 :
sudo mount | grep drbdVous devriez voir la sortie suivante :
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
Ensuite, vérifiez que l’IP flottante est uniquement liée à Node1 avec la commande suivante :
sudo ip addr show | grep 192.168.0.103Vous devriez voir la sortie suivante :
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0
Installer et configurer MariaDB
Une fois que tout est correctement configuré sur les deux nœuds, il est temps d’installer le serveur MariaDB sur les deux nœuds.
Exécutez la commande suivante sur les deux nœuds pour installer le serveur MariaDB :
sudo apt-get install mariadb-server -yEnsuite, vous devrez désactiver le service MariaDB sur les deux nœuds :
sudo systemctl disable mysqlIci, nous utiliserons Node1 comme principal et les bases de données sur Node2 doivent être créées et peuplées par synchronisation avec Node1. Vous devrez donc arrêter le service MariaDB et supprimer le contenu de /var/lib/mysql sur Node2. Vous pouvez le faire avec la commande suivante :
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*Ensuite, vous devrez copier le fichier de configuration de maintenance MySQL de Node1 à Node2. Vous pouvez le faire en exécutant la commande suivante :
sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnfEnsuite, vous devrez créer un utilisateur root pour la gestion à distance et l’accès aux bases de données sur l’instance MySQL hautement disponible.
Vous pouvez le faire en exécutant la commande suivante sur Node1 :
mysql -u root -pEntrez votre mot de passe root, puis créez un utilisateur root avec la commande suivante :
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;Ensuite, définissez l’adresse de liaison pour MySQL sur les deux nœuds avec la commande suivante :
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnfInitier Heartbeat pour le service MariaDB
Ensuite, vous devrez ajouter le service MariaDB dans vos instances de heartbeat sur les deux nœuds. Vous pouvez le faire en modifiant le fichier /etc/ha.d/haresources :
sudo nano /etc/ha.d/haresourcesModifiez les lignes suivantes :
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql
Enregistrez et fermez le fichier lorsque vous avez terminé.
Une fois que le heartbeat est configuré, vous devrez le redémarrer sur les deux nœuds.
Tout d’abord, redémarrez heartbeat sur Node1 :
sudo systemctl restart heartbeatEnsuite, attendez 50 secondes, puis redémarrez le service heartbeat sur Node2 :
sudo systemctl restart heartbeatTester Heartbeat et DRBD
Maintenant, tout est correctement configuré, il est temps d’effectuer une série de tests pour vérifier que heartbeat déclenchera effectivement un transfert du serveur actif au serveur passif lorsque le serveur actif échoue d’une manière ou d’une autre.
Tout d’abord, vérifiez que Node1 est le nœud drbd principal avec la commande suivante sur Node1 :
sudo cat /proc/drbdVous devriez voir la sortie suivante :
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
Ensuite, nous allons vérifier que le disque DRBD est monté avec la commande suivante :
sudo mount | grep drbd/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
Ensuite, vérifiez le service MariaDB avec la commande suivante :
sudo systemctl status mysqlEnsuite, accédez au serveur MariaDB depuis la machine distante en utilisant l’IP flottante et créez une base de données de test :
mysql -h 192.168.0.103 -u root -pMariaDB [(none)]> create database test;
MariaDB [(none)]> quitEnsuite, redémarrez heartbeat sur Node1 :
sudo systemctl restart heartbeatMaintenant, heartbeat interprétera ce redémarrage comme une défaillance de MariaDB sur Node1 et devrait déclencher le basculement pour faire de Node2 le serveur principal.
Vous pouvez vérifier que DRBD considère maintenant Node1 comme le serveur secondaire avec la commande suivante sur Node1 :
sudo cat /proc/drbdVous devriez voir la sortie suivante :
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
Maintenant, vérifiez que Node2 est le nœud drbd principal en exécutant la commande suivante sur Node2 :
sudo cat /proc/drbdVous devriez voir la sortie suivante :
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
Ensuite, vérifiez que MariaDB fonctionne sur Node2 :
sudo systemctl status mysqlMaintenant, connectez-vous au serveur MariaDB en utilisant l’IP flottante sur Node2 depuis un utilisateur distant.
mysql -h 192.168.0.103 -u root -pEnsuite, visualisez la base de données de test que nous avons créée plus tôt lorsque Node1 était le serveur principal.
MariaDB [(none)]> show databases;Vous devriez voir la sortie suivante :
+--------------------+
| Base de données |
+--------------------+
| test |
| information_schema |
| lost+found |
| mysql |
| performance_schema |
+--------------------+
5 lignes dans l'ensemble (0.04 sec)Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.