Aller au contenu principal

DRBD

1. Introduction

Dans le monde de l'infrastructure informatique, assurer la disponibilité et l'intégrité des données est une priorité absolue. DRBB (Distributed Replicated Block Device) est une solution open source conçue pour répondre à ce besoin en fournissant une réplication de disque en temps réel entre deux serveurs. En utilisant DRBD, les administrateurs peuvent mettre en place des systèmes hautement disponibles, minimisant ainsi les risques de perte de données et les interruptions de service.

DRBD fonctionne en miroir entre deux machines, où les données écrites sur le disque primaire sont simultanément écrites sur le disque secondaire. Cette technologie est particulièrement utile dans les environnements critiques où la tolérance aux pannes et la redondance sont essentielles. Que ce soit pour un petit site web ou pour une grande infrastructure d'entreprise, DRBD offre une solution robuste et fiable pour la protection des données.

Historique de DRBD

DRBD (Distributed Replicated Block Device) a été développé par Linbit, une société autrichienne spécialisée dans les solutions de haute disponibilité et de réplication de données. La première version de DRBD a été introduite en 2001, répondant au besoin croissant de solutions de stockage résilientes et hautement disponibles dans les environnements Linux.

L'idée derrière DRBD était de créer un dispositif de bloc répliqué capable de fonctionner au niveau du noyau Linux, permettant ainsi une réplication transparente et efficace des données entre plusieurs systèmes. Depuis sa création, DRBD a connu plusieurs versions et améliorations, ajoutant des fonctionnalités telles que la réplication asynchrone, la gestion des conflits de split-brain et l'intégration avec des systèmes de haute disponibilité comme Pacemaker et Corosync.

Au fil des ans, DRBD est devenu un composant essentiel pour les administrateurs systèmes et les ingénieurs DevOps cherchant à mettre en place des infrastructures de stockage robustes et fiables. Son adoption s'est étendue à divers secteurs, incluant les entreprises, les centres de données et les environnements cloud, démontrant ainsi sa flexibilité et son efficacité.

Fonctionnalités de DRBD

DRBD offre une gamme de fonctionnalités puissantes qui le rendent idéal pour la réplication de données dans les environnements Linux. Voici quelques-unes des fonctionnalités clés que vous trouverez utiles :

DRBD permet la réplication des données en mode synchrone et asynchrone. En mode synchrone, les données sont écrites simultanément sur les nœuds primaire et secondaire, assurant une haute disponibilité et une perte de données minimale en cas de panne. En mode asynchrone, les données sont écrites d'abord sur le nœud primaire, puis répliquées sur le nœud secondaire, ce qui peut être utile pour des environnements où la latence du réseau est un facteur.

DRBD est compatible avec divers systèmes de fichiers comme ext4, XFS et btrfs. Cette flexibilité permet aux administrateurs de choisir le système de fichiers qui répond le mieux à leurs besoins spécifiques tout en bénéficiant des avantages de la réplication de DRBD.

L'intégration avec des systèmes de gestion de clusters comme Pacemaker permet à DRBD de fournir des solutions de haute disponibilité robustes. Cela signifie que si le nœud primaire devient indisponible, Pacemaker peut automatiquement promouvoir le nœud secondaire pour assurer une continuité de service sans interruption significative.

En cas de défaillance, DRBD peut automatiquement détecter et réparer les incohérences entre les nœuds répliqués. Cette fonctionnalité assure que les données restent cohérentes et disponibles même après des pannes ou des interruptions imprévues.

DRBD permet la réplication des données sur des distances géographiques étendues, ce qui est idéal pour les solutions de reprise après sinistre (disaster recovery). En répliquant les données sur des sites distants, vous pouvez assurer la protection de vos données contre les catastrophes locales.

Avec DRBD, vous pouvez configurer et gérer les ressources de manière flexible, adaptant la réplication à vos besoins spécifiques. Cela inclut la possibilité de définir des groupes de ressources, de configurer des règles de synchronisation et de surveiller l'état des ressources en temps réel.

