<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.sn4ky.net/index.php?action=history&amp;feed=atom&amp;title=Mise_en_place_DRBD</id>
	<title>Mise en place DRBD - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sn4ky.net/index.php?action=history&amp;feed=atom&amp;title=Mise_en_place_DRBD"/>
	<link rel="alternate" type="text/html" href="https://wiki.sn4ky.net/index.php?title=Mise_en_place_DRBD&amp;action=history"/>
	<updated>2026-05-06T13:18:32Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.sn4ky.net/index.php?title=Mise_en_place_DRBD&amp;diff=8&amp;oldid=prev</id>
		<title>Sn4kY : Page créée avec « DRBD est une sorte de RAID1 via Ethernet, une réplication de périphérique de stockage en mode block. Il travaille très bien avec LVM, et assure la synchronisation des... »</title>
		<link rel="alternate" type="text/html" href="https://wiki.sn4ky.net/index.php?title=Mise_en_place_DRBD&amp;diff=8&amp;oldid=prev"/>
		<updated>2018-04-12T13:57:45Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « DRBD est une sorte de RAID1 via Ethernet, une réplication de périphérique de stockage en mode block. Il travaille très bien avec LVM, et assure la synchronisation des... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;DRBD est une sorte de RAID1 via Ethernet, une réplication de périphérique de stockage en mode block. Il travaille très bien avec LVM, et assure la synchronisation des block-devices entre deux serveurs du réseau (les nodes).&lt;br /&gt;
