ReLoad

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

Outils pour utilisateurs

Outils du site


blog:2014:07:02:iscsimple_xen_iscsi_et_raid1

iscsimple: XEN, iSCSI et RAID1

iSCSI c'est bien, mais encore faut-il avoir un très bon réseau et du très bon matériel.

Et puis, il faut que le “target” iSCSI soit stable, ce qui n'est pas le cas de “iscsitarget” de Debian, puisqu'on doit le redémarrer a chaque modification de la configuration, et que le redémarrage n'est pas sans poser des problèmes !!!

Bref: j'ai moyennement confiance en ma petite infrastructure iSCSI, alors que son potentiel est énorme lorsqu'il est couplé avec Xen .

Donc: j'ai modifié mon précédent scripte “iscsimple” afin qu'il puisse importer un disk iSCSI et un disk local (LVM) en RAID1. Les avantages:

  • Migration toujours possible via iSCSI
  • Protection des incidents iSCSI grâce au miroir en local

~~READMORE~~ :!: L'environnement dans lequel tout cela est mis en place:

  • Debian Wheezy
  • XEN 4 (des packages standard Wheezy)
  • LVM

mdadm

Si ce n'est pas déjà le cas, il faut installer le package “mdadm”, car c'est grâce a “mdadm” qu'on va gérer les raids.

# aptitude install mdadm

Répondre a quelques questions:

  • Ensembles MD requis par le système de fichiers racine : “none”
  • Faut-il démarrer automatiquement les ensembles RAID ? : “No”
:!: FIXME le module “mdadm” est automatiquement intégré dans le module de boot du noyau.
Certains DomU peuvent ne plus démarrer !

Scripte: iscsimple pour RAID1

Il fait la même chose que la version précédente , mais ajoute le support de RAID1 avec une petite modification dans l'écriture du paramètre “iscsi” dans la configuration du DomU.

Télécharger le script

Script:

Un petit fichier pour compléter la conf (voir explication plus loin) :

Nouvelle syntaxe

simple

Pour le support du “iscsi” tout seul, pas de changement:

  • {lunX@}iqn....

Exemples:

  • iqn.2014-06.fr.thierry-jaouen.local:partage-sn-00000001
  • lun5@iqn.2014-06.fr.thierry-jaouen.local:partage-sn-00000001

Soit in-vivo dans un DomU:

  • iscsimple:iqn.2014-06.fr.thierry-jaouen.local:partage-sn-00000001,xvda2,w
  • iscsimple:lun5@iqn.2014-06.fr.thierry-jaouen.local:partage-sn-00000001,xvda2,w

Raid 1

Pour le support du “iscsi” avec le “RAID 1” , il faut ajouter, après le “iqn”, le nom (“LABEL”) du RAID, précédé du signe “+”.
Ce nom de RAID doit être unique et composé de lettres alphanumériques et/ou des symboles “-” et “_”.

La syntaxe:

  • {lunX@}iqn....+LABEL

Mais cela n'est pas tout: il faut aussi spécifier le “device” du disk local. Il doit être spécifié dans le fichier: block-iscsimple-tab.conf .
Dans ce fichier, on aura plusieurs lignes séparé en 2 colonnes:
La première colonne est le “LABEL”, et la deuxième le “device” pointant le disk local a utiliser pour compléter le RAID1.

Exemple de contenu:

# --------------------------------
# LABEL         DEVICE
# --------------------------------
my-vm-disk         /dev/vg0/my-vm-disk
my-vm-swap         /dev/vg0/my-vm-swap
# --------------------------------
# EOF

Ce petit fichier va permettre de séparer la configuration des disks locaux des paramètres du DomU: Concrètement, chaque serveur Xen pourra disposer d'une autre configuration de ses disks…

Comment ça marche

On écrase le disk local

Le RAID sera créé en donnant toujours la priorité au disk iSCSI.
Cela signifie qu'au moment du montage du RAID, le contenu du disk iSCSI écrasera le contenu sur le disk local.

Donc:

:!: Au moment du montage : le RAID est synchronisé en copiant le disk iSCSI sur le disk local.

--write-mostly

Dans ce RAID 1, ce mirroir avec 2 disks, la priorité des accès en lecture/ecriture est donné au disk local, et non pas au disk iSCSI.
Ce qui est plutôt souhaitable, surtout si le réseau n'est pas très fiable.

metadata

Il n'y a pas de metadata: le RAID est monté à la volée et aucune information n'est enregistré sur les disks, et les partitions ne sont pas altérées (hors la synchronisation).

