ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


blog:2014:10:07:xen_et_drbd

Xen et DRBD

Dans la série: “migration live xen” …

Et si on essayait plutôt “drbd” ?

~~READMORE~~

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 .

blog/2014/10/07/xen_et_drbd.txt · Dernière modification : 2014/10/07 12:31 de thierry