Tag Archives: RAID

Booster les performances MdAdm

rebuild-raid

MdAdm permet de créer un raid logiciel. Il est relativement performant et permet de faire à peu prêt tout ce dont vous avez besoin.

Mais il est important d'optimiser certains paramètres sinon les reconstructions (rebuild) peuvent prendre plusieurs heures. 

Par exemple pour mon raid de 16To, la reconstruction raid suite à un changement de disque dur peut prendre jusqu'à 75 heures.

Définir les vitesses de votre Raid

Les fichiers "/proc/sys/dev/raid/speed_limit_min" et "/proc/sys/dev/raid/speed_limit_max" permettent de définir la vitesse minimale à atteindre pour reconstruire votre raid et la vitesse à ne pas dépasser.

Vous pouvez voir la vitesse définie pour votre Raid en exécutant les commandes suivantes:

$ cat /proc/sys/dev/raid/speed_limit_min
1000
$ cat /proc/sys/dev/raid/speed_limit_max 
200000

Dans cet exemple, cela signifie que pour chaque disque, la limite minimale de reconstruction est de 1mo par seconde. Et la limite maximale est de 200mo/s.

On voit que la limite basse est peu élevée. On peut l'augmenter en entrant la commande suivante:

echo 20000 > /proc/sys/dev/raid/speed_limit_min

ou via la commande:

sysctl -w dev.raid.speed_limit_min=20000

Cela permet de passer la vitesse minimale à 20mo/s.

Toutefois, ces modifications sont temporaires et ne remplacent pas les valeurs par défaut. Cela signifie qu'au premier redémarrage de votre serveur, les paramètres seront revenus à ceux par défaut. Pour les rendre définitifs, il faut ajouter ces 2 lignes dans le fichier "/etc/sysctl.conf":

dev.raid.speed_limit_min = 50000
dev.raid.speed_limit_max = 200000

Accélérer la reconstruction du raid

Pour augmenter la reconstruction du raid, il est possible d'utiliser l'option "Bitmap".

L'option bitamp permet d'optimiser le rebuild après un crash ou le changement d'un device. Pour l'activer, il faut utiliser la commande:

mdadm --grow --bitmap=internal /dev/md0

Puis une fois que votre array raid est reconstruit, il faut la désactiver avec la commande:

mdadm --grow --bitmap=none /dev/md0

Le résultat

Pour voir si votre vitesse a augmenté, il faut faire:

cat /proc/mdstat

Vous aurez alors un résultat tel que celui là:

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md5 : active raid1 sde2[2](S) sdd2[3](S) sdc2[4](S) sdb2[1] sda2[0]
      530048 blocks [2/2] [UU]
md0 : active raid6 sde3[4] sdd3[3] sdc3[2] sdb3[1] sda3[0]
      5855836800 blocks level 6, 64k chunk, algorithm 2 [5/5] [UUUUU]
      [============>........]  resync = 61.7% (1205475036/1951945600) finish=242.9min speed=77204K/sec

Installer ZFS sur Ubuntu

Zfs-linux

Après mon puisant échec d'utilisation de RAID5 sur Ubuntu, j'ai décidé de repartir sur un système plus souple et performant appelé ZFS (Z File System).

Développé par Sun, ZFS est Open Source et un portage est disponible sur Ubuntu. Ce système a été développé pour pouvoir utiliser des capacités de stockage relativement importantes. Il n'est pas rare de voir des sociétés utiliser ZFS pour des systèmes de plusieurs Pétabytes.

Mais ZFS a également séduit le grand public car il permet de réaliser des snapshots à la volée, et surtout car il est robuste et performant. 

De nombreux systèmes utilisent ce système de fichier. On pourra ainsi citer FreeNas qui est basé sur FreeBsd et ZFS.

Juste pour information, il faut savoir que ZFS utilise des zpools qui contiennent des zraid (equivalent de raid5) ou des zraid2 (équivalent de raid6). Chaque conteneur (zpool) peut avoir plusieurs grappes de disques (zraid). Pour plus d'informations théoriques, rendez vous sur wikipédia :).

