Différences entre les pages « Serveur Dédié » et « DRBD »
imported>SylvainBeucler |
imported>SylvainBeucler |
||
Ligne 1 : | Ligne 1 : | ||
− | + | Distributed Replicated Block Device | |
− | + | 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> | ||
− | + | == 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> | ||
+ | #!/bin/bash | ||
+ | if [ "$1" = "start" ]; then mount -a; fi | ||
+ | </pre> | ||
+ | |||
+ | == Liens == | ||
+ | |||
+ | * [http://www.drbd.org/users-guide/ The DRBD User's Guide] | ||
+ | * [[LVM]] |
Version du 31 octobre 2009 à 14:08
Distributed Replicated Block Device
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):
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]; } }
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é ici, s'il y a un changement dans une section disk
, 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 adjust
; 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
+ 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
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 -o errors=remount-ro
, 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 local-io-error
.
Montage au démarrage
- Dans
/etc/fstab
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 à
0
) 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:
#!/bin/bash if [ "$1" = "start" ]; then mount -a; fi