Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:mrwaloo:drbd [Le 16/01/2009, 18:35] MrWaloo |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===== Introduction ===== | ||
- | <note>Ce tutoriel est destiné à un **public averti**, certains détails //triviaux// ne sont pas détaillés...((je me répète ?))\\ | ||
- | Toutes les commandes sont lancées avec l'utilisateur ''**root**''.</note> | ||
- | |||
- | À 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 ((qui peut être sur un lvm ou sur un raid physique ou logiciel)) 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. | ||
- | |||
- | <note important>Cette page est une des étapes de l'utilisation conjointe de ''drbd'' avec [[heartbeat|heartbeat]] et [[samba|samba]]. C'est pourquoi certaines notes font référence à ces outils.</note> | ||
- | |||
- | ===== Installation sur Ubuntu Server ===== | ||
- | <note>Le module ''drbd'' est disponible avec le noyau ''server'' "de base" depuis Hardy Heron((à vrai dire je ne sais pas si c'était déjà le cas pour les versions précédentes)). 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.</note> | ||
- | |||
- | Mise à jour du système : | ||
- | * [[http://doc.ubuntu-fr.org/apt-get#mise_a_jour_depots|Mise à jour des dépots]] | ||
- | * [[http://doc.ubuntu-fr.org/apt-get#mise_a_jour_paquets|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'' : | ||
- | <code>cat /proc/drbd</code> | ||
- | <file>cat: /proc/drbd: Aucun fichier ou répertoire de ce type</file> | ||
- | <code>modprobe drbd | ||
- | cat /proc/drbd</code> | ||
- | <file>version: 8.2.6 (api:88/proto:86-88) | ||
- | GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by phil@fat-tyre, 2008-05-30 12:59:17</file> | ||
- | Sous Hardy Heron, la version du module et des outils est la 8.0.11. | ||
- | |||
- | [[http://doc.ubuntu-fr.org/apt-get#installation|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... | ||
- | |||
- | <note important>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.</note> | ||
- | |||
- | Finalisation pour faire en sorte que les outils ''heartbeat'' fonctionnent :((à faire après l'installation de heartbeat, évidemment)) | ||
- | <code>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</code> | ||
- | |||
- | ===== Configuration ===== | ||
- | 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**.((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]).)) Toutes les données de cette partition seront perdues. | ||
- | * l'adresse mail de l'administrateur à contacter((en supposant que les deux serveurs sachent envoyer un mail (ssmtp par exemple) )) est ''admin@domain.fr''((à personnaliser)). Le sujet commence par "SERVEUR" car c'est le nom netbios du serveur samba. | ||
- | |||
- | [[:tutoriel:comment_editer_un_fichier|Éditer le fichier]] **/etc/brbd.conf** : | ||
- | <file>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; | ||
- | } | ||
- | }</file> | ||
- | |||
- | ==== À faire sur chaque serveur en même temps ==== | ||
- | <note tip>Si vous vous êtes dit que vous alliez tout installer sur un serveur puis [[http://doc.ubuntu-fr.org/tutoriel/comment_sauvegarder_partition_avec_partimage|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.**</note> | ||
- | |||
- | <note>//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.</note> | ||
- | |||
- | Lancer : | ||
- | <code>drbdadm create-md r0</code> | ||
- | <file>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] </file> | ||
- | 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. | ||
- | <file>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</file> | ||
- | <note>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.</note> | ||
- | |||
- | Si le module ''drbd'' n'est pas chargé : | ||
- | <code>modprobe drbd</code> | ||
- | Puis : | ||
- | <code>drbdadm up r0</code> | ||
- | La commande suivante doit donner quelque chose du genre : | ||
- | <code># 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</code> | ||
- | 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 : | ||
- | <code>drbdadm state r0</code> | ||
- | <file>Secondary/Secondary</file> | ||
- | |||
- | ==== À 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 //automagiquement//((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.)).\\ | ||
- | Lancer la commande : | ||
- | <code>drbdadm -- --overwrite-data-of-peer primary r0 | ||
- | |||
- | cat /proc/drbd</code> | ||
- | <file>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</file> | ||
- | 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 : | ||
- | <file> syncer { rate 2M; }</file> | ||
- | par | ||
- | <file> syncer { rate 100M; }</file> | ||
- | Pour prendre la modification en compte : | ||
- | <code># drbdadm adjust r0</code> | ||
- | Le débit ira donc aussi vite qu'il peut. D'ailleurs cette valeur est un débit en MB/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.\\ | ||
- | Il est tout à fait possible (et conseillé, mais je n'ai pas encore 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 **uniquement**((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.)). | ||
- | |||
- | Une fois les serveurs synchronisés, | ||
- | <code>cat /proc/drbd</code> | ||
- | <file>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</file> | ||
- | il est temps de formater la partition ''drbd'' (vous avez, bien évidemment pensé à revenir à un débit de synchronisation normal) : | ||
- | <code>mkfs.ext3 /dev/drbd0</code> | ||
- | et de monter votre partition. Le montage de la partition doit utiliser **/dev/drbd0**. | ||
- | <note important> | ||
- | Dans le cas de l'utilisation de ''drbd'' avec ''heartbeat'' et ''samba'', le montage du disque est géré par ''heartbeat''.</note> | ||
- | |||
- | ---- | ||