Le gros avantages est que les différents calculs de checksum et parité se font sur les grappes (raidz) et non sur l'intégralité du zpool. 

Par exemple, si vous avez un zpool qui contient 4 zraids et qu'un des zraids vient à défaillir, alors le rebuild ne portera que sur ce zraid et pas sur tout le zpool.

ATTENTION: si vous perdez un raidz, alors tout votre zpool sera perdu.

Veuillez noter que tous mes tests ont été faits sur Oneiric.

Installation de ZFS sur Ubuntu

Pour installer ZFS sur Ubuntu, il faut installer les packets suivant:

aptitude install build-essential gawk alien fakeroot linux-header-$(uname –r) install zlib1g-dev uuid-dev libblkid-dev libselinux1-dev python-software-properties

Ensuite il faut ajouter dépôt ppa pour pouvoir installer zfs en mode natif (il existe zfsonlinux et zfs-fuse):

add-apt-repository ppa :zfs-native/stable
aptitude update
aptitude install ubuntu-zfs

Vous n'avez plus qu'à rebooter votre Ubuntu et ZFS est installé :)

Préparation des disques durs pour ZFS

Dans notre exemple, nous allons créer un zpool contenant un raidz de 5 disques de 2To.

La première chose à faire est de formatter et préparer les disques pour ZFS. Les commandes suivantes sont à exécuter pour chaque disque (sdb, sdc, sdb, sde et sdf):

parted /dev/sdb   
mklabel gpt

Création du zpool et du zraid

Pour créer le zpool et le zraid c'est super facile. Il suffit de taper la commande suivante:

zpool create -o ashift=12 dataz raidz /dev/sd[bcdef]

ATTENTION: il faut mieux utiliser les id de disques:

ls -l /dev/disk/by-id
zpool create -o ashift=12 zfilms raidz /dev/disk/by-id/scsi-SATA_ST2000DL003-9VT5YD6Y15B /dev/disk/by-id/scsi-SATA_ST2000DL003-9VT5YD718LS /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0KV78 /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0KX6L /dev/disk/by-id/scsi-SATA_ST2000DM001-9YNZ1E0LE5T

Vous noterez que mon zpool s'appellera "dataz" et qu'il contiendra un raidz de 5 disques. 

L'argument "-o ashift=12" permet de forcer un alignement des partitions sur 4k, ce qui est nécessaire pour certains disques durs (les WD 2to green par exemple).

Par defaut ZFS crée un point de montage du même nom que le zpool. En faisant un "df -H" vous devrez voir votre nouveau point de montage (dataz dans mon exemple)

root@jhdserver:/home/jhd/Downloads# df -H
Filesystem             Size   Used  Avail Use% Mounted on
/dev/sda1              489G    19G   446G   4% /
udev                   2.0G   4.1k   2.0G   1% /dev
tmpfs                  778M   1.6M   777M   1% /run
none                   5.3M   4.1k   5.3M   1% /run/lock
none                   2.0G   103k   2.0G   1% /run/shm
dataz                  7.9T   608G   7.3T   8% /dataz

Quelques commandes utiles

Pour surveiller votre zpool, il existe plusieurs commandes pratiques:

  • zfs list : liste les pools 
  • zpool status -v : donne l’état de chacun des pools. Cette commande détaille les erreurs lorsqu’il y en a. 
  • zpool iostat -v dataz 15: affichage des statistiques d’entrées/sorties des pools tout en  indiquant la répartition des données et de ces entrées/sorties sur  chacun des fichiers ou périphériques constituant le pool. 
  • zpool scrub dataz : sert a verifier les checksums des données et à corriger les erreurs sur l'array. Je vous conseille de lancer cette commande une fois par mois.

Astuce