Ces fonctionnalités font de DRBD un outil indispensable pour tout administrateur système ou ingénieur DevOps cherchant à mettre en place une solution de réplication de données fiable et performante. Dans les chapitres suivants, je vais vous montrer comment tirer parti de ces fonctionnalités dans votre propre environnement.

Concepts de Base

Pour utiliser efficacement DRBD, il est essentiel de comprendre ses concepts fondamentaux. Voici les principaux éléments à connaître :

Ressource DRBD

Une ressource DRBD représente une paire de dispositifs de bloc, l'un étant désigné comme primaire et l'autre comme secondaire. La ressource est définie dans un fichier de configuration et contient les informations nécessaires pour la réplication, telles que les adresses des nœuds et les dispositifs de stockage utilisés.

Mode de Synchronisation

Le mode de synchronisation détermine comment les données sont répliquées entre les nœuds primaire et secondaire. DRBD supporte principalement deux modes :

  • Synchrone : Les écritures sont confirmées seulement lorsque les données ont été écrites sur les deux nœuds. Ce mode assure une haute disponibilité des données.
  • Asynchrone : Les écritures sont confirmées dès qu'elles sont écrites sur le nœud primaire. Les données sont ensuite répliquées sur le nœud secondaire. Ce mode peut être utile pour les environnements à haute latence réseau.

Split-brain

Le split-brain est une situation où les deux nœuds croient être le maître des données, ce qui peut entraîner des incohérences. Pour éviter ou résoudre cette situation, DRBD fournit des mécanismes de détection et des outils pour la gestion des conflits.

Device Minor Number

Chaque dispositif DRBD est identifié par un minor number, qui est un identifiant unique utilisé par le noyau Linux pour accéder au dispositif répliqué.

Meta-disk

La meta-disk est un espace de stockage utilisé par DRBD pour stocker des informations de métadonnées nécessaires à la gestion de la réplication. Elle peut être stockée soit sur le même disque que les données, soit sur un disque séparé.

Opérations Primaires et Secondaires

Les opérations primaires sont celles exécutées par le nœud primaire, telles que les écritures de données. Les opérations secondaires sont exécutées par le nœud secondaire, comme la réception des données répliquées et la mise à jour de son dispositif de stockage.

Synchronisation Initiale

La synchronisation initiale est le processus de copie initiale des données du nœud primaire vers le nœud secondaire. Ce processus est important pour s'assurer que les deux nœuds commencent avec des données cohérentes.

Rôle de Pacemaker et Corosync

Pacemaker et Corosync sont des outils de gestion de clusters qui peuvent être intégrés avec DRBD pour fournir une haute disponibilité. Pacemaker gère les ressources du cluster et les basculements automatiques, tandis que Corosync assure la communication et le quorum entre les nœuds du cluster.

En comprenant ces concepts de base, vous serez mieux préparé pour installer, configurer et gérer DRBD dans votre environnement. Les chapitres suivants détailleront les étapes pratiques pour mettre en œuvre ces concepts.

Installer DRBD

Pour écrire ce guide, j'ai construit une infrastructure sur le cloud Outscale, en utilisant deux VPC. Les nœuds de mon cluster, des machines tournant sous ubuntu 22.04, sont installés dans un subnet de chacun des VPC. Sur ces machines j'ai attaché un volume de même taille.

Il ne faut pas oublier d'ouvrir le port 7788 via les security-groups !

remarque

Le code de cette infrastructure sera bientôt partagé.

Sur Ubuntu/Debian

Utilisez la commande suivante pour installer DRBD sur un système Ubuntu ou Debian :

sudo add-apt-repository ppa:linbit/linbit-drbd9-stack
sudo apt-get install drbd-utils drbd-dkms

Pour vérifier que le module est correctement chargé, utilisez la commande suivante :

lsmod | grep drbd

drbd_transport_tcp     28672  1
drbd                  700416  3 drbd_transport_tcp
handshake              28672  1 drbd_transport_tcp
lru_cache              16384  1 drbd
libcrc32c              16384  3 btrfs,drbd,raid456

Vérification de l'installation

