Raid explications

De BlaxWiki
Révision datée du 26 août 2014 à 10:37 par 217.174.199.129 (discussion) (Page créée avec « __FORCETOC__ La technologie RAID (acronyme de Redundant Array of Inexpensive Disks, parfois Redundant Array of Independent Disks, traduisez Ensemble redondant de disques ... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche


La technologie RAID (acronyme de Redundant Array of Inexpensive Disks, parfois Redundant Array of Independent Disks, traduisez Ensemble redondant de disques indépendants) permet de constituer une unité de stockage à partir de plusieurs disques durs. L'unité ainsi créée (appelée grappe) a donc une grande tolérance aux pannes (haute disponibilité, Raid 1, 4, 5...), et/ou une plus grande capacité/vitesse d'écriture (0, 5, 1+0). La répartition des données sur plusieurs disques durs permet donc d'en augmenter la sécurité et de fiabiliser les services associés.

Cette technologie a été mise au point en 1987 par trois chercheurs (Patterson, Gibson et Katz) à l'Université de Californie (Berkeley). Depuis 1992 c'est le RAID Advisory Board qui gère ces spécifications. Elle consiste à constituer un disque de grosse capacité (donc coûteux) à l'aide de plus petits disques peu onéreux (c'est-à-dire dont le MTBF, Mean Time Between Failure, soit le temps moyen entre deux pannes, est faible).

Les disques assemblés selon la technologie RAID peuvent être utilisés de différentes façons, appelées Niveaux RAID. L'Université de Californie en a défini 5, auxquels ont été ajoutés les niveaux 0 et 6. Chacun d'entre-eux décrit la manière de laquelle les données sont réparties sur les disques:

Niveau 0: appelé striping
Niveau 1: appelé mirroring,shadowing ou duplexing
Niveau 2: appelé striping with parity (obsolète)
Niveau 3: appelé disk array with bit-interleaved data
Niveau 4: appelé disk array with block-interleaved data
Niveau 5: appelé disk array with block-interleaved distributed parity
Niveau 6: appelé disk array with block-interleaved distributed parity

Chacun de ces niveaux constitue un mode d'utilisation de la grappe, en fonction:

- des performances
- du coût
- des accès disques

Raid de Niveau 0 (Raid-0)[modifier]

Le niveau RAID-0, appelé striping (traduisez entrelacement ou aggrégat par bande, parfois injustement appelé stripping) consiste à stocker les données en les répartissant sur l'ensemble des disques de la grappe. De cette façon, il n'y a pas de redondance, on ne peut donc pas parler de tolérance aux pannes. En effet en cas de défaillance de l'un des disques, l'intégralité des données réparties sur les disques sera perdue.

Toutefois, étant donné que chaque disque de la grappe a son propre contrôleur, cela constitue une solution offrant une vitesse de transfert élevée.

Le RAID 0 consiste ainsi en la juxtaposition logique (agrégation) de plusieurs disques durs physiques. En mode RAID-0 les données sont écrites par "bandes" (en anglais stripes) :

||Disque 1||Disque 2||Disque 3||
||Bande 1||Bande 2||Bande 3||
||Bande 4||Bande 5||Bande 6||
||Bande 7 ||Bande 8||Bande 9||

On parle de facteur d'entrelacement pour caractériser la taille relative des fragments (bandes) stockés sur chaque unité physique. Le débit de transfert moyen dépend de ce facteur (plus petite est chaque bande, meilleur est le débit).

Si un des élements de la grappe est plus grand que les autres, le système de remplissage par bande se trouvera bloqué lorsque le plus petit des disques sera rempli. La taille finale est ainsi égale au double de la capacité du plus petit des deux disques : deux disques de 20 Go donneront un disque logique de 40 Go. un disque de 10 Go utilisé conjointement avec un disque de 40 Go permettra d'obtenir un disque logique de 20 Go (30 Go du second disque seront alors inutilisés). Il est recommandé d'utiliser des disques de même taille pour faire du RAID-0 car dans le cas contraire le disque de plus grande capacité ne sera pas pleinement exploité.


Raid de Niveau 1 (Raid-1)[modifier]

Le niveau 1 a pour but de dupliquer l'information à stocker sur plusieurs disques, on parle donc de mirroring, ou shadowing pour désigner ce procédé.

||Disque1||Disque2||Disque3||
||Bande 1||Bande 1||Bande 1||
||Bande 2||Bande 2||Bande 2||
||Bande 3||Bande 3||Bande 3||

(En général le procédé est utilisé sur 2 disques mais on peut imaginer l'utiliser sur n disques en perdant en fait (n-1) disques pour le stockage mais en pouvant aussi se permettre d'en avoir (n-1) en panne).

On obtient ainsi une plus grande sécurité des données, car si l'un des disques tombe en panne, les données sont sauvegardées sur l'autre. D'autre part, la lecture peut être beaucoup plus rapide lorsque les deux disques sont en fonctionnement. Enfin, étant donné que chaque disque possède son propre contrôleur, le serveur peut continuer à fonctionner même lorsque l'un des disques tombe en panne, au même titre qu'un camion pourra continuer à rouler si un de ses pneus crève, car il en a plusieurs sur chaque essieu...

En contrepartie la technologie RAID1 est très onéreuse étant donné que seule une partie de la capacité de stockage n'est effectivement utilisée.

Raid de Niveau 2 (Raid-2)[modifier]

Le niveau RAID-2 est désormais obsolète, car il propose un contrôle d'erreur par code de Hamming (codes ECC - Error Correction Code), or ce dernier est désormais directement intégré dans les contrôleurs de disques durs.

Cette technologie consiste à stocker les données selon le même principe qu'avec le RAID-0 mais en écrivant sur une unité distincte les bits de contrôle ECC (généralement 3 disques ECC sont utilisés pour 4 disques de données).

La technologie RAID 2 offre de piètres performances mais un niveau de sécurité élevé.

Raid de Niveau 3 (Raid-3)[modifier]

Le niveau 3 propose de stocker les données sous forme d'octets sur chaque disque et de dédier un des disques au stockage d'un bit de parité.

||Disque 1||Disque 2||Disque 3||Disque 4||
||Octet 1||Octet 2||Octet 3||Parité 1|2|3||
||Octet 4||Octet 5||Octet 6||Parité 4|5|6||
||Octet 7||Octet 8||Octet 9||Parité 7|8|9||
''| Correspond ici à la fonction XOR (OU EXCLUSIF).''

De cette manière, si l'un des disques venait à défaillir, il serait possible de reconstituer l'information à partir des autres disques. Après "reconstitution" le contenu du disque défaillant est de nouveau intègre. Par contre, si deux disques venaient à tomber en panne simultanément, il serait alors impossible de remédier à la perte de données.

On peut remarquer qu'on peut simplement rajouter un disque à la grappe, et donc l'étendre en ne recalculant que le disque de parité.

Raid de Niveau 4 (Raid-4)[modifier]

Le niveau 4 est très proche du niveau 3. La différence se trouve au niveau de la parité, qui est faite sur un secteur (appelé bloc) et non au niveau du bit, et qui est stockée sur un disque dédié. C'est-à-dire plus précisément que la valeur du facteur d'entrelacement est différente par rapport au RAID 3.

||Disque 1||Disque 2||Disque 3||Disque 4||
||Bloc 1||Bloc 2||Bloc 3||Parité 1|2|3||
||Bloc 4||Bloc 5||Bloc 6||Parité 4|5|6||
||Bloc 7||Bloc 8||Bloc 9||Parité 7|8|9||

Ainsi, pour lire un nombre de blocs réduits, le système n'a pas à accéder à de multiples lecteurs physiques, mais uniquement à ceux sur lesquels les données sont effectivement stockées. En contrepartie le disque hébergeant les données de contrôle doit avoir un temps d'accès égal à la somme des temps d'accès des autres disques pour ne pas limiter les performances de l'ensemble.

On peut remarquer qu'on peut simplement rajouter un disque à la grappe, et donc l'étendre en ne recalculant que le disque de parité (comme pour le RAID-3).

Raid de Niveau 5 (Raid-5)[modifier]

Le niveau 5 est similaire au niveau 4, c'est-à-dire que la parité est calculée au niveau d'un secteur, mais répartie sur l'ensemble des disques de la grappe.

||Disque 1||Disque 2||Disque 3||Disque 4||
||Bloc 1||Bloc 2||Bloc 3||Parité 1|2|3||
||Bloc 4||Bloc 5||Parité 4|5|6||Bloc 6||
||Bloc 7||Parité 7|8|9||Bloc 8||Bloc 9||

De cette façon, RAID 5 améliore grandement l'accès aux données (aussi bien en lecture qu'en écriture) car l'accès aux bits de parités est réparti sur les différents disques de la grappe.