ZFS utilise principalement de la mémoire. Si votre machine ne dispose pas d'une grande quantité de RAM, il peut être intéressant de limiter son utilisation via la commande suivante:

set zfs:zfs_arc_max:536870912

Cette commande va alors limiter l'utilisation de la mémoire par ZFS à 512Mo

Retours d’expérience sur le RAID

raid5

 

Il y a 2 mois j'ai voulu refaire mon serveur et je me suis dis qu'il serait intéressant de pouvoir bénéficier d'une sécurité en cas de défaillance d'un des disque dur servant au stockage de données.

Après plusieurs recherches, on s'apperçoit qu'il existe plusieurs solutions:

  • faire une copie des données sur des médias externes (disques durs externes, DVD, Bluray, …)
  • sauvegarde en ligne via plusieurs services spécialisés (Dropbox et autres clouds)
  • mise en place d'un système de type RAID

Mon serveur contenant 16To (oui oui 16 TeraOctets), les deux premières solutions n'étaient pas envisageable.

Je me suis alors rabattu sur la mise en place d'un système RAID.

 

Quel RAID choisir ?

Je ne vais pas vous détailler le fonctionnement du RAID, wikipédia le fait déjà, mais il faut tout de même distinguer les différentes possibilités qui s'offrent à nous:

  • RAID0: qui répartit les données sur plusieurs disques. Cela améliore les performances mais n'assure aucune sécurité des données
  • RAID1: qui est du mirorring. Cela signifie qu'on duplique les données sur tous les disques. Pour 1To de données, il vous faut donc 2 disques de 1To.
  • RAID5: Par exemple si votre RAID contient 5 disques de 1To,  vous aurez une capacité de stockage utile de 4To. La tolérance de panne est de 1 disque dur.
  • RAID6: la même chose que le RAID5 mais avec deux disques de parités. Par exemple si votre RAID contient 5 disques de 1To,  vous aurez une capacité de stockage utile de 3To. La tolérance de panne est de 2 disques durs.

