Translation(s): English - Français
Contents
Ancien article créer initialement avec la version 8.3.7 de drbd, la version actuelle sous Debian Jessie est la version 8.9.2rc1, mais les commandes sont les mêmes.
Le périphérique de bloc répliqué distribué (Distributed Replicated Block Device - DRBD) est un système de stockage distribué sur plusieurs hôtes différents comme un RAID 1 en réseau. Les données sont répliquées sous le système de fichiers au niveau du bloc sur TCP/IP.
Une configuration DRBD correcte, en particulier dans les environnements HA avec Pacemaker, etc., requiert une configuration plus complexe que celle décrite ici. Veuillez consulter les guides appropriés. L'exemple suivant n'est rien de plus qu'un "Hello World". Assurez-vous d'utiliser des versions drbd identiques sur tous les noeuds.
Préparation du système Debian
La partie du module de DRBD est livrée avec les noyaux Debian, mais les outils d'espace utilisateur et les fichiers de configuration sont fournis avec le paquet drbd8-utils.
apt-get install drbd8-utils
Préparer des blocs physiques simulés
Je n'avais pas d'espace vide sur mon disque, donc j'ai créé un périphérique de bouclage (loopback) sur chaque nœud. Je n'ai pas trouvé un moyen approprié de configurer des fichiers en loopback pendant le processus de démarrage (peut-être via les règles udev?) [0]. Cette configuration n'est bien sûr pas adapté à la production, l'utilisation de dispositifs de loopback, il n'est pas recommandé en raison de problèmes de blocage. [1] Si vous avez de l'espace, utilisez une partition physique ou LVM sauvegardée. Simulation sur une partition virtuelle de 1GB.
# dd if=/dev/zero of=drbd.testimage bs=1024k count=1024 # losetup /dev/loop1 drbd.testimage
Création de la ressource DrBd
Créer un fichier avec l’extension .res dans le répertoire /etc/drbd.d/ avec le contenue suivant : NOTE : Le nom de l’hôte (hostname) doit être identique au nom du noeud !
# cat drbd-demo.res resource drbddemo { meta-disk internal; device /dev/drbd1; syncer { verify-alg sha1; } net { allow-two-primaries; } on node1 { disk /dev/loop1; address 192.168.1.101:7789; } on node2 { disk /dev/loop1; address 192.168.1.102:7789; } }
Les images loopback et la configuration doivent être créées sur les deux nœuds. L'initialisation doit aussi être effectuée sur les deux nœuds.
#drbdadm create-md drbddemo
Mise en lige de la ressource
Sur le nœud "node1"
# uname -n node1 # modprobe drbd # drbdadm up drbddemo # cat /proc/drbd version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 1: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1048508
Sur le nœud "node2"
Faire de node2 le nœud principal:
# uname -n node2 # # modprobe drbd # drbdadm up drbddemo # drbdadm -- --overwrite-data-of-peer primary drbddemo # cat /proc/drbd version: 8.3.11 (api:88/proto:86-96) srcversion: 2D876214BAAD53B31ADC1D6 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:4176 nr:0 dw:0 dr:9616 al:0 bm:0 lo:2 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048508 [>....................] sync'ed: 0.4% (1048508/1048508)K finish: 0:43:41 speed: 0 (0) K/sec
Maintenant nous devrions avoir le périphérique /dev/drbd1 en marche.
Stocker des données d’exemple
Créons un système de fichiers sur ce périphérique de bloc et y mettons des données.
# mkfs.xfs /dev/drbd1 meta-data=/dev/drbd1 isize=256 agcount=4, agsize=65532 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=262127, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =Internes Protokoll bsize=4096 blocks=1200, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =keine extsz=4096 blocks=0, rtextents=0 # mount /dev/drbd1 /mnt cat <<-END > /mnt/mon_fichier_de_test > drbd demo (Il n'est pas écrit drbd ;-) ) > END
Sur l'autre nœud, vous devriez obtenir un avertissement lorsque vous essayez de monter /dev/drbd1. Cela n'est possible qu'en mode lecture seule. Vous ne pouvez pas monter la ressource sur le nœud node1.
J'ai également éteint le nœud secondaire et mis beaucoup plus de données sur le primaire. Après le redémarrage du nœud de sauvegarde (montage de l'image loopback et redémarrage du service drbd service drbd restart), le processus de synchronisation a démarré immédiatement. Vous pouvez vérifier cela avec un simple watch cat /proc/drbd.
Inverser la ressource (node2 -> node1)
Voici comment inverser le mode primaire / secondaire entre les deux nœuds.
Sur le noeud node2 :
umount /mnt drbdadm secondary drbddemo
Sur le noeud node1 :
drbdadm primary drbddemo mount /dev/drbd1 /mnt
Pièges
J'ai essayé la version 8.3.7 de stable avec la version 8.3.11 de backports stables sur l'autre nœud. Le résultat a été une défaillance de protocole (drbd_send_block () a échoué) et un système qui ne répond pas à cause de tentatives de reconnexion sans fin. Dans ce cas particulier, j'ai utilisé squeeze-stable sur la cible et squeeze-backports sur la source.
Après avoir redémarré le noeud source avec le noyau expédié stable, le processus de synchronisation a démarré immédiatement.
# cat /proc/drbd version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r---- ns:0 nr:284320 dw:284320 dr:0 al:0 bm:17 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:764188 [====>...............] sync'ed: 27.4% (764188/1048508)K finish: 0:15:55 speed: 416 (320) K/sec
Finalement, j'ai porté les deux noeuds sur les dépôts stable-backport et tout a fonctionné comme il faut.
Références
(en) DRBD Homepage
(en) HA Guide
Notes
CategoryHardware | CategorySystemAdministration | CategoryStorage | CategoryNetwork