Table des matières
Xen et DRBD
Package
# aptitude install drbd-utils
On note qu'un scripte qui va nous être bien utile apparaît là: /etc/xen/scripts/block-drbd
Configuration du module
Avant qu'il ne soit chargé…
# lsmod | grep drbd
Si rien ne s'affiche, il n'est pas chargé.
Créer un fichier dans /etc/modprobe.d/
, nommé (par exemple) drbd.conf
, et contenant:
options drbd disable_sendpage=1
Source: http://www.drbd.org/users-guide-8.3/s-xen-drbd-mod-params.html
Configuration drbd
Global
Dans “/etc/drbd.d/global_common.conf
” , j'ajoute:
# TJ -------------------------------- # Xen + drbd global { usage-count no; minor-count 128; dialog-refresh 0; } common { protocol C; startup { wfc-timeout 15; degr-wfc-timeout 60; } handlers { # Notification only: pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh"; pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh"; local-io-error "/usr/lib/drbd/notify-io-error.sh"; split-brain "/usr/lib/drbd/notify-split-brain.sh root"; out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; } syncer { rate 10M; verify-alg sha1; csums-alg sha1; } disk { # Recommended: on-io-error detach; # LVM Only !: use-bmbv; no-disk-barrier; # With Battery-Backed Write Cache Only: no-disk-flushes; no-md-flushes; } net { after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } }
Pré-requis: les meta-data
On va installer les “meta-data” sur un volume a part, en “external”.
C'est quoi les “meta-data” ?
Ce sont des données utilisés par “drbd
” pour connaitre l'état des disks…
Ces “meta-data” peuvent être sur le disk même, en “internal”, soit sur un autre disk dédié, en “external”.
Le problème (pour moi), c'est que l'“internal” altère le disk en placant les meta-data à la fin du disk (ou au début!??), rendant la maintenance un peu plus difficile, notamment lorsqu'on veut mounter un disk directement, sans passer par “drbd
”.
Pour avoir un volume/disk dédié au “meta-data”, il suffit de le créer et éventuellement de le remplir de “zéro”.
# lvcreate -L 1G -n drbd-meta-data vg0 # dd if=/dev/zero of=/dev/vg0/drbd-meta-data
A savoir: chaque ressource drbd
occupe 128MB pour ses méta-data. (à vérifier, notamment pour les disks de plus de 2To)
Par "resource"
Chaque disk est déclaré comme étant une “resource” .
Préparer les disks
Sur chaque Dom0
, préparer.
# lvcreate -L 5G -n my-domu-disk vg0 # lvcreate -L 1G -n my-domu-swap vg0
Conf
Dans “/etc/drbd.d/my-domu.res
” :
resource my-domu-disk { net { allow-two-primaries; cram-hmac-alg sha1; shared-secret "secret"; # not for production... #data-integrity-alg crc32c; } on dom0_1 { device minor 0; address 192.168.0.25:7700; disk /dev/vg0/my-domu-disk; meta-disk /dev/vg0/drbd-meta-data[0]; } on dom0_2 { device minor 0; address 192.168.0.54:7700; disk /dev/vg0/my-domu-disk; meta-disk /dev/vg0/drbd-meta-data[0]; } } resource my-domu-swap { syncer { after "my-domu-disk"; } net { allow-two-primaries; cram-hmac-alg sha1; shared-secret "secret"; # not for production... #data-integrity-alg crc32c; } on dom0_1 { device minor 1; address 192.168.0.25:7701; disk /dev/vg0/my-domu-swap; meta-disk /dev/vg0/drbd-meta-data[1]; } on dom0_2 { device minor 1; address 192.168.0.54:7701; disk /dev/vg0/my-domu-swap; meta-disk /dev/vg0/drbd-meta-data[1]; } }
Pour simplifier la configuration, j'affecte le même nombre (“<X>
”) pour:
Le “device minor” <X> | qui correspond au device “/dev/drbd<X> ” |
Le port associé à l'adresse IP | Exemple: 77<X> |
Le slot réservé au meta-data | Exemple: meta-disk /dev/vg0/drbd-meta-data[<X>] |
Evidement, il faut utiliser un “<X>
” libre.
On utilisera la commande “drbd-overview
” ou “cat /proc/drbd
” ou “ls -l /dev/drbd*
” pour voir les “device” libre.
Tester
Tester a coup de :
# drbdadm -d -- adjust my-domu-disk
et
# drbdadm -d -- adjust my-domu-swap
S'il n'y a pas d'erreur, la première fois, il faut d'abord créer les méta-data :
# drbdadm -- create-md my-domu-disk # drbdadm -- create-md my-domu-swap
Ensuite, on peut faire, enfin:
# drbdadm -- adjust my-domu-disk # drbdadm -- adjust my-domu-swap
On peut regarder dans /proc/drbd
ou utiliser la commande drbd-overview
pour voir l'état de ces ressources.
La première fois: |
La première fois, on aura:
# /etc/init.d/drbd status drbd not loaded
On fait:
# /etc/init.d/drbd start
… et comme la conf est bien, ça marche.
"data-integrity-alg"
C'est bien pour tester que le calcul du CRC basé simplement sur la couche “tcp/ip” est suffisant (parce qu'il existerait de rare situation où la couche réseau matériel ne ferait pas correctement son calcul…) .
Si on n'a pas rapidement un paquet d'alarme dans les logs, alors il faut mieux désactiver cette option, sinon, vous aurez, de temps en temps, des fausses et intrigantes “erreurs” dans les logs.
"dual-primary"
Pour utiliser la “live migration”, il faut activer le “dual-primary”.
“dual-primary” implique que des écritures simultanés sont possibles, ce qu'il est fortement déconseillé de mettre en pratique. |
Configuration du DomU
Associer un disk “drbd” à un DomU.
Exemple dans la conf de “my-domu” :
root = '/dev/xvda2 ro' disk = [ 'drbd:my-domu-disk,xvda2,w', 'drbd:my-domu-swap,xvda1,w', ]
Migration
Exemple, pour un DomU nommé “my-domu” :
# xm migrate my-domu dom0-beta --live
Et hop. (sous réserve que “dom0-beta” est prêt !)
Pour le reste, revoir par là .