Ceci est une ancienne révision du document !
Mirroring sur deux serveurs : drbd
Installation sur Ubuntu Server
drbd
est disponible avec le noyau server
"de base" depuis Hardy Heron1). Cependant, afin d'avoir un système récent avec un minimum de bug et de faille de sécurité, on passera au noyau server
le plus récent.
Mise à jour du système :
- Mise à jour des paquets (dist-upgrade)
Passer à la version du noyau la plus récente. Redémarrer.
Vérification de la présence du module drbd
:
cat /proc/drbd
cat: /proc/drbd: Aucun fichier ou répertoire de ce type
modprobe drbd cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17
Sous Hardy Heron, la version du module et des outils est la 8.0.11.
Installation de drbd8-utils
version idem à la version du module sans quoi le fonctionnement correct n'est pas garanti.
Un paquet suggéré : heartbeat
: tout le monde est sur la même longueur d'onde…
drbd
démarre, sinon le script de démarrage de drbd
de heartbeat
ne fonctionne pas. Il faut donc lancer la commandeupdate-rc.d drbd defaults 70
ou simplement copier le lien qui se trouve dans /etc/rc3.d vers /etc/rc2.d si ça ne fonctionne pas.
Finalisation pour faire en sorte que les outils heartbeat
fonctionnent :2)
chgrp haclient /sbin/drbdsetup chmod o-x /sbin/drbdsetup chmod u+s /sbin/drbdsetup chgrp haclient /sbin/drbdmeta chmod o-x /sbin/drbdmeta chmod u+s /sbin/drbdmeta
Configuration
Éditer le fichier /etc/drbd.conf :
global { usage-count no; } common { protocol C; syncer { rate 3M; verify-alg sha1; } handlers { pri-lost-after-sb "reboot -f"; pri-lost "echo Déconnection des serveurs, vérifier les logs | mail -s 'SERVEUR: Alerte DRBD' admin@domain.fr"; out-of-sync "echo Désynchronisation des serveurs, vérifier les logs | mail -s 'SERVEUR: Alerte DRBD' admin@domain.fr"; pri-on-incon-degr "reboot -f"; outdate-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5"; local-io-error "echo o > /proc/sysrq-trigger ; halt -f"; } } resource r0 { device /dev/drbd0; disk /dev/sda6; meta-disk internal; disk { on-io-error detach; } startup { wfc-timeout 60; degr-wfc-timeout 30; become-primary-on serv1; } net { after-sb-0pri discard-older-primary; after-sb-1pri call-pri-lost-after-sb; after-sb-2pri call-pri-lost-after-sb; } on serv1 { address 192.168.214.10:7788; } on serv2 { address 192.168.214.11:7788; } }
À faire sur chaque serveur en même temps

dd
pour l'ensemble du/des disque(s) dur(s). Ce qui peut prendre pas mal de temps…Sinon, il faut répéter tout ce qui vient d'être fait sur le second serveur avant d'aller plus loin.
Lancer :
drbdadm create-md r0
v08 Magic number not found md_offset 1093922816 al_offset 1093890048 bm_offset 1093853184 Found some data ==> This might destroy existing data! <== Do you want to proceed? [need to type 'yes' to confirm]
Taper yes
. Il est possible qu'une autre question demandant confirmation de destruction des données de la partition soit posée, répondez yes
si vous êtes sur de ce que vous faites.
v07 Magic number not found v07 Magic number not found v08 Magic number not found Writing meta data... initialising activity log NOT initialized bitmap New drbd meta data block sucessfully created. success
shred -zvf -n 1 /dev/sda6
afin de remplir la partition avec des zéros, puis de relancer la commande.
Si le module drbd
n'est pas chargé :
modprobe drbd
Puis :
drbdadm up r0
La commande suivante doit donner quelque chose du genre :
# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17 0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r--- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149134808
Puisque drbd
est lancé mais aucun serveur primaire n'est déclaré. On le voit car après st:
, il est indiqué Secondary/Secondary
ce qui signifie que le nœud sur lequel la commande est exécuté est secondaire (le premier avant le /
) et que l'autre l'est aussi (le second après le /
).
Pour ne connaître que l'état de la grappe drbd
, la commande suivante suffit :
drbdadm state r0
Secondary/Secondary
À ne faire que sur le serveur primaire
Il s'agit maintenant de déclarer un des 2 serveurs comm
primaire, le serveur secondaire se synchronisera automagiquement3).
Lancer la commande :
drbdadm -- --overwrite-data-of-peer primary r0 cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:2240 nr:0 dw:0 dr:2240 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149132568 [>....................] sync'ed: 0.1% (145637/145639)M finish: 17:15:38 speed: 2,240 (2,240) K/sec
On voit que le serveur secondaire se synchronise avec une superbe barre de progression.
Le temps indiqué après finish:
est le temps indicatif restant avant la fin de la première synchronisation. Pour diminuer ce temps, il est vivement conseillé de débrider le taux de transfert de la synchronisation en modifiant provisoirement la configuration de drbd
. Dans le fichier /etc/drbd.conf, remplacer :
rate 3M;
par
rate 100M;
Pour prendre la modification en compte :
drbdadm adjust r0
Le débit ira donc aussi vite qu'il peut. Lire le chapitre concernant les débits à la fin de ce document.
Une fois les serveurs synchronisés,
cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88) GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:2240 nr:0 dw:0 dr:2240 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:149132568
il est temps de formater la partition drbd
(vous avez, bien évidemment pensé à revenir à un débit de synchronisation normal) :
mkfs.ext3 /dev/drbd0
et de monter votre partition. Le montage de la partition doit utiliser /dev/drbd0.
drbd
avec heartbeat
et samba
, le montage du disque est géré par heartbeat
.
Au sujet de la gestion de la bande passante
La valeur du paramètre rate
est exprimée en Mo/sec (d'où le M
), si vous êtes en réseau 100Mbit/s, n'allez pas au dessus de 9M
, puisqu'il s'agit (environ) de la valeur maximale de débit. La valeur 3M
correspond au tiers de ce débit afin de laisser de la bande passante aux utilisateurs. Le tiers de la bande passante est une valeur conseillée sur le site de drbd
.
Si vos serveurs ont une carte réseau Gigabit, vous pouvez optimiser les débits de deux manières :
- Séparation physique des flux
- Sous-réseau Gigabit dédié
Séparation physique des flux
Il est tout à fait possible (et conseillé, mais je n'ai pas mis cette solution en place) d'avoir 2 cartes réseau sur les serveurs :
- une pour la connexion au réseau : cette connexion sert aux utilisateurs pour accéder aux données,
- une pour une connexion directe (via câble croisé) entre les serveurs : celle-ci pour la synchronisation des données uniquement4).
Sous-réseau Gigabit dédié
Dans le cas où le réseau utilisateur est en 100Mbit/s, il est possible d'utiliser un petit switch Gigabit (de 3 ports minimum) :
- Port 1 : liaison avec le switch du réseau utilisateur (lien 100Mbit/s)
- Port 2 : liaison avec un serveur (lien Gigabit)
- Port 3 : liaison avec l'autre serveur (lien Gigabit)
De cette manière, la synchronisation entre les deux serveurs se fait via un lien Gigabit, et les utilisateurs ne sont pas pénalisés. La valeur du débit peut alors être fixée à 10M
.
heartbeat
par cette connexion, car le signe de vie doit passer par le lien que les utilisateurs utilisent pour vérifier son bon fonctionnement.