Pour vous assurer que DRBD est correctement installé, vérifiez la version installée avec la commande suivante :

drbdadm --version

Vous devriez voir une sortie indiquant la version de DRBD installée, confirmant que l'installation a été réussie.

Avec DRBD maintenant installé, vous êtes prêt à passer à la configuration des ressources DRBD, que nous aborderons dans le chapitre suivant.

Configuration de DRBD

La configuration de DRBD est une étape essentielle pour définir comment vos données seront répliquées entre les nœuds. Voici comment configurer DRBD pour une utilisation optimale.

Création des fichiers de configuration

Les fichiers de configuration de DRBD se trouvent généralement dans le répertoire /etc/drbd.d/. Chaque ressource DRBD nécessite un fichier de configuration propre.

Créez un fichier de configuration pour votre ressource DRBD. Dans cet exemple, nous allons créer une ressource appelée r0.

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

Ajoutez le contenu suivant au fichier :

resource r0 {
  on primary {
    device /dev/drbd0;
    disk /dev/sda;
    address 10.0.2.10:7788;
    meta-disk internal;
  }
  on secondary {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 10.1.2.10:7788;
    meta-disk internal;
  }
}

Recopiez ce fichier sur le second node !

Initialisation des méta-données

Après avoir configuré le fichier de ressource, vous devez initialiser les méta-données DRBD. Cette étape prépare les disques pour la réplication.

sudo drbdadm create-md r0

Activation de la ressource

Activez ensuite la ressource DRBD. Cela configure le module DRBD avec les paramètres spécifiés dans le fichier de ressource.

sudo drbdadm up r0

Configuration des rôles des nœuds

Pour commencer la réplication, vous devez définir le rôle des nœuds. Le nœud primaire est celui où les écritures initiales sont effectuées et le nœud secondaire reçoit les données répliquées.

Définir le nœud primaire

Sur le premier nœud, exécutez la commande suivante :

sudo drbdadm primary --force r0

Vérifier l'état de la ressource

Vous pouvez vérifier l'état de la ressource DRBD avec la commande suivante :

cat /proc/drbd
version: 9.2.9 (api:2/proto:86-122)
GIT-hash: e624a7fc7a48b1d1e26290fc6cf03ab5cf119570 build by root@node-a.test.local, 2024-05-24 07:58:51
Transports (api:21): tcp (9.2.9)

Vous devriez voir une sortie indiquant que la ressource est active et que les nœuds sont en cours de synchronisation.

Synchronisation initiale

La synchronisation initiale des données peut prendre du temps, en fonction de la taille des disques et de la vitesse du réseau. DRBD gère automatiquement ce processus, mais vous pouvez surveiller la progression avec la commande précédente.

Test de la configuration

Après la synchronisation initiale, testez la configuration en créant un système de fichiers sur le dispositif DRBD et en montant le système de fichiers.

Sur le nœud primaire

Formatez le dispositif DRBD :

sudo mkfs.ext4 /dev/drbd0

Montez le système de fichiers :

sudo mount /dev/drbd0 /mnt

Créez un fichier test :

sudo touch /mnt/toto

Démontez le système de fichiers :

sudo umount /mnt

Rendez ce nœud secondaire :

sudo drbdadm secondary r0

Sur le nœud secondaire

Sur le second nœud :

sudo drbdadm primary r0
sudo mount /dev/drbd0 /mnt
ls /mnt

lost+found  toto

Vous devriez voir le fichier toto, confirmant que la réplication fonctionne correctement.

Gestion et Maintenance

Une fois DRBD installé et configuré, il est important de savoir comment gérer et maintenir vos ressources pour assurer une disponibilité et une performance optimales. Voici les principales tâches de gestion et de maintenance que vous devrez effectuer.

Démarrage et Arrêt des Ressources

Pour démarrer une ressource DRBD, utilisez la commande suivante :

sudo drbdadm up r0

Pour arrêter une ressource, utilisez :

sudo drbdadm down r0

Promotion et Réversion des Nœuds

Pour promouvoir un nœud secondaire en nœud primaire, utilisez la commande suivante :