Le mode RAID-5 permet d'obtenir des performances très proches de celles obtenues en RAID-0, tout en assurant une tolérance aux pannes élevées, c'est la raison pour laquelle c'est un des modes RAID les plus intéressant en terme de performance et de fiabilité. L'espace disque utile sur une grappe de n disques étant égal à n-1 disques, il est intéressant d'avoir un grand nombre de disques pour "rentabiliser" le RAID-5.

Mais attention, lorsque la grappe est dégradée, pour accéder à une donnée il faut la reconstruire à la volée si elle est sur le disque mort. Cela utilise donc plus de ressources et sollicite beaucoup plus les disques, éventuellement cela les met à rude épreuve et peut provoquer la perte d'un second disque, ce qui serait fatal pour la grappe. C'est pourquoi il faut reconstruire au plus vite la grappe. Cette remarque vaut d'ailleurs pour tous les raids utilisant la parité donc 2-6.

Par rapport aux Raid 3 & 4, l'ajout d'un disque à la grappe est plus complexe car la parité est distribuée mais reste possible. On remarquera que cette fonctionnalité est rarement présente sur les controlleurs que nous utilisons.


Raid de Niveau 6 (Raid-6)[modifier]

Le niveau 6 a été ajouté aux niveaux définis par Berkeley. Il définit l'utilisation de 2 fonctions de parité, et donc leur stockage sur deux disques dédiés. Ce niveau permet ainsi d'assurer la redondance en cas d'avarie simultanée de deux disques. Cela signifie qu'il faut au moins 4 disques pour mettre en oeuvre un système RAID-6. Les Netapp utilisent du RAID-DP (DP: Diagonal Parity) comme implémentation du Raid 6 (depuis la version 6.5 de OnTap). Habituellement ils utilisent du Raid 4 (et non du raid 5), pour permettre l'ajout simple d'un disque à la grappe.

