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 fonctionnera en même temps et un autre serveur en tant que serveur de sauvegarde. 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 sauvegarde de déterminer si l'autre est "actif" et si le serveur principal ne l'est pas, de basculer les ressources vers la sauvegarde. Il gérera également la haute disponibilité IP et d'autres services sur vos serveurs.
Dans ce didacticiel, nous apprendrons comment obtenir une haute disponibilité de MariaDB en utilisant Heartbeat et DRBD sur le 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.
- Disque dur supplémentaire non partitionné installé sur chaque nœud.
- Utilisateur non root avec configuration des privilèges sudo sur chaque nœud.
Mise en route
Avant de commencer, vous devrez configurer l'adresse IP sur chaque nœud. Utilisez l'adresse IP suivante sur chaque nœud :
Noeud1 :
172.16.0.1 sur eth0 et 192.168.0.101 sur eth1
Noeud2 :
172.16.0.2 sur eth0 et 192.168.0.102 sur eth1
L'IP 192.168.0.103 sera l'IP 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 peut communiquer entre eux. Sur le premier nœud, ouvrez le fichier /etc/hosts et le fichier /etc/hostname :
sudo nano /etc/hosts
Ajoutez les lignes suivantes à la fin du fichier :
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
Modifiez 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/hosts
Ajoutez les lignes suivantes à la fin du fichier :
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
Modifiez 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 -y
Une fois votre système mis à jour, redémarrez le système pour appliquer ces modifications.
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 référentiel 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 -y
Ensuite, démarrez les services DRBD et Heartbeat et activez-les au démarrage :
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat
Configurer 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 lecteur 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/sdb
Ensuite, 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.res
Ajoutez 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.cf
Ajoutez les lignes suivantes :
# Check Interval keepalive 1 # Time before server declared dead deadtime 10 # Secondary wait delay at boot initdead 60 # Auto-failback auto_failback off # Heartbeat Interface bcast eth1 # Nodes to monitor 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/haresources
Ajoutez 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 à virgule 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 avec le fichier /etc/ha.d/authkeys sur chaque nœud :
sudo nano /etc/ha.d/authkeys
Ajoutez les lignes suivantes :
auth1 1 sha1 your-secure-password
Ici, your-secure-password 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/mysql
Une 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/mysql
Maintenant, vous pouvez vérifier que le disque DRBD est connecté et se synchronise correctement en exécutant la commande suivante :
sudo cat /proc/drbd
Si tout va bien, vous devriez voir le résultat suivant :
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 la pulsation sur les deux nœuds pour activer la partie de basculement de votre configuration.
sudo systemctl start heartbeat
Ensuite, vérifiez la partition DRBD montée avec la commande suivante sur Node1 :
sudo mount | grep drbd
Vous devriez voir le résultat suivant :
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
Ensuite, vérifiez que l'adresse IP flottante est uniquement liée au nœud 1 avec la commande suivante :
sudo ip addr show | grep 192.168.0.103
Vous devriez voir le résultat suivant :
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 -y
Ensuite, vous devrez désactiver le service MariaDB sur les deux nœuds :
sudo systemctl disable mysql
Ici, nous utiliserons Node1 comme principal et les bases de données sur Node2 doivent être créées et remplies via la synchronisation avec Node1. Vous devrez donc arrêter le service MariaDB et supprimer le contenu dans /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 MySQL Maintenance de Node1 vers Node2. Vous pouvez le faire en exécutant la commande suivante :
sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf
Ensuite, 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 -p
Saisissez 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/*.cnf
Initier Heartbeat pour le service MariaDB
Ensuite, vous devrez ajouter le service MariaDB dans vos instances heartbeat sur les deux nœuds. Vous pouvez le faire en éditant le fichier /etc/ha.d/haresources :
sudo nano /etc/ha.d/haresources
Modifiez 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 le rythme cardiaque configuré, vous devrez le redémarrer sur les deux nœuds.
Tout d'abord, redémarrez heartbea sur Node1 :
sudo systemctl restart heartbeat
Ensuite, attendez 50 secondes, puis redémarrez le service de pulsation sur le nœud 2 :
sudo systemctl restart heartbeat
Tester Heartbeat et DRBD
Maintenant que tout est configuré correctement, il est temps d'effectuer une série de tests pour vérifier que le rythme cardiaque déclenchera bien un transfert du serveur actif vers le serveur passif lorsque le serveur actif échouera 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/drbd
Vous devriez voir le résultat suivant :
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 mysql
Ensuite, accédez au serveur MariaDB à partir de la machine distante en utilisant une adresse IP flottante et créez une base de données de test :
mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit
Ensuite, redémarrez heartbeat sur Node1 :
sudo systemctl restart heartbeat
Désormais, heartbeat interprétera ce redémarrage comme un échec de MariaDB sur Node1 et devrait déclencher un basculement pour faire de Node2 le serveur principal.
Vous pouvez vérifier que DRBD traite maintenant Node1 comme serveur secondaire avec la commande suivante sur Node1 :
sudo cat /proc/drbd
Vous devriez voir le résultat suivant :
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/drbd
Vous devriez voir le résultat suivant :
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 s'exécute sur Node2 :
sudo systemctl status mysql
Maintenant, connectez-vous au serveur MariaDB en utilisant une adresse IP flottante sur Node2 à partir d'un utilisateur distant.
mysql -h 192.168.0.103 -u root -p
Ensuite, affichez la base de données de test que nous avons créée précédemment alors que Node1 était le serveur principal.
MariaDB [(none)]> show databases;
Vous devriez voir le résultat suivant :
+--------------------+ | Database | +--------------------+ | test | | information_schema | | lost+found | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.04 sec)