Pour être clair: ce ne sont pas des partitions RAID.
Les partitions ne changent pas de nature et peuvent être montées normalement et indépendamment, comme d'habitude.

A coups de commandes "mdadm"

En gros, voici les actions effectués avec mdadm :

Montage:

  1. mdadm --build /dev/md/<LABEL> --level=1 --raid-devices=2 missing --write-mostly <DEVICE_ISCSI>
  2. mdadm /dev/md/<LABEL> --add <DEVICE_DISK_LOCAL>

Arrêt:

  1. mdadm --stop /dev/md/<LABEL>

MISSING

Une dernière chose: on peut monter un RAID1 avec 1 seul disk.
L’intérêt est très limité mais il suffit de faire commencer le nom d'un des disks (y compris le disk iSCSI) par le mot en majuscule: MISSING

Évidement, on ne peut pas retirer les 2 disks, et il faut mieux éviter de faire ça pour le disk iSCSI (sinon, vos migrations sont en dangers).

Test en réel

Soit une machine virtuelle nommée “my-vm” ayant déjà les disks iSCSI suivant:

  • iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001 avec le “Lun 0”
  • iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001 avec le “Lun 1”

On suppose ces disks sains: Le premier pour le système et le deuxième pour le swap.

iscsi simple

En iscsi tout seul, voici la configuration des disks, dans /etc/xen/my-vm.cfg :

root   = '/dev/xvda2 ro'
disk   = [
           'iscsimple:lun0@iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001,xvda2,w',
           'iscsimple:lun1@iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001,xvda1,w'
         ]

iscsi avec RAID 1

Pour ajouter le support du RAID 1, il faut d'abord créer les disks locaux (a moins de jouer avec “MISSING” comme vu plus haut).

:!: On parle bien 2 RAID 1 en fait: l'un pour le système, l'autre pour le swap

On suppose les tailles connus: 5G pour le système et 1G pour le swap.

# lvcreate -L 5G -n my-vm-disk vg0
# lvcreate -L 1G -n my-vm-swap vg0

Maintenant, on déclare l'association entre le nom des RAIDs et les disks locaux, en éditant le fichier /etc/xen/scripts/block-iscsimple-tab.conf comme suit:

my-vm-disk       /dev/vg0/my-vm-disk
my-vm-swap       /dev/vg0/my-vm-swap

Maintenant, on peut compléter la configuration du DomU dans le fichier /etc/xen/my-vm.cfg comme suit:

root   = '/dev/xvda2 ro'
disk   = [
           'iscsimple:lun0@iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001+my-vm-disk,xvda2,w',
           'iscsimple:lun1@iqn.2014-06.fr.thierry-jaouen.local.filer1:my-vm-sn-00000001+my-vm-swap,xvda1,w'
         ]

Lorsqu'on démarre cette machine virtuelle, si tout va bien, on peut suivre l'état du RAID comme ça:

# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 dm-8[2] sde[1](W)
      1048576 blocks super non-persistent [2/1] [_U]
      [====>................]  recovery = 20.4% (214976/1048576) finish=0.7min speed=19543K/sec
              
md127 : active raid1 dm-7[2] sdd[1](W)
      5242880 blocks super non-persistent [2/1] [_U]
      [>....................]  recovery =  4.8% (253376/5242880) finish=3.9min speed=21114K/sec
      
unused devices: <none>

Après quelques secondes… les RAIDs sont synchronisés.

Tips

LVM et "mpath ..."

Il y a un petit glitch avec LVM , dés que des RAID sont mis en place avec “mdadm”.

Par exemple:

# pvs
mpath major 9 is not dm major 254.
mpath major 9 is not dm major 254.
PV         VG   Fmt  Attr PSize   PFree 
/dev/sda2  vg0  lvm2 a--  935,94g 689,12g

Pour faire disparaître cette petite erreur, il suffit de forcer LVM a ne voir que le seul disk avec une partition “LVM”. Pour moi, c'est /dev/sda2 .

Donc, /etc/lvm/lvm.conf , je fais en sorte d'avoir:

# TJ ----------------------
#filter = [ "a/.*/" ]
filter = [ "a|^/dev/sda2$|", "r/.*/" ]
# -------------------------

Et puis:

# /etc/init.d/lvm restart

Voila.

blog/2014/07/02/iscsimple_xen_iscsi_et_raid1.txt · Dernière modification: 2014/07/02 11:42 par thierry