sudo drbdadm primary --force r0

Pour rétablir le nœud secondaire, utilisez :

sudo drbdadm secondary r0

Vérification de l'État des Ressources

Pour vérifier l'état de vos ressources DRBD, utilisez la commande suivante :

cat /proc/drbd

Cette commande affiche des informations détaillées sur l'état de la ressource, y compris les rôles des nœuds et l'état de synchronisation.

Surveillance et Dépannage

Pour garantir le bon fonctionnement de DRBD et la haute disponibilité de vos données, il est essentiel de surveiller activement vos ressources et de savoir comment dépanner les problèmes éventuels. Voici quelques conseils et outils pour vous aider.

Commandes de Diagnostic

drbdadm status

Pour obtenir des informations détaillées sur une ressource spécifique, utilisez :

sudo drbdadm status r0

r0 role:Secondary
  disk:UpToDate
  node-b.test.local role:Primary
    peer-disk:Diskless

Consultation des Logs

dmesg

Pour consulter les messages du noyau liés à DRBD, utilisez dmesg. Cela peut être utile pour diagnostiquer les problèmes de bas niveau :

dmesg | grep drbd

[324001.146413] EXT4-fs (drbd0): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[325197.449227] drbd r0: Preparing cluster-wide state change 1533086149 (0->-1 3/2)
[325197.450984] drbd r0: State change 1533086149: primary_nodes=0, weak_nodes=0
[325197.450991] drbd r0: Committing cluster-wide state change 1533086149 (0ms)
[325197.451023] drbd r0: role( Primary -> Secondary ) [secondary]
[325245.268752] drbd r0 node-b.test.local: Preparing remote state change 1849385096
[325245.269806] drbd r0 node-b.test.local: Committing remote state change 1849385096 (primary_nodes=2)
[325245.269812] drbd r0 node-b.test.local: peer( Secondary -> Primary ) [remote]

journald

Si vous utilisez systemd, les logs peuvent être consultés avec journalctl :

sudo journalctl -u drbd

May 24 08:11:26 node-a.test.local systemd[1]: drbd.service: Deactivated successfully.
May 24 08:11:26 node-a.test.local systemd[1]: Stopped DRBD -- please disable. Unless you are NOT using a cluster manager..
May 24 08:11:26 node-a.test.local systemd[1]: Starting DRBD -- please disable. Unless you are NOT using a cluster manager....
May 24 08:11:26 node-a.test.local drbd[38758]:  * Starting DRBD resources
May 24 08:11:26 node-a.test.local drbd[38770]: [
May 24 08:11:26 node-a.test.local drbd[38770]:      create res: r0
May 24 08:11:26 node-a.test.local drbd[38770]:    prepare disk: r0
May 24 08:11:26 node-a.test.local drbd[38770]:     prepare net: r0

Dépannage des Problèmes Courants

Ressource non synchronisée

Si une ressource ne se synchronise pas correctement, vous pouvez forcer une resynchronisation :

sudo drbdadm disconnect r0
sudo drbdadm connect r0

Problèmes de réseau

Si vous rencontrez des problèmes de connexion entre les nœuds, vérifiez la configuration réseau et les règles de pare-feu. Assurez-vous que les nœuds peuvent se communiquer sur le port utilisé par DRBD.

Analyse des Goulots d'Étranglement

Utilisez des outils comme iostat et vmstat pour identifier les goulots d'étranglement dans votre système de stockage. Ces outils vous aideront à comprendre où les performances peuvent être améliorées.

iostat -x 1
vmstat 1

Conclusion

En conclusion, DRBD (Distributed Replicated Block Device) est un outil puissant et essentiel pour tout administrateur souhaitant garantir la haute disponibilité et l'intégrité des données. Grâce à sa capacité à répliquer les données en temps réel entre deux serveurs, DRBD permet de mettre en place des systèmes robustes et résilients aux pannes matérielles.

Plus d'infos

Consultez la documentation officielle et les forums de la communauté pour des conseils supplémentaires et des solutions aux problèmes courants :