DRBD : réplication de blocs entre deux serveurs en temps réel

21 mai 2026 — par admin_libra

DRBD (Distributed Replicated Block Device) est un mécanisme de réplication de périphériques blocs entre deux serveurs Linux via le réseau. Souvent qualifié de « RAID 1 réseau », il copie en temps réel les données d’une partition ou d’un volume logique vers un nœud distant, garantissant qu’une panne matérielle ne provoque aucune perte de données.

Intégré au noyau Linux depuis la version 2.6.33 et maintenu par LINBIT, DRBD est aujourd’hui en version 9.x dans les dépôts officiels Debian et Ubuntu. Il constitue la brique de stockage de référence dans les clusters haute disponibilité basés sur Pacemaker et Corosync, notamment pour protéger des bases de données, des partages NFS ou des systèmes de fichiers critiques.

Ce guide couvre l’installation et la configuration complète de DRBD 9 sur deux serveurs Debian 12 ou Ubuntu 22.04/24.04 LTS, depuis la préparation des disques jusqu’au basculement manuel et à l’intégration avec Pacemaker. Toutes les commandes sont testées en environnement réel.

Prérequis et conventions

Avant de commencer, assurez-vous de disposer de :

  • Deux serveurs Debian 12 (Bookworm) ou Ubuntu 22.04 / 24.04 LTS
  • Une partition ou un volume LVM dédié à la réplication sur chaque nœud (ex. /dev/sdb)
  • Connectivité réseau directe entre les deux nœuds — un réseau dédié à la réplication est recommandé en production
  • Le port TCP 7788 ouvert entre les deux machines
  • Les mêmes versions du noyau et de drbd-utils sur les deux serveurs

Conventions utilisées dans cet article :

  • node1 — adresse 192.168.10.1, nœud primaire initial
  • node2 — adresse 192.168.10.2, nœud secondaire
  • Ressource DRBD : r0, périphérique virtuel /dev/drbd0, disque source /dev/sdb

Note : Les noms node1 et node2 dans la configuration DRBD doivent correspondre exactement à la sortie de la commande hostname sur chaque machine. Configurez-les avec hostnamectl set-hostname node1 si nécessaire.

Installation de DRBD

Installer drbd-utils sur les deux nœuds

Le paquet drbd-utils est disponible dans les dépôts standard de Debian et Ubuntu. Exécutez ces commandes sur chaque nœud :

sudo apt update
sudo apt install -y drbd-utils

Sur Ubuntu, notamment sur des machines virtuelles, le module noyau DRBD peut être absent. Vérifiez et installez les modules extra si nécessaire :

# Vérifier la présence du module
modinfo drbd

# Si absent, installer les modules extra du noyau courant
sudo apt install -y linux-modules-extra-$(uname -r)

# Charger le module manuellement
sudo modprobe drbd

# Vérifier le chargement
lsmod | grep drbd

Ouvrir le port de réplication

# Avec ufw (Ubuntu)
sudo ufw allow 7788/tcp

# Vérifier la connectivité depuis node1 vers node2
nc -zv 192.168.10.2 7788

Configuration de la ressource DRBD

Créer le fichier de ressource

