Introduction au RAID sous Linux
Le RAID, Redundant Arrays of Inexpensive Disks est une technologie permettant l’usage de plusieurs disques simultanément. Il peut optimiser les performances, gérer la tolérance de panne ou les deux à la fois. Ce tutoriel introduit une chaine de tutoriaux sur la HA (Hight Availability), Haute disponibilité. Nous débutons par la mise en place de RAID, pour ensuite voir les clusters et enfin le RAID over IP avec DRBD.
I. Retour rapide sur les types de RAID
Rapide pourquoi ? Parce que le texte ci-dessous est un copier/coller de l’article sur le NAS et que Wikipedia dispose d’un très bon article sur les technologies RAID.
- JSOB : pour ‘n’ disques physiques le système ne voit qu’un disque logique. Les disques physiques sont regroupés en une grappe, les données sont écrites au fur et à mesure que les disques se remplissent. Une fois que le premier disque est plein le système débute l’écriture sur le deuxième disque et ainsi de suite… Aucune tolérance de panne.
- RAID 0 : nécessite au minimum 2 disques, pour ‘n’ disques physiques le système ne voit qu’un disque logique. La capacité est égale à la combinaison des disques. Il allie la puissance des disques installés, les temps d’accès et les taux de lectures/écritures sont plus élevés que sur un seul disque. Orienté performance. Aucune tolérance à la panne, les données sont écrites aléatoirement sur les 2 disques, si un disque crash il sera difficile de récupérer les données, voir impossible.
- RAID 1 : souvent appelé mirroring, nécessite au minimum 2 disques, pour ‘n’ disques physiques le système ne voit qu’un disque logique. La capacité est égale à ‘n’ disque – 1. Les données sont écrites simultanément sur les 2 disques. Oui on perd un disque au niveau de la capacité de stockage mais la tolérance à la panne est intéressante. Si le volume perd un disque, le second possède l’intégralité des données. Une étape de reconstruction des données est possible après réinsertion d’un nouveau disque à la grappe.
- RAID 5 : nécessite 3 disques minimum, pour ‘n’ disques physiques le système ne voit qu’un volume de données correspondant à ‘n’ – 1 disque en capacité de stockage. Sur chaque disque sont écrits des bits de parité, réservant automatiquement 1/3 du disque. Forte tolérance de panne. Si panne d’un disque (et pas plus) la réinsertion d’un nouveau disque reconstruira le volume et les données sur celui-ci. Le temps de reconstruction varie selon le volume de données à reconstruire même si celui-ci est généralement de plusieurs heures.
- RAID 5 + spare : nécessite au moins 4 disques dont un sera assigné à la reconstruction automatique du volume en cas de crash.
- RAID 6 : nécessite au minimum 4 disques, même principe que le RAID 5 (gestion du bit de parité) hormis qu’il peut gérer la panne simultanée de 2 disques durs.
- RAID 10 : nécessite au minimum 4 disques, combinaison des RAID 0 et 1, ici on allie performance et tolérance de panne. Différence RAID 0+1 et RAID 1+0 :
Un exemple avec 6 disques, avec un RAID 1+0 la grappe est formée comme suit :
Hdd 1 – hdd 2 = raid 1, volume A
Hdd 3 – hdd 4 = raid 1, volume B
Hdd 5 – hdd 6 = raid 1, volume C
Un RAID 0 de A,B,C est formé. On remarque que si le disque 3 crash l’intégrité de la grappe n’est pas affectée. Seul le volume B est atteint, les données seront conservées sur le disque 4.
Un exemple avec 6 disques, avec un RAID 0+1 la grappe est formée comme suit :
Hdd 1, hdd 2, hdd 3 = raid 0, volume A Hdd 4, hdd 5, hdd 6 = raid 0, volume B
Un RAID 1 des volumes A & B est formé. On Remarque que si le disque 3 crash c’est les données de la grappe entières qui seront perdues (disques 1 et 2) car par définition un RAID 0 fusionne tous les disques afin d’en optimiser l’espace et les performances.
Au final le raid 1+0 offre une meilleure tolérance à la panne et conserve les mêmes performances.
II. Réalisation sous Linux
II.1. Le matériel
Personnellement j’ai utilisé VmWare pour réaliser ces démos, détails de ma machine virtuelle :
- OS : Debian 6 Squeeze
- RAM : 192 Mo
- 1 core
- 5 disques :
- 1 disque système 5 Go
- 4 disques x 1 Go, pour mes tests de RAID
Le fait que j’ai réalisé cela sous machine virtuel ne change en rien le bon fonctionnement sur une machine physique, la procédure est identique.
II.2. Pré-requis
Avant de débuter et d’installer le paquet nécessaire au RAID logiciel, il est important de vérifier si le module raid que l’on veut gérer est activé sur le noyau :
root@cluster-node-1:~$ lsmod | grep raid |
Ici nous aurons besoin de RAID 0, 1, 5, 10, pour les activer :
root@cluster-node-1:~$ modprobe raid1 |
Ainsi de suite pour les modules non chargés.
Installer le paquet mdadm qui va gérer notre RAID logiciel :
root@cluster-node-1:~$ aptitude install mdadm -y |
Repérer les disques (chez moi) :
root@cluster-node-1:~# fdisk -l |
Formatage des disques, je montre l’exemple pour un disque la procédure sera identique pour le reste :
root@cluster-node-1:~# fdisk /dev/sdc |
II.3. Construction des matrices RAID
###II.3.1 Pour du RAID 0
root@cluster-node-1:~# mdadm --create --verbose /dev/md0 --level=raid0 --raid-devices=2 /dev/sdb1 /dev/sdc1 |
Vérifier le statut du RAID :
root@cluster-node-1:~#root@cluster-node-1:~# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Jun 27 22:29:47 2011
Raid Level : raid0
Array Size : 2085888 (2037.34 MiB 2135.95 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Jun 27 22:29:47 2011
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Name : cluster-node-1:0 (local to host cluster-node-1)
UUID : 6d1bd89e:3d87472c:19950752:cb08c71a
Events : 0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
###II.3.3. Pour du RAID 5
root@cluster-node-1:~# mdadm --create --verbose /dev/md0 --level=raid5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 |
Vérifier le statut du RAID :
root@cluster-node-1:~# mdadm --detail /dev/md0 |
###II.3.4. Pour du RAID 10
root@cluster-node-1:~# mdadm --create --verbose /dev/md0 --level=raid10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 |
Vérifier le statut du RAID :
root@cluster-node-1:~# root@cluster-node-1:~# mdadm --detail /dev/md0 |
Ensuite on créé le file system :
root@cluster-node-1:~# mkfs.ext2 /dev/md0 |
On monte le device :
root@cluster-node-1:~# mount /dev/md0 /mnt/raidX |
On finalise ça dans le fstab, afin de conserver un montage persistant à chaque démarrage:
root@cluster-node-1:~# nano /etc/fstab |
Ajouter la ligne suivante (conformément à votre système de fichier et répertoire de montage) :
0 2 md0 raidX ext2 defaults |
III. On va tout casser ?!
III.1. Casse d’ un RAID 1.
Si comme moi vous voulez tester ça en virtuel, voici ce que j’ai fait :
- Éteindre la VM
- Déplacer un des deux .vmdk correspondant aux disques du RAID
- Supprimer le disque dans les paramètres de la VM
- Lancer la machine
Maintenant on observe le statut du RAID :
root@cluster-node-1:~# mdadm --detail /dev/md0 |
Aller faire un tour du côté du répertoire de montage, les données existes encore (merci raid1).
On remarque aussi qu’un device nommé md127
a été ajouté (du moins se fût le cas pour moi), solution le supprimer :
root@cluster-node-1:~# mdadm -S /dev/md127 |
Avec un fdisk -l
on peut voir que celui-ci a disparu, maintenant éteindre la VM et rajouter l’ancien disque et relancer la VM. On lance la commande suivante pour rajouter le disque manquant et reconstruire le RAID 1 :
root@cluster-node-1:~# mdadm --manage /dev/md0 --add /dev/sdc1 |
Malheureusement (mais logique) après avoir rajouter le disque il faut recréer un file system ce qui veut dire suppression des données. Oui c’est dommage et c’est la la grande limitation du RAID 1.
III.2. Tips en vrac
Voici quelque commande utiles afin de manager au mieux vos volumes RAID. Pour plus d’infos n’oublier pas de faire un man mdadm
, qui comme toujours est très complet.
Connexion et déconnexion du RAID à chaud :
root@cluster-node-1:~# mdadm --manage /dev/md0 --stop |
Bien sûr si les volumes ne sont pas endommagés vous ne perdez pas vos données.
Enregistrer votre configuration courante :
root@cluster-node-1:~# mdadm --examine --scan >> /etc/mdadm/mdadm.conf |
C’est tout ? Oui désolé ce n’était pas plus difficile que ça . Je ne suis pas tellement rentré dans des cas complexes mais vous avez les cartes pour vous débrouiller maintenant !
Bon RAID ;)
Comments