Pourquoi un RAID Hybride

Les disques SSD c'est bien : rapides, solides mais par contre le prix au To est encore trop élevé pour s'en servir de stockage.
Les disques HDD ont encore de beaux jours devant eux compte tenu de leur prix au To.

Avec nos appareils photos modernes, on manipule des photos de plus en plus grosses et le temps de chargement s'en fait ressentir.
L'idée ici c'est de mettre en place un système RAID entre un volume sur disque SSD et un volume sur disque HDD.

RAID1 SSD/HDD

Le RAID1 sert à mirrorer (frangliscisme) un disque avec un autre. En général, un Hybrid RAID est un RAID1 composé de 2 technologies de stockage différentes. On peut bien sûr mettre en place un autre type de RAID (5 ou 6).

SSD

  • Technologie encore jeune
  • Cher
  • Cycles d'écritures limités
  • Fiabilité encore incertaine
  • Vitesses linéaires très élevées
  • Aucun élément mécanique
  • Faible latence

HDD

  • Technologie éprouvée
  • Coût au To faible
  • Bonne fiabilité
  • Vitesses linéaires élevées
  • Sensible au choc mécaniques
  • Latence correcte

Mise en place sur Linux/Ubuntu

Pré-requis : des partitions vides et si possible de même taille.
Dans mon exemple :
- SSD : /dev/sda (1 partition sda1 de type Linux RAID fa00)
- HDD : /dev/sdb (1 partition sdb1 de type Linux RAID fa00)

Première étape : création de l'array RAID Hybride

Le mode hybrid consiste à positionner le flag "write-mostly" sur le disque HDD.
Ceci forcera le kernel a effectuer des read sur le disque HDD seulement en cas de nécessité (panne du SSD par exemple).
Toutes les requêtes de lecture seront adressées au disque SSD.

root# mdadm --create /dev/md/RAIDHybrid --verbose --assume-clean --name=RAIDHybrid --level=mirror --raid-devices=2 /dev/sda1 -W /dev/sdb1

mdadm: Note: this array has metadata at the start and
   may not be suitable as a boot device.  If you plan to
   store '/boot' on this device please ensure that
   your boot-loader understands md/v1.x metadata, or use
   --metadata=0.90
mdadm: size set to 488254464K
mdadm: automatically enabling write-intent bitmap on large array
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/RAIDHybrid started.

root#

On visualise le résultat :

root# cat /proc/mdstat 

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md126 : active raid1 sdb1[1](W) sda1[0]
     488254464 blocks super 1.2 [2/2] [UU]
     bitmap: 0/4 pages [0KB], 65536KB chunk
    
unused devices: <none>

root#

L'information importante est le (W) derrière sdb1, qui signifie write-mostly.

root# mdadm --detail --scan 

ARRAY /dev/md/RAIDHybrid metadata=1.2 name=xxx:RAIDHybrid UUID=b8561ae9:11b6c759:b72c3764:2ff04c22

root#

Première étape terminée.
Nous avons une partition RAID. Reste maintenant à mettre en place le système de fichier.

Seconde étape : création du volume LVM sur l'array RAID

Pour avoir plus de souplesse, on utilise LVM avant le filesystem.
On va créer ici un Volume Logique de 300G.

root# pvcreate -v /dev/md/RAIDHybrid

   Set up physical volume for "/dev/md/RAIDHybrid" with 985508928 available sectors
   Zeroing start of device /dev/md/RAIDHybrid
   Writing physical volume data to disk "/dev/md/RAIDHybrid"
 Physical volume "/dev/md/RAIDHybrid" successfully created
root# vgcreate -v VGHybrid /dev/md/RAIDHybrid

   Wiping cache of LVM-capable devices
   Adding physical volume '/dev/md/RAIDHybrid' to volume group 'VGHybrid'
   Archiving volume group "VGHybrid" metadata (seqno 0).
   Creating volume group backup "/etc/lvm/backup/VGHybrid" (seqno 1).
 Volume group "VGHybrid" successfully created
root# lvcreate -L 300G -n MesPhotos -v VGHybrid

   Setting logging type to disk
   Finding volume group "VGHybrid"
   Archiving volume group "VGHybrid" metadata (seqno 1).
   Creating logical volume MesPhotos
   Creating volume group backup "/etc/lvm/backup/VGHybrid" (seqno 2).
   Found volume group "VGHybrid"
   activation/volume_list configuration setting not defined: Checking only host tags for VGHybrid/MesPhotos
   Creating VGHybrid-MesPhotos
   Loading VGHybrid-MesPhotos table (252:12)
   Resuming VGHybrid-MesPhotos (252:12)
   Clearing start of logical volume "MesPhotos"
   Creating volume group backup "/etc/lvm/backup/VGHybrid" (seqno 2).
 Logical volume "MesPhotos" created

root#

Et nous voilà avec un volume LVM de 300G en Hybrid RAID-1.
Reste à le formater (ext4, xfs, btrfs, ...)

Comparatif

Voici un comparatif des performances Lecture/Ecriture/Temps d'accès sur ma configuration (SATA 3G/s)

Avant (RAID1 HDD/HDD) :

Performances RAID1

Après (RAID1 SSD/HDD) :

Performances RAID1 Hybrid

Les performances sont nettement meilleures :

  • vitesse d'écriture meilleure (78 Mo/s -> 95 Mo/s)
  • vitesse de lecture plus que doublée ! (119 Mo/s -> 275 Mo/s)
  • temps d'accès divisé par 100 ! (14 ms -> 0,09 ms)

Conclusions

Les performances sont là grâce au SSD.
La souplesse est là grâce à LVM.
La redondance est là grâce au RAID1.

Objectif atteint !