Table des matières
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”
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:
- Bash: block-iscsimple
- Bash/Txt: block-iscsimple.txt
- Zippé: block-iscsimple.zip
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:
mdadm --build /dev/md/<LABEL> --level=1 --raid-devices=2 missing --write-mostly <DEVICE_ISCSI>
mdadm /dev/md/<LABEL> --add <DEVICE_DISK_LOCAL>
Arrêt:
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.