Vu le nombre de disques de mon serveur et l'espace de stockage total dont j'ai besoin le choix d'un système RAID5 m'a semblé le plus approprié (vous verrez par la suite que c'était une grossière erreur de ma part).

Raid Logiciel ou Raid Matériel ?

Pour mettre en place un système RAID, deux solutions s'offrent à vous.

La première solution consiste à acheter une carte controlleur supportant le RAID. 

Le principal avantage est que c'est la carte elle même qui s'occupe de la gestion des données. De plus, l'installation, la configuration et la supervision sont souvent assistées par un logiciel spécifique fourni avec la carte controleur.

Les deux inconvénients sont le prix de la carte controleur et la dépendance à cette carte. 

En effet, si la carte controleur vous lâche, vous perdrez toutes vos données, à moins d'avoir exactement la même marque de carte (voir même le même modèle) pour la remplacer.

Les princiales marques de cartes sont Areca, Supermicro, 3Ware, LSI et leur tarif varie en fonction de leurs spécifications, leurs débits et le nombre de ports disponible (entre 30€ et 1000€).

La seconde solution consiste à monter un RAID logiciel. Cela signifie que c'est votre système d'exploitation (et une tierce application) qui va s'occuper de gérer et d'écrire les données sur vos disques.

Les avantages de cette solution est le faible coût car vous n'aurez pas besoin de carte controleur, la possibilité de migrer vos disques de stockages vers un autre serveur si le votre vient à lacher.

Par contre, cette solution solicite davantage les ressources de votre serveur (consommation mémoire et processeur).

 

Première expérience: Windows et RAID Matériel

Pour ma première expérience et tentative d'utilisation de serveur RAID, je décide de garder ma configuration actuelle:

  • Boitier Sharkoo: http://www.pc-look.com/boutik/Prod_Sharkoon_Boitier-Tour-Rebel-9-Economy-Edition-Noir__7832_fr.html
  • Isolateur phonique akasa PaxMate
  • des disques Samsung Ecogreen 1.5To (pour les datas)
  • 1 x Samsung 500Go 7200Rpm (pour l'Os)
  • 3 Modules backplane : http://www.misco.fr/produits/p2586262/startech-com-5-drive-3-5in-removable-sas-sata-mobile-rack-backplane—boitier-de-stockage.htm
  • 1 processeur AMD Athlon X2 4600+
  • 4 Go DDR2
  • Carte Mere Asus M3N WS 
  • Alimentation 550W PCF (je ne sais plus la référence)
  • Windows 7 64Bits

Ne disposant pas de carte RAID, j'en ai donc commandée une, ainsi que plusieurs disques qui vont servir au raid. Et oui je ne pouvais pas utiliser mes disques car ils étaient tous plein.

Après plusieurs recherches sur le net je décide de commander cette carte:

  • Fastrak TX8660: http://www.materiel.net/carte-controleur-sas/promise-fasttrak-tx8660-64465.html

A la réception de la Fastrak, première grosse déception : les câbles fournis sont des cables dual (la connectique data et alimentation est en un seul morceau), ce qui les rend incompatibles avec mes backplanes. De plus, un des câbles est cassé.

Obliger d'acheter des cables SAS de remplacement à 40€ pièce !!!!!

J'installe le tout sur mon serveur, installe le logiciel de gestion fourni avec la carte et je crée un RAID5 avec 5 disques de 2To.

C'est simple à faire, très intuitif et rapide.

Débute alors la copie des données et là, seconde déception: les débits sont minables. On atteind difficilement les 30Mb/s, ce qui est loin des valeurs annoncées par le constructeur (100Mb/s)

Je décide tout de même de continuer la copie des données jusqu'à ce que mon premier disque soit vide.

Une fois vide, je décide d'ajouter le disque dans mon RAID pour augmenter l'espace disponible. Troisième déception, le Rebuild (phase pendant laquelle le RAID reconstruit l'array des données) est très très lent (plusieurs jours !!).

Et le pire arrive: le rebuild se crashe et 2 disques sont deads. J'AI LES BOULES.

J'ouvre un ticket chez Matériel.net pour me faire rembourser cette carte qui de toute évidence n'est pas conforme à ses spécifications. La carte est repartie chez le constructeur et depuis pas de nouvelles…

 

Seconde expérience: Linux et RAID logiciel

Après l'échec sur Windows, je décide de réinstaller mon serveur sous Ubuntu 64 Bits afin de pouvoir tester le RAID logiciel via MdAdm + LVM.

Je vous passe tous les détails d'installation, la communauté est suffisant active pour trouver tous ce dont vous aurez besoin.

Après plusieurs jours de configuration et de copie de données, mon RAID5 est enfin fonctionnel et il affiche mes 16To de données.

Le raid logiciel prend carrément moins de ressources que ce que je pensais et j'en suis super content.

Tout allait bien jusqu'à … ce qu'un disque vienne à me lacher. 

Là je me dis PAS DE SOUCI, j'ai justement mis en place un RAID5 pour que ce genre de situation n'est pas de répercution.

Je remplace donc le disque qui m'a lâché et le rebuild de l'array démarre. Il y en a pour plusieurs jours.

Arrivé à 80%, un autre disque vient à défaillir. LE CIEL EST CONTRE MOI.

Le RAID5 permet une tolérance de panne d'un seul disque et là 2 disques sont offlines.

 

Une triste conclusion

Après avoir tout essayé, j'ai bel et bien perdu mes 16To de données ce qui m'a rendu fou. Je ne peux m'en prendre qu'à moi.

En effet, j'aurai dû faire un RAID6 qui tolère la perte de deux disques, ne pas faire qu'une seule partition mais 2 ou 3 afin de limiter la casse.

De plus, j'aurai dû régulièrement vérifier l'état SMART des disques durs afin de prévenir d'une éventuelle défaillance.

Résultat: 16To de perdu. RAID 1 / JHD 0