# DRBD

DRBD (Distributed Replicated Block Device en anglais, ou périphérique en mode bloc répliqué et distribué en français) est une architecture de stockage distribuée pour GNU/Linux, permettant la réplication de périphériques de bloc (disques, partitions, volumes logiques etc.) entre des serveurs. DRBD est un logiciel libre, mais un support existe. DRBD est composé d'un module noyau, d'outils d'administration en espace utilisateur ainsi que de scripts shell.
La réplication des données se fait :
* En temps réel. En permanence, pendant que les applications modifient les données présentes sur le périphérique.
* De façon transparente. Les applications qui stockent leurs données sur le périphérique répliqué n'ont pas conscience que ces données sont en fait stockées sur plusieurs ordinateurs.
* De façon synchrone, ou asynchrone. En fonctionnement synchrone, une application qui déclenche une écriture de donnée est notifiée de la fin de l'opération seulement après que l'écriture a été effectuée sur tous les serveurs, alors qu'en fonctionnement asynchrone, la notification se fait après que la donnée a été écrite localement, mais avant la propagation de la donnée.
Depuis la version 9, DRBD permet la réplication entre plus de deux nœuds.

## Principe de fonctionnement

DRBD ajoute une couche logique de périphériques de bloc (conventionnellement nommée /dev/drbdX, ou X est le numéro de périphérique mineur) au-dessus de la couche logique locale des périphériques de bloc existante sur les nœuds du cluster participants. Les écritures sur le nœud primaire sont transférées sur le périphérique de bloc de bas niveau et sont simultanément propagées au nœud secondaire. Le nœud secondaire transfère ensuite les données à son périphérique de bloc de bas niveau correspondant. Toutes les lectures sont effectuées localement.
En cas de défaillance du nœud primaire, un processus de gestion de cluster promeut le nœud secondaire dans un état primaire. Cette transition peut requérir une vérification subséquente de l'intégrité du système de fichier, empilé au sommet de DRBD, par le biais d'une vérification du système de fichiers ou d'un rejeu de journal. Quand l'ancien nœud primaire défaillant revient, le système peut (ou peut ne pas) l'élever à nouveau à un niveau primaire, après une synchronisation des données du périphérique. L'algorithme de synchronisation de DRBD est efficace dans le sens où seuls les blocs qui ont changé durant la panne doivent être resynchronisés, plutôt que le périphérique dans son entièreté.
DRBD peut être utilisé aussi bien en dessous qu'au-dessus de la pile de Linux LVM.
La version 8 de DRBD, livrée en janvier 2007, a introduit le support des configurations de répartition de charge, permettant aux différents nœuds d'accéder à un DRBD en particulier en mode lecture/écriture avec des sémantiques de stockage partagé. Une telle configuration requiert l'usage d'un gestionnaire de verrou distribué.

## Utilisations

DRBD peut être utilisé comme une base pour de nombreux systèmes comme, notamment :
* Un système de fichiers classique,
* Un système de fichiers sur disque partagé tels que GFS ou OCFS,
* Un autre périphérique de bloc logique (tel qu'utilisé dans LVM)
Il peut être aussi intégré au sein de certains gestionnaires de "grappes" (clusters, en anglais) tels que Pacemaker, Heartbeat ou Red Hat Cluster Suite.
DRBD peut, finalement, être utilisé en association avec Xen. Cela permet, par exemple, de faire de la réplication non seulement sur des serveurs Linux (ce qui est l'utilisation de base de DRBD) mais aussi sur d'autres systèmes d'exploitation qui peuvent être virtualisés sous Xen (ce qui comprend, en principe, n'importe quel système d'exploitation d'architecture Intel 32 ou 64 bits).
Il est à noter que DRBD est intégré au projet linux-ha.

## Avantages par rapport au stockage de cluster partagé

Les systèmes de cluster informatiques conventionnels utilisent, typiquement, une sorte de stockage partagé pour que les données puissent être utilisées par les ressources des clusters. Cette approche a un certain nombre d'inconvénients, que DRBD peut aider à compenser :
* Les ressources du stockage partagé introduisent habituellement un point individuel de défaillance dans la configuration du cluster --- alors que chacun des nœuds du cluster peuvent faillir sans provoquer d'interruption de service, la défaillance du stockage cause presque inévitablement un arrêt du service. Dans DRBD, aucun problème de la sorte n'existe puisque les données de ressource du cluster sont répliquées plutôt que partagées.
* Les ressources du stockage partagé sont particulièrement sensibles aux situations de « split-brain », dans lesquelles les différents nœuds du cluster sont encore en vie mais ont perdu toute connectivité réseau entre eux. Dans un tel scénario, chaque nœud du cluster va se considérer comme étant le seul nœud vivant du cluster et prendre le contrôle de toutes les ressources du cluster. Cela peut mener vers des résultats potentiellement désastreux quand les différents nœuds, par exemple, montent et écrivent sur un système de fichiers de façon concurrente. Les administrateurs de cluster doivent donc implémenter de façon attentive les politiques de clôtures de nœuds afin d'éviter cela. DRBD atténue sensiblement ce problème en gardant deux ensembles de données répliquées au lieu d'un ensemble commun.

## Architecture

DRBD se décompose en deux parties: le module noyau d'une part, et les outils d'administration et autres scripts d'autre part.

### Le module noyau

La fonctionnalité principale de DRBD est implémentée par un module noyau. Plus précisément, DRBD est un driver pour un périphérique virtuel de type bloc ; de fait, DRBD se situe plutôt bas dans la pile d'entrée/sortie du système, ce qui le rend très flexible et transparent.
Les auteurs de DRBD ont soumis leur contribution au projet du noyau Linux en juillet 2007, en vue d'une intégration au noyau "vanilla". Il fut intégré en décembre 2009 pour la version 2.6.33 du noyau.

### Les outils en espace utilisateur

La communication avec le module noyau de DRBD se fait via des outils en espace utilisateur. Ces outils sont les suivants:
* drbdadm l'outil d'administration de haut niveau de DRBD. Il récupère les informations depuis le fichier de configuration /etc/drbd.conf. Il sert d'interface pour drbdsetup et drbdmeta. Un mode "dry-run" permet d'afficher les commandes à destination de ces programmes.
* drbdsetup est le programme qui permet aux utilisateurs de configurer le module DRBD après son chargement. C'est un outil d'assez bas niveau, auquel toutes les options doivent-être passées par la ligne de commande, ce qui le rend à la fois plus flexible, au prix d'une difficulté d'utilisation.
* drbdmeta est un programme qui permet à l'utilisateur de créer, sauvegarder, restaurer et modifier les méta-données des structures de données de DRBD.