Ceci est une ancienne révision du document !


Ce tutoriel est destiné à un public averti, certains détails triviaux ne sont pas détaillés…1)
Toutes les commandes sont lancées avec l'utilisateur root.

À l'heure où les serveurs d'entreprises doivent stocker un volume croissant de données et assurer une haute disponibilité, il est nécessaire d'imaginer des systèmes de mirroring (miroir) autres que simplement sur des disques durs.

La redondance de disques durs (RAID-1, RAID-5) permet déjà d'avoir une bonne résistance aux pannes d'un disque (ou plusieurs si on est en RAID-5). Cependant, si c'est la machine qui tombe (le processeur, l'alimentation, le contrôleur de disque, etc.), on n'a aucun moyen pour relancer le tout rapidement sans perte de données.

drbd permet de mettre en œuvre une solution de RAID-1 au travers du réseau. C'est-à-dire que sur deux serveurs, on a une partition 2) par serveur qui est à tout moment une copie exacte d'une partition de l'autre serveur. C'est un mirroring (miroir) de partitions à travers une interface réseau.

C'est une solution qui permet également d'utiliser deux PC au lieu d'un serveur afin de faire des économies, aussi bien pour l'achat initial que pour ==== l'achat de disques supplémentaires (en remplacement ou en ajout) par la suite. Dans la mesure où ce cluster est utilisé pour un partage samba, ce type de matériel est tout à fait convenable pour une utilisation avec jusqu'à une vingtaine de clients.

Cette page est une des étapes de l'utilisation conjointe de drbd avec heartbeat et samba. C'est pourquoi certaines notes font référence à ces outils.
Le module drbd est disponible avec le noyau server "de base" depuis Hardy Heron3). 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 :

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…

Il faut que le service drbd démarre, sinon le script de démarrage de drbd de heartbeat ne fonctionne pas. Il faut donc lancer la commande
# update-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 :4)

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

Postulat de départ :

  • les deux serveurs ont les adresses IP 192.168.214.10 et 192.168.214.11
  • les 2 serveurs se nomment serv1 et serv2, serv1 étant le serveur primaire
  • sur chacun des deux serveurs, la partition /dev/sda6 est celle que drbd duplique. Il s'agit d'une partition non-formatée.5) Toutes les données de cette partition seront perdues.
  • l'adresse mail de l'administrateur à contacter6) est admin@domain.fr7). Le sujet commence par "SERVEUR" car c'est le nom netbios du serveur samba.

Éditer le fichier /etc/brbd.conf :

global {
  usage-count no;
}

common {
  protocol C;
  syncer { rate 2M; }
  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

Si vous vous êtes dit que vous alliez tout installer sur un serveur puis cloner le premier serveur pour en obtenir un second identique, c'est là qu'il faut que vous sachiez que les instructions qui suivent doivent être lancées sur chacun des 2 serveurs, à moins de n'utiliser 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.
En même temps signifie simplement que la commande doit être lancée sur les 2 serveurs et que la suivante ne peut être lancée sur quelque serveur que ce soit que si la précédente a terminé sans erreur sur les 2 serveurs.

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
Il se peut qu'un message disant que cette partition contient des données vous empêche de continuer, il faut alors lancer la commande
# 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 comme primaire, le serveur secondaire se synchronisera automagiquement8).
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 :

  syncer { rate 2M; }

par

  syncer { 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.

Dans le cas de l'utilisation de drbd avec heartbeat et samba, le montage du disque est géré par heartbeat.

La valeur du paramètre rate est exprimée en Mo/sec, si vous êtes en réseau 100MB, n'allez pas au dessus de 8M, puisqu'il s'agit (environ) de la valeur maximale de débit. La valeur 2M correspond au quart de ce débit afin de laisser de la bande passante aux utilisateurs.

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 uniquement9).

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.



1)
je me répète ?
2)
qui peut être sur un lvm ou sur un raid physique ou logiciel
3)
à vrai dire je ne sais pas si c'était déjà le cas pour les versions précédentes
4)
à faire après l'installation de heartbeat, évidemment
5)
si vous ne pouvez pas faire autrement que de réutiliser une partition ayant été formatée et ayant contenu des données, il faudra utiliser la commande # shred -zvf -n 1 /dev/sda6 afin de vider (remplir avec des zéros) la partition. Attention, l'opération peut prendre du temps, mais elle peut être stoppée après les 10 premiers pourcents ([CTRL]+[C]).
6)
en supposant que les deux serveurs sachent envoyer un mail (ssmtp par exemple)
7)
à personnaliser
8)
oui je sais, ce terme n'est pas de moi, il est souvent utilisé dans les documentations Debian et dérivés, d'où sa place ici.
9)
il ne faut pas faire passer le signe de vie heartbeat par cette connexion, car le signe de vie doit passer par le lien que les utilisateurs utilisent pour vérifier son bon fonctionnement.
  • utilisateurs/mrwaloo/drbd.1232128313.txt.gz
  • Dernière modification: Le 18/04/2011, 14:42
  • (modification externe)