Raid 1+0[modifier]

Les Raids à parité sont moins fiable en exploitation que ceux en mirroring. En effet il arrive qu'on perde la grappe ou bien 2 disques plus souvent qu'on ne le croit. Le Raid 1 fonctionnant en mirroring, un disque peut être utilisé directement, même avec un controlleur scsi différent qui peut ne pas supporter le raid. Donc lorsqu'il faut jumeler fiabilité et performance, on peut utiliser le Raid 1+0 qui permet d'aggréger plusieurs disques (comme le Raid 0) tout en les mirrorant (comme en Raid 1) :

||Disque 1||Disque 2||Disque 3||Disque 4||Disque 5||Disque 6||
||Bande 1||Bande 2||Bande 3||Bande 1||Bande 2||Bande 3||
||Bande 4||Bande 5||Bande 6||Bande 4||Bande 5||Bande 6||
||Bande 7||Bande 8||Bande 9||Bande 7||Bande 8||Bande 9||

Comparaison[modifier]

Les solutions RAID généralement retenues sont le RAID de niveau 1 et le RAID de niveau 5.

Le choix d'une solution RAID est lié à trois critères :

* la sécurité : RAID 1 et 5 offrent tous les deux un niveau de sécurité élevé, toutefois la méthode de reconstruction des disques varie entre les deux solutions. En cas de panne du 

système, RAID 5 reconstruit le disque manquant à partir des informations stockées sur les autres disques, tandis que RAID 1 opère une copie disque à disque, et est de fait encore plus fiable.