DRBD lit sa configuration depuis /etc/drbd.conf et les fichiers /etc/drbd.d/*.res. La bonne pratique est d’isoler chaque ressource dans son propre fichier. Créez /etc/drbd.d/r0.res sur les deux nœuds avec un contenu identique :

sudo tee /etc/drbd.d/r0.res << 'EOF'
resource r0 {
  protocol C;           # Synchrone : ACK uniquement après écriture sur les deux nœuds

  startup {
    wfc-timeout      15;   # Attente max du pair au démarrage (secondes)
    degr-wfc-timeout 60;   # Attente en mode dégradé
  }

  net {
    cram-hmac-alg sha1;
    shared-secret "VotreSecretPartagé";  # Clé d'authentification entre nœuds
    verify-alg    sha256;
  }

  syncer {
    rate 100M;   # Bande passante allouée à la synchronisation initiale
  }

  on node1 {
    device    /dev/drbd0;
    disk      /dev/sdb;           # Disque ou partition source sur node1
    address   192.168.10.1:7788;
    meta-disk internal;           # Métadonnées DRBD sur le même disque
  }

  on node2 {
    device    /dev/drbd0;
    disk      /dev/sdb;           # Disque ou partition source sur node2
    address   192.168.10.2:7788;
    meta-disk internal;
  }
}
EOF

Transférez ensuite le fichier sur le second nœud pour garantir l’identité de configuration :

# Depuis node1
scp /etc/drbd.d/r0.res node2:/etc/drbd.d/r0.res

Initialiser les métadonnées DRBD

Cette étape initialise la zone de métadonnées DRBD en fin de disque. Attention : toute donnée préexistante sur /dev/sdb sera écrasée.

# À exécuter sur node1 ET node2
sudo drbdadm create-md r0

Sortie attendue sur chaque nœud :

initializing activity log
initializing bitmap (0 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.

Démarrage et synchronisation initiale

Activer la ressource

# Sur node1 ET node2
sudo drbdadm up r0

Vérifiez l’état immédiatement après :

cat /proc/drbd
# version: 8.4.11 (api:1/proto:86-101)
#  0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

Les deux nœuds sont en état Secondary/Secondary. Il faut désigner un primaire initial pour lancer la synchronisation.

Promouvoir node1 en primaire et lancer la synchronisation

Sur node1 uniquement, forcez la promotion — cette commande indique à DRBD que node1 est la source de vérité et lance la copie vers node2 :

sudo drbdadm -- --overwrite-data-of-peer primary r0

Suivez la progression de la synchronisation en temps réel :

watch -n 2 cat /proc/drbd

# Exemple de sortie pendant la synchronisation :
#  0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
#     ns:2097152 nr:0 dw:0 dr:2098076 al:0 bm:0 lo:0 pe:0 ua:0 ap:0
#        [====>...............] sync'ed: 22.4% (17408/22528)M
#        finish: 0:02:45 speed: 105,472 K/sec

Attendez que l’état affiche ds:UpToDate/UpToDate avant de passer à l’étape suivante. Sur de gros volumes, la synchronisation peut prendre plusieurs minutes à plusieurs heures.

Utilisation du périphérique DRBD

Créer un système de fichiers et monter le volume

Une fois la synchronisation terminée, /dev/drbd0 est utilisable comme n’importe quel disque bloc. Depuis le nœud primaire (node1) :

# Créer un système de fichiers ext4
sudo mkfs.ext4 /dev/drbd0

# Créer le point de montage
sudo mkdir -p /data

# Monter le volume
sudo mount /dev/drbd0 /data

# Vérifier
df -h /data
# /dev/drbd0   22G  45M   21G   1% /data

Ne montez jamais /dev/drbd0 simultanément sur les deux nœuds avec un système de fichiers classique comme ext4 ou xfs. Cela provoquerait une corruption immédiate. Réservez le montage au nœud primaire uniquement, ou utilisez un système de fichiers cluster (OCFS2, GFS2) si vous avez besoin d’un accès concurrent.

Tester le basculement manuel

Pour simuler un failover et vérifier que les données sont bien répliquées :

# Étape 1 — Sur node1 : démonter et rétrograder en secondaire
sudo umount /data
sudo drbdadm secondary r0

# Étape 2 — Sur node2 : promouvoir en primaire et monter
sudo drbdadm primary r0
sudo mount /dev/drbd0 /data

# Vérifier que les données créées sur node1 sont présentes
ls -la /data

Les données sont intactes sur node2. C’est le comportement attendu du protocole C : aucune écriture n’est acquittée à l’application avant d’être confirmée sur les deux disques.

Les trois protocoles de réplication

DRBD propose trois modes de réplication adaptés à des scénarios différents :

  • Protocole A — Asynchrone : l’écriture est confirmée dès que les données ont quitté le buffer TCP local. Risque de perte de données en cas de panne avant réception par le pair. Adapté aux réplications longue distance (WAN).
  • Protocole B — Semi-synchrone : l’écriture est confirmée dès que le pair a reçu les données en mémoire, mais avant l’écriture sur disque. Bonne compromise entre performance et sécurité sur réseau rapide.
  • Protocole C — Synchrone : l’écriture n’est confirmée qu’après que les deux disques l’ont physiquement écrite. Aucune perte de données possible sur panne d’un nœud. Recommandé pour tous les clusters HA locaux.

La pénalité de performance du protocole C est négligeable sur un réseau local 1 Gbit/s ou 10 Gbit/s dédié à la réplication.

Intégration avec Pacemaker

DRBD gère la réplication, mais c’est Pacemaker qui orchestre le basculement automatique en cas de panne. L’intégration repose sur le Resource Agent ocf:linbit:drbd.

Désactiver le démarrage automatique de DRBD

Pacemaker doit être le seul à démarrer et arrêter les ressources DRBD. Désactivez le service systemd sur les deux nœuds :

# Sur node1 ET node2
sudo systemctl disable drbd
sudo drbdadm down r0   # Si la ressource est encore active

Déclarer DRBD comme ressource Pacemaker

# Créer la ressource DRBD (mode promotable = primaire/secondaire automatique)
sudo pcs resource create drbd_r0 ocf:linbit:drbd 
  drbd_resource=r0 
  op monitor interval=15s

# Déclarer la ressource comme promotable (un seul primaire à la fois)
sudo pcs resource promotable drbd_r0 
  promoted-max=1 promoted-node-max=1 
  clone-max=2 clone-node-max=1 
  notify=true

# Vérifier l'état du cluster
sudo pcs status

Vous pouvez ensuite ajouter une ressource de montage et définir des contraintes d’ordre (DRBD promu avant montage) pour automatiser complètement le cycle de vie. Référez-vous à notre article sur Pacemaker et Corosync pour la configuration complète du cluster HA.

Commandes d’administration courantes

# État détaillé de toutes les ressources DRBD
sudo drbdadm status

# Affichage temps réel du statut
watch -n 1 drbdadm status

# Lancer une vérification d'intégrité des données (à planifier hors pic d'activité)
sudo drbdadm verify r0

# Forcer la resynchronisation complète depuis le primaire
sudo drbdadm invalidate-remote r0

# Statistiques de réplication réseau
sudo drbdsetup show-statistics r0

# Surveiller les événements en temps réel
sudo drbdadm events2 r0

# Voir les journaux DRBD
sudo journalctl -u drbd -f

À lire également

Références

Index complet

Tous les articles (35)

Date Article Tags
27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs