La réplication synchrone sous Linux avec DRBD

DRBD ou Distributed Replicated Blocks Device (Périphérique à blocs répliqués distribués ) est une solution de réplication des contenus des systèmes de fichiers entre deux machines. L’une des machines est dite active alors que la seconde est dite passive. Dans le cadre d’une mise en réplique des systèmes de fichiers de deux serveurs hébergeant les data, le service du moteur – MySQL, MariaDB ou PostgreSQL – de la machine dite passive doit être coupé.

La réplication synchrone sous Linux avec DRBD

Pour administrer DRBD, vous disposez de trois utilitaires :

Les données du test

Ce test présentant l’installation et la configuration de DRBD a été réalisé sous Fedora Server 37, à l’aide de deux nœuds, disposant chacun de deux cartes réseaux ainsi que deux disques /dev/sda de 64 Go et /dev/sdb de 16 Go. L’exercice consiste à répliquer /dev/sdb.

Carte réseau enp0s3 enp0s8
vmfed1 192.168.1.211/24 192.168.1.221/24
vmfed2 192.168.1.212/24 192.168.1.222/64

J’ai créé tout d’abord une machine virtuelle sous VirtualBox avec deux cartes réseaux, vmfed1, que j’ai clonée après mise à jour, minimisation des services réseaux et installation de DRBD. J’ai désactivé le pare-feu firewalld ainsi que SELinux :

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

Installation de DRBD sous Fedora Server

L’installation se fait à l’aide de la commande dnf :

dnf install drbd

Configuration de DRBD

La configuration principale de DRBD se trouve dans les fichiers /etc/drbd.conf et /etc/drbd.d/global_common.conf. Le choix de disques ou partitions à répliquer se fait au travers de fichiers .res comme resource.

Avant toute modification, prenez soin de réaliser une copie de ces deux fichiers.

mv /etc/drbd.conf /etc/drbd/conf.ori
mv /etc/drbd.d/global_common.conf  /etc/drbd.d/global_common.conf.ori
Les modes de réplication

Il existe trois modes de réplication :

Source : https://linbit.com/drbd-user-guide/drbd-guide-9_0-en/#s-replication-protocols

/etc/drbd.d/global_common.conf

Sur les deux nœuds, ajoutez les lignes suivantes au fichier /etc/drbd.d/global_common.conf

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

Vous devez ensuite configurer la ressource à répliquer dans le fichier /etc/drbd.d/sdb.res, par exemple. Il peut s’écrire de deux façons. J’ai choisi ici l’ancienne écriture.

resource sdb {
    on vmfed1 {
        device /dev/drbd0;
        disk /dev/sdb; 
        meta-disk internal; 
        address 192.168.1.212:7789; 
    } 
    on vmfed2 { 
        device /dev/drbd0;
        disk /dev/sdb; 
        meta-disk internal; 
        address 192.168.1.222:7789;
    }
}

La directive meta-disk indique le mode de stockage des métadonnées nécessaires à l’ordonnancement de la réplication.

Utilisation de DRBD

Initialisation de la ressource

Sur les deux serveurs, vous devez initialiser la ressource sdb créée précédemment.

[root@vmfed2 drbd.d]# drbdadm create-md sdb
md_offset 17179865088
al_offset 17179832320
bm_offset 17179308032

Found some data

 ==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes

initializing activity log
initializing bitmap (512 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
Activation de la ressource

Sur les deux machines, exécutez la commande :

drbdadm up sdb

Pour désactiver la ressource :

drbdadm down sdb

Vous pouvez contrôler l’activation de la ressource à l’aide de la command lsblk.

[root@vmfed2 data]# lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda         8:0    0   10G  0 disk
├─sda1      8:1    0    2M  0 part
├─sda2      8:2    0    2G  0 part [SWAP]
└─sda3      8:3    0    8G  0 part /
sdb         8:16   0   16G  0 disk
└─sdb1      8:17   0   16G  0 part
  └─drbd0 147:0    0   16G  0 disk /data
sr0        11:0    1 1024M  0 rom
zram0     252:0    0  3,8G  0 disk [SWAP]
Le choix du serveur primaire

Pour forcer une des deux machines en tant que serveur primaire, tapez :

drbdadm --force primary drbd

Pour vérifier le statut de chacune d’entre elles, vous disposez de la commande :

[root@vmfed1 data]# drbdsetup status sdb --verbose --statistics
sdb role:Primary suspended:no
    write-ordering:flush
  volume:0 minor:0 disk:UpToDate
      size:16775644 read:16713860 written:72200 al-writes:13 bm-writes:0
      upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  peer connection:Connected role:Secondary congested:no
    volume:0 replication:Established peer-disk:UpToDate
        resync-suspended:no
        received:2095 sent:16715017 out-of-sync:0 pending:0 unacked:0

Vous pouvez contrôler très rapidement le statut de chacune des deux machines en tapant :

drbdadm dstate sdb

ou

drbdadm status sdb
La création du système de fichiers sur le serveur primaire
mkdir /data
mkfs.xfs /dev/drbd0
mount /dev/drbd0 /data
Bascule et vérification

Sur vmfed1, rétrogradez le serveur de primaire à secondaire :

drbdadm role sdb
umount /dev/drbd0
drbdadm secondary sdb

Sur vmfed2,  passez le serveur en primaire et montez /dev/drbd0 :

drbdadm role sdb
drbdadm primary sdb
mkdir /data
mount /dev/drbd0 /data

Pour recharger la configuration des deux nœuds, vous pouvez employer la commande :

drbdadm adjust sdb

Stockage /