&lt;br /&gt;
On considère ici que LVM est acquis, et que DRBD est installé sur les deux nodes (sur Debian Squeeze, un &amp;lt;code&amp;gt;aptitude install drbd-utils&amp;lt;/code&amp;gt; vous installera la version 8.3, ainsi que le module kernel qui va bien.&lt;br /&gt;
&lt;br /&gt;
==Configuration initiale==&lt;br /&gt;
Pour commencer, il nous faut créer un LV qui sera identique sur chaque node (le LV a répliquer)&lt;br /&gt;
 [root@node1 ~]# lvcreate -L 1G -n testdrbd myvg-node1&lt;br /&gt;
 [root@node2 ~]# lvcreate -L 1G -n testdrbd myvg-node2&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration global de DRBD &amp;lt;code&amp;gt;/etc/drbd.conf&amp;lt;/code&amp;gt; contient les généralités de DRBD.&lt;br /&gt;
&lt;br /&gt;
Debian spirit, il contient en réalité deux includes : &amp;lt;code&amp;gt;drbd.d/global_common.conf&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;drbd.d/*.res&amp;lt;/code&amp;gt;. Le premier contient la config globale, et l&amp;#039;autre include va servir a inclure les fichiers de &amp;lt;code&amp;gt;resource&amp;lt;/code&amp;gt; (des volumes à synchroniser).&lt;br /&gt;
&lt;br /&gt;
La configuration globale de DRBD étant satisfaisante sur Debian, nous n&amp;#039;allons pas la modifier :&lt;br /&gt;
&lt;br /&gt;
 global {&lt;br /&gt;
        usage-count no;&lt;br /&gt;
        # minor-count dialog-refresh disable-ip-verification&lt;br /&gt;
 }&lt;br /&gt;
 common {&lt;br /&gt;
        protocol C;&lt;br /&gt;
        handlers {&lt;br /&gt;
                pri-on-incon-degr &amp;quot;/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b &amp;gt; /proc/sysrq-trigger ; reboot -f&amp;quot;;&lt;br /&gt;
                pri-lost-after-sb &amp;quot;/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b &amp;gt; /proc/sysrq-trigger ; reboot -f&amp;quot;;&lt;br /&gt;
                local-io-error &amp;quot;/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o &amp;gt; /proc/sysrq-trigger ; halt -f&amp;quot;;&lt;br /&gt;
                # fence-peer &amp;quot;/usr/lib/drbd/crm-fence-peer.sh&amp;quot;;&lt;br /&gt;
                # split-brain &amp;quot;/usr/lib/drbd/notify-split-brain.sh root&amp;quot;;&lt;br /&gt;
                # out-of-sync &amp;quot;/usr/lib/drbd/notify-out-of-sync.sh root&amp;quot;;&lt;br /&gt;
                # before-resync-target &amp;quot;/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k&amp;quot;;&lt;br /&gt;
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;&lt;br /&gt;
        }&lt;br /&gt;
        startup {&lt;br /&gt;
                # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb;&lt;br /&gt;
        }&lt;br /&gt;
        disk {&lt;br /&gt;
                # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes&lt;br /&gt;
                # no-disk-drain no-md-flushes max-bio-bvecs&lt;br /&gt;
        }&lt;br /&gt;
        net {&lt;br /&gt;
                # snd‐buf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers&lt;br /&gt;
                # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret&lt;br /&gt;
                # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork&lt;br /&gt;
        }&lt;br /&gt;
        syncer {&lt;br /&gt;
                # rate after al-extents use-rle cpu-mask verify-alg csums-alg&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Les options de la configuration sont très bien expliquées dans la [http://www.drbd.org/users-guide-emb/re-drbdconf.html documentation].&lt;br /&gt;
&lt;br /&gt;
Nous allons surtout nous intéresser au fichier de resource, par exemple &amp;lt;code&amp;gt;/etc/drbd.d/testdrbd.res&amp;lt;/code&amp;gt;&lt;br /&gt;
 resource testdrbd {&lt;br /&gt;
        startup {&lt;br /&gt;
                degr-wfc-timeout 10;    # 10s&lt;br /&gt;
        }&lt;br /&gt;
        disk {&lt;br /&gt;
                on-io-error   detach;&lt;br /&gt;
        }&lt;br /&gt;
        net {&lt;br /&gt;
                timeout         60;&lt;br /&gt;
                connect-int     10;&lt;br /&gt;
                ping-int        10;&lt;br /&gt;
                ping-timeout    5;&lt;br /&gt;
                after-sb-0pri disconnect;&lt;br /&gt;
                after-sb-1pri disconnect;&lt;br /&gt;
                after-sb-2pri disconnect;&lt;br /&gt;
                rr-conflict disconnect;&lt;br /&gt;
        }&lt;br /&gt;
        syncer {&lt;br /&gt;
                rate 640M;&lt;br /&gt;
                verify-alg sha1;&lt;br /&gt;
        }&lt;br /&gt;
        on node1 {&lt;br /&gt;
                device          /dev/drbd0;&lt;br /&gt;
                disk            /dev/myvg-node1/testdrbd;&lt;br /&gt;
                address         192.168.0.1:7788;&lt;br /&gt;
                meta-disk       internal;&lt;br /&gt;
        }&lt;br /&gt;
        on node2 {&lt;br /&gt;
                device          /dev/drbd0;&lt;br /&gt;
                disk            /dev/myvg-node2/testdrbd;&lt;br /&gt;
                address         192.168.0.2:7788;&lt;br /&gt;
                meta-disk       internal;&lt;br /&gt;
        }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La configuration doit être identique sur les deux nodes.&lt;br /&gt;
&lt;br /&gt;
Quelques explications tout de même :&lt;br /&gt;
 common {&lt;br /&gt;
 protocol C;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;quot;protocol&amp;quot; indique la méthode qui sera utilisée pour effectuer la synchronisation des data. La méthode C est la plus sure, elle indique à DRBD que le status du block copié est OK lorsque la donnée est physiquement écrite sur les deux nodes.&lt;br /&gt;
&lt;br /&gt;
 resource testdrbd {&lt;br /&gt;
 on nodeX {&lt;br /&gt;
   device /dev/drbd0;&lt;br /&gt;
   disk /dev/myvg-nodeX/testdrbd;&lt;br /&gt;
   meta-disk internal;&lt;br /&gt;
   address 192.168.0.2:7788;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;quot;resource&amp;quot; défini le début de la description d&amp;#039;un volume spécifique (par opposition à la configuration globale). &amp;quot;disk&amp;quot; est le block device qui contient les données actuelles. &amp;quot;device&amp;quot; représentera le nom qu&amp;#039;utilisera DRBD. &amp;quot;meta-disk&amp;quot; spécifie où DRBD stoquera ses méta données. &amp;quot;internal&amp;quot; est un très bon choix pour les options automatiques. Il est possible de séparer les méta données, mais ceci est un peu &amp;quot;performance killer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Le bloc &amp;quot;on&amp;quot; défini les paramètres spécifiques à chaque node. Attention, le paramètre doit absolument être le véritable nom du host du node. &amp;quot;address&amp;quot; spécifie l&amp;#039;adresse ainsi que le port à utiliser pour cette ressource. Pour partager plusieurs ressources entre les deux même nodes, il faut changer le port (ou l&amp;#039;IP...).&lt;br /&gt;
&lt;br /&gt;
==Mise en place==&lt;br /&gt;
===Initialisation des volumes===&lt;br /&gt;
Il faut a présent initialiser les métadata des volumes&lt;br /&gt;
 [root@node1 ~]# drbdadm create-md testdrbd&lt;br /&gt;
 md_offset 54521856&lt;br /&gt;
 al_offset 54489088&lt;br /&gt;
 bm_offset 54484992&lt;br /&gt;
 Found some data&lt;br /&gt;
  ==&amp;gt; This might destroy existing data! &amp;lt;==&lt;br /&gt;
 Do you want to proceed?&lt;br /&gt;
 [need to type &amp;#039;yes&amp;#039; to confirm] yes&lt;br /&gt;
 Writing meta data...&lt;br /&gt;
 initializing activity log&lt;br /&gt;
 NOT initialized bitmap&lt;br /&gt;
 New drbd meta data block successfully created.&lt;br /&gt;
&lt;br /&gt;
 [root@node2 ~]# drbdadm create-md testdrbd&lt;br /&gt;
 md_offset 54521856&lt;br /&gt;
 al_offset 54489088&lt;br /&gt;
 bm_offset 54484992&lt;br /&gt;
 Found some data&lt;br /&gt;
  ==&amp;gt; This might destroy existing data! &amp;lt;==&lt;br /&gt;
 Do you want to proceed?&lt;br /&gt;
 [need to type &amp;#039;yes&amp;#039; to confirm] yes&lt;br /&gt;
 Writing meta data...&lt;br /&gt;
 initializing activity log&lt;br /&gt;
 NOT initialized bitmap&lt;br /&gt;
 New drbd meta data block successfully created.&lt;br /&gt;
&lt;br /&gt;
Une fois les métadata crées, on peut lancer le démon drbd, sur les deux nodes simultanément (dans le laps de temps du timeout)&lt;br /&gt;
 [root@node1 ~]# /etc/init.d/drbd start&lt;br /&gt;
 [root@node2 ~]# /etc/init.d/drbd start&lt;br /&gt;
 Starting DRBD resources:    [ d0 s0 n0 ].&lt;br /&gt;
&lt;br /&gt;
Le démon est démarré, on vérifie que les états de drbd :&lt;br /&gt;
 # cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----&lt;br /&gt;
    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:53208&lt;br /&gt;
&lt;br /&gt;
Les volumes sont bien dans un état Connecté, UP, sont considérés comme secondaires, et inconsistants. C&amp;#039;est ce que nous attendons dans la mesure où il n&amp;#039;y a pas eu de données sur le volume.&lt;br /&gt;
&lt;br /&gt;
Il faut a présent synchroniser la grappe. &amp;#039;&amp;#039;&amp;#039;Cette opération ne doit être effectuée que sur un node&amp;#039;&amp;#039;&amp;#039; (le master)&lt;br /&gt;
&lt;br /&gt;
 [root@node1 ~]# drbdsetup /dev/drbd0 primary --overwrite-data-of-peer&lt;br /&gt;
&lt;br /&gt;
Si on regarde à ce moment l&amp;#039;état de &amp;lt;code&amp;gt;/proc/drbd&amp;lt;/code&amp;gt;, on observe la synchronisation entre les deux nodes :&lt;br /&gt;
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----&lt;br /&gt;
    ns:21680 nr:0 dw:0 dr:21992 al:0 bm:1 lo:0 pe:94 ua:40 ap:0 ep:1 wo:b oos:31900&lt;br /&gt;
        [========&amp;gt;...........] sync&amp;#039;ed: 46.2% (31900/53208)K&lt;br /&gt;
        finish: 0:00:02 speed: 10,652 (10,652) K/sec&lt;br /&gt;
&lt;br /&gt;
Une fois la réplication terminée, on se retrouve avec un device prêt à être utilisé sur le node master :&lt;br /&gt;
 [root@node1 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:77052 nr:204 dw:77256 dr:154710 al:62 bm:53 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
et un device prêt a répliquer sur le node secondaire :&lt;br /&gt;
 [root@node2 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:204 nr:77052 dw:77256 dr:272 al:9 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
Y&amp;#039;a plus qu&amp;#039;à !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
n.b. : l&amp;#039;ordre affiché du status &amp;lt;code&amp;gt;ro&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;ds&amp;lt;/code&amp;gt; corresponds à &amp;lt;code&amp;gt;node local/node distant&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;n.b.2 : le &amp;lt;code&amp;gt;0:&amp;lt;/code&amp;gt; corresponds au périphérique &amp;lt;code&amp;gt;/dev/drbd0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sources&lt;br /&gt;
&lt;br /&gt;
[http://www.drbd.org/]&lt;br /&gt;
[http://perso.ens-lyon.fr/sebastien.mei/wiki/doku.php?id=documentations:drbd]&lt;br /&gt;
[http://backdrift.org/live-migration-and-synchronous-replicated-storage-with-xen-drbd-and-lvm]&lt;/div&gt;</summary>
		<author><name>Sn4kY</name></author>
	</entry>
</feed>