|
imported>SylvainBeucler |
Ligne 1 : |
Ligne 1 : |
− | Distributed Replicated Block Device
| + | #REDIRECT [[Acer Aspire 4810T]] |
− | | |
− | apt-get install drbd8-utils drbd8-modules-2.6-686
| |
− | # ou variante:
| |
− | apt-get install drbd8-utils drbd8-modules-2.6-vserver-686
| |
− | | |
− | == Configuration simple ==
| |
− | | |
− | Primary/Secondary (il existe aussi Primary/Primary):
| |
− | | |
− | <pre>
| |
− | global {
| |
− | usage-count yes;
| |
− | }
| |
− | common {
| |
− | protocol C;
| |
− | syncer { rate 40M; }
| |
− | disk { on-io-error detach; }
| |
− | startup {
| |
− | wfc-timeout 15;
| |
− | degr-wfc-timeout 15;
| |
− | #outdated-wfc-timeout 15; # not in DRBD 8.0/Lenny
| |
− | }
| |
− | }
| |
− | resource r0 {
| |
− | startup { become-primary-on VM1; }
| |
− | on VM1 {
| |
− | device /dev/drbd0;
| |
− | disk /dev/VG0/test;
| |
− | address 192.168.101.115:7789;
| |
− | meta-disk /dev/VG0/test-drbdmeta[0];
| |
− | }
| |
− | on VM2 {
| |
− | device /dev/drbd0;
| |
− | disk /dev/VG0/test;
| |
− | address 192.168.101.118:7789;
| |
− | meta-disk /dev/VG0/test-drbdmeta[0];
| |
− | }
| |
− | }
| |
− | </pre>
| |
− | | |
− | == Méta-données ==
| |
− | | |
− | Si vous utilisez des méta-données externes, vous aurez [http://www.drbd.org/users-guide/ch-internals.html#s-meta-data-size calculé] que le volume dédié n'a pas besoin d'être bien grand.
| |
− | | |
− | Cependant, il faut noter que le volume doit être au minimum to 128Mo très précisément, même pour le plus petit volume DRBD.
| |
− | | |
− | == DRBD par dessus LVM ==
| |
− | | |
− | Snapshots LVM d'un volume [[DRBD]]:
| |
− | * http://thread.gmane.org/gmane.comp.linux.drbd/6175 : en 2004
| |
− | * http://www.mail-archive.com/drbd-user@lists.linbit.com/msg00277.html : en 2009
| |
− | | |
− | Ce que je comprend:
| |
− | * léger risque d'incohérence du snapshot
| |
− | * pas de risque d'incohérence des données maîtres
| |
− | | |
− | En pratique, pour avoir un backup cohérent à partir du noeud secondaire:
| |
− | lvcreate -s VG0/test -n test-snapshot -L 5G
| |
− | mount /dev/VG0/test-snapshot -o ro /mnt/snapshots/test # ro par parano
| |
− | # backup avec rsync...
| |
− | umount /mnt/snapshots/test
| |
− | lvremove VG0/test-snapshot
| |
− | | |
− | == Recharger la configuration ==
| |
− | | |
− | Utiliser:
| |
− | drbdadm adjust r0
| |
− | | |
− | Attention: comme indiqué [http://www.drbd.org/users-guide/s-configure-io-error-behavior.html ici], s'il y a un changement ''dans une section <code>disk</code>'', les versions < 8.3.1 lancent une resynchronization complète. Pour éviter cela, passer le primaire en secondaire (donc les deux noeuds en secondaire) avant de lancer <code>adjust</code>; cela implique de démonter toutes les volumes DRBD actifs.
| |
− | | |
− | == Simuler des erreurs d'entrées/sorties ==
| |
− | | |
− | Cf. http://lists.linbit.com/pipermail/drbd-dev/2009-July/001073.html
| |
− | | |
− | <pre>
| |
− | + The actual simulation of IO errors is done by writing 3 values to
| |
− | + /sys/module/drbd/parameters/
| |
− | +
| |
− | + enable_faults: bitmask of...
| |
− | + 1 meta data write
| |
− | + 2 read
| |
− | + 4 resync data write
| |
− | + 8 read
| |
− | + 16 data write
| |
− | + 32 data read
| |
− | + 64 read ahead
| |
− | + 128 kmalloc of bitmap
| |
− | + 256 allocation of EE (epoch_entries)
| |
− | +
| |
− | + fault_devs: bitmask of minor numbers
| |
− | + fault_rate: frequency in percent
| |
− | +
| |
− | + Example: Simulate data write errors on /dev/drbd0 with a probability of 5%.
| |
− | + echo 16 > /sys/module/drbd/parameters/enable_faults
| |
− | + echo 1 > /sys/module/drbd/parameters/fault_devs
| |
− | + echo 5 > /sys/module/drbd/parameters/fault_rate
| |
− | </pre>
| |
− | | |
− | L'exemple occasionne une erreur disque au bout de quelques accès disque.
| |
− | drbd0: Notified peer that my disk is broken
| |
− | | |
− | == Gérer des erreurs d'entrées/sorties ==
| |
− | | |
− | Cas 1 (configuration par défaut, mais n'est plus recommandée):
| |
− | | |
− | disk { on-io-error pass_on; }
| |
− | | |
− | Dans ce cas, les erreurs sont passées au système de fichiers, qui habituellement va se remonter en lecture seule. D'après mes tests, cependant, même avec <code>-o errors=remount-ro</code>, le système de fichiers s'est corrompu avec moult messages de drbd0 mais ''sans'' que le système de fichiers ne passe en lecture seule.
| |
− | | |
− | Cas 2:
| |
− | | |
− | disk { on-io-error detach; }
| |
− | | |
− | Dans ce cas le disque continue de fonctionner de manière transparente sur le secondaire, en passant par le réseau (mode "diskless").
| |
− | | |
− | Cas 3:
| |
− | | |
− | disk { on-io-error call-local-io-error; }
| |
− | | |
− | Dans ce cas DRBD appelle un script spécifié via <code>local-io-error</code>.
| |
− | | |
− | == Montage au démarrage ==
| |
− | | |
− | * Dans <code>/etc/fstab</code> faire attention:
| |
− | ** de bien faire référence au volume DRBD (pas au volume physique)
| |
− | ** de ne pas demander un fsck (mettre les deux derniers champs à <code>0</code>) car drbd n'est pas activé au moment où fstab est utilisé, ce qui va causerait une erreur
| |
− | * Dans l'ordre de démarrage, positionner les services dépendant de DRBD (ex: vserver) après lui
| |
− | * Rajouter un script au démarrage pour finir de monter les volumes DRBD, par exemple:
| |
− | <pre>
| |
− | cat <<EOF > /etc/init.d/drbdmount
| |
− | #!/bin/bash
| |
− | if [ "$1" = "start" ]; then mount -a; fi
| |
− | EOF
| |
− | chmod 755 /etc/init.d/drbdmount
| |
− | update-rc.d drbdmount defaults 19
| |
− | </pre>
| |
− | | |
− | == Supervision ==
| |
− | | |
− | La supervision semble n'être prévue que par le biais de Heartbeat/Pacemaker. Quelques événements peuvent être notifiés par l'intermédiaires des ''handlers'', mais pas tous.
| |
− | | |
− | La commande <code>drbdsetup /dev/drbd0 events</code> permet de récupérer de manière succinte tous les événements qui se produisent.
| |
− | On peut l'utiliser de manière très rudimentaire dans le script suivant qui tournera en tâche de fond:
| |
− | | |
− | <pre>
| |
− | #!/bin/bash
| |
− | for drbdX in /dev/drbd*; do
| |
− | (drbdsetup $drbdX events | while read line; do echo $line | mail -s "$(hostname) $drbdX" you@domain.tld; done)&
| |
− | sleep 1
| |
− | done
| |
− | </pre>
| |
− | | |
− | Faire un <code>killall drbdsetup</code> pour l'arrêter.
| |
− | | |
− | == Liens ==
| |
− | | |
− | * [http://www.drbd.org/users-guide/ The DRBD User's Guide]
| |
− | * [[LVM]]
| |