* Les performances : RAID 1 offre de meilleures performances que RAID 5 en lecture, mais souffre lors d'importantes opérations d'écriture
* Le coût : le coût est directement lié à la capacité de stockage devant être mise en oeuvre pour avoir une certaine capacité effective. La solution RAID 5 offre un volume utile 

représentant 80 à 90% du volume alloué (le reste servant évidemment au contrôle d'erreur). La solution RAID 1 n'offre par contre qu'un volume disponible représentant 50 % du volume total (étant donné que les informations sont dupliquées).

A cela il faut signaler que le temps de reconstruction d'un RAID a son importance. En effet un Raid 1 est plus simple à reconstituer à chaud, alors que le Raid 5 se reconstruit très lentement sur une machine déjà en utilisation intensive des disques (Serveur SQL par exemple).


Mise en place d'une solution RAID[modifier]

Il existe plusieurs façons différentes de mettre en place une solution RAID sur un serveur :

* de façon logicielle : il s'agit généralement d'un driver au niveau du système d'exploitation capable de créer un seul volume logique avec plusieurs disques (SCSI ou IDE).

C'est la solution utilisée sur les SUNs par exemple. Elle est économique mais consomme en ressource et est pour un usage professionnel à déconseiller.

* de façon matérielle
Soit avec des matériels DASD (Direct Access Stockage Device) : il s'agit d'unités de stockage externes pourvues d'une alimentation propre. De plus ces matériels sont dotés de 

connecteurs permettant l'échange de disques à chaud (on dit généralement que ce type de disque est hot swappable). Ce matériel gère lui-même ses disques, si bien qu'il est reconnu comme un disque SCSI standard

Soit avec des contrôleurs de disques RAID : il s'agit de cartes s'enfichant dans des slots PCI ou ISA et permettant de contrôler plusieurs disques durs. C'est la solution la plus utilisée.

Annexe : Fonctionnement de la Parité simple[modifier]

Pour ceux pour qui la fonction XOR est un mystère, il se peut que le fonctionnement des Raid à Parités ne soit pas claire. Voici le fonctionnement à l'aide d'un exemple.

La fonction XOR[modifier]

La Fonction XOR ou OU EXCLUSIF permet de comparer 2 valeurs et renvoie 1 si les valeurs sont différentes et 0 si ce sont les mêmes valeurs :

||A||B||A|B||
||0||0||0||
||0||1||1||
||1||0||1||
||1||1||0||

On remarque que X|X=0 On remarque que (A|B)|B=A et que (A|B)|A=B et que donc de (n-1) colonne on peut en déduire celle qui manque

Exemple Pratique[modifier]

Soit 4 disques, on a les informations suivantes à l'instant t :

||A||B||C||D||
||0||0||1||0|0|1=0|1=1||
||0||1||0||0|1|0=1|0=1||
||1||0||1||1|0|1=1|1=0||
||1||1||0||1|1|0=0|0=0||

Soit :

||A||B||C||D||
||0||0||1||1||
||0||1||0||1||
||1||0||1||0||
||1||1||0||0||

Imaginons que B brûle...

||A||B||C||D||
||0||W||1||1||
||0||X||0||1||
||1||Y||1||0||
||1||Z||0||0||

Alors B=A|C|D !!! Soit :

||A||B||C||D||
||0||0|1|1||1||1||
||0||0|0|1||0||1||
||1||1|1|0||1||0||
||1||1|0|0||0||0||

||A||B||C||D||
||0||0||1||1||
||0||1||0||1||
||1||0||1||0||
||1||1||0||0||

C'est magique, on retrouve bien notre disque :)

Annexe : Fonctionnement du DP (Diagonal Parity)[modifier]

Pour simplifier l'explication, on va utiliser un système décimal et la fonction +. Par exemple :

||A||B||C||D||
||1||2||3||1+2+3=6||
||4||5||6||4+5+6=15||
||7||8||9||7+8+9=24||

Si on perd B on a bien :

||A||B||C||D||
||1||X=6-3-1=2||3||6||
||4||Y=15-6-4=5||6||15||
||7||Z=24-9-7=8||9||24||

||A||B||C||D||
||1||2||3||6||
||4||5||6||15||
||7||8||9||24||

La parité diagonale utilise n+2 disques. On va appeler P le disque de parité (on travaille en Raid 4) et D celui de DP. Nous allons prendre n=3, soit 3 disques au total.

La DP se calcule aussi sur n disques comme la parité mais en tournant sur les n disques de données et celui de parité, tout en calculant le XOR en diagonal... Ce qui donne :

||A||B||C||P||D||
||'''1'''||2||3||6||'''X=1+5+9=15'''||
||4||'''5'''||6||15||Y||
||7||8||'''9'''||24||Z||

puis

||A||B||C||P||D||
||1||'''2'''||3||6||15||
||4||5||'''6'''||15||'''Y=2+6+24=32'''||
||7||8||9||'''24'''||Z||

et donc :

||A||B||C||P||D||
||1||2||'''3'''||6||15||
||4||5||6||'''15'''||32||
||'''7'''||8||9||24||'''Z=3+15+7=25'''||

On obtient donc l'état suivant :

||A||B||C||P||D||
||1||2||3||6||15||
||4||5||6||15||32||
||7||8||9||24||25||

Si on perd un disque, on utilise la parité Classique. Mais imaginons qu'on perde A & B !!!

||A||B||C||P||D||
||Q||T||3||6||X=15||
||R||U||6||15||Y=32||
||S||V||9||24||Z=25||

Par construction les valeurs T,U,V sont parfaitement déterminables.

En effet on a :

X=15=Q+U+9 [Equation 1 utilisé par la suite]
Y=32=T+6+24 soit T=32-24-6=2
Z=25=3+15+S soit S=25-15-3=7
||A||B||C||P||D||
||Q||2||3||6||X=15||
||R||U||6||15||32||
||7||V||9||24||25||

et on a grâce à la parité :

Q=6-3-2=1
V=24-9-7=8
||A||B||C||P||D||
||1||2||3||6||X=15||
||R||U||6||15||32||
||7||8||9||24||25||

Reste R & U mais on se souvient de l'équation 1 tiré de la DP: X=15=Q+U+9 or Q=1 donc U=15-9-1=5

et enfin dernière utilisation de la parité : R=15-6-5=4

On retrouve bien :

||A||B||C||P||D||
||1||2||3||6||15||
||4||5||6||15||32||
||7||8||9||24||25||

Maintenant pour les puristes, on le fait avec des XOR en binaire :

||A||B||C||P||D||
||1||1||1||1||X||
||0||1||0||1||Y||
||0||0||1||1||Z||

||A||B||C||P||D||
||1(X)||1(Y)||1(Z)||1||X=1|1|1=1||
||0||1(X)||0(Y)||1(Z)||Y=1|0|1=0||
||0(Z)||0||1(X)||1(Y)||Z=1|1|0=0||

||A||B||C||P||D||
||1||1||1||1||1||
||0||1||0||1||0||
||0||0||1||1||0||

LDCOM joue avec le compteur EDF...

||A||B||C||P||D||
||/||/||1||1||1||
||/||/||0||1||0||
||/||/||1||1||0||

On a perdu 2 disques en Raid 5 mais ...

||A||B||C||P||D||
||Q||T||1||1||1||
||R||U||0||1||0||
||S||V||1||1||0||
Q|U|1=1
T|0|1=0 <=> T=1
1|1|S=0 <=> S=0
||A||B||C||P||D||
||Q=1|1|1=1||1||1||1||1||
||R||U||0||1||0||
||0||V=0|1|1=0||1||1||0||

||A||B||C||P||D||
||1||1||1||1||1||
||R||U||0||1||0||
||0||0||1||1||0||

Q=1 par parité et Q|U|1=1 soit U=1

||A||B||C||P||D||
||1||1||1||1||1||
||0||1||0||1||0||
||0||0||1||1||0||

Pour info, les pertes de performances en écriture d'utilisation du RAID-DP par rapport au RAID-4 sont de l'ordre de 3%.

Liens Utiles[modifier]

* http://www.commentcamarche.net/protect/raid.php3
* http://www.netapp.com/tech_library/3298.html