L'avantage:
- des lectures ultra rapides
- une synchro permanente entre le HD et la RAM
L'inconvénient:
- c'est chère la RAM
Donc, mon Use Case, c'est un serveur MySQL qui demande moultes lectures/ecritures (une DB dspam) qui sature mon serveur de mails en IOwait.
J'ai donc une machine physique avec 32 Go de RAM, et 2x320Go de HD.
J'ai donc installé un RAID 1 complet sur les deux disques, et j'ai paramétré une partition /dev/md3 de 25 Go pour stocker le /var/lib/mysql.
1) donner aux disques physiques une préférence pour l'écriture:
mdadm /dev/md3 -f /dev/sda2 -r /dev/sda2 --add --write-mostly /dev/sda2... attendre la fin de la synchro ...
mdadm /dev/md3 -f /dev/sdb2 -r /dev/sdb2 --add --write-mostly /dev/sdb2(notez s/sda2/sdb2/)
2) ensuite, ajouter le ramdisk tout simplement:
mdadm /dev/md3 --add /dev/ramdisk
Et là, attention, le dev/ramdisk est ajouté en tant que Spare.
il faut enlever un HD et le remettre en spare. Je n'ai pas trouvé d'autres méthodes:
mdadm /dev/md3 -f /dev/sda2 -r /dev/sda2 mdadm /dev/md3 --add --write-mostly /dev/sda2
Et maintenant, j'ai :
Number Major Minor RaidDevice State 2 1 0 0 spare rebuilding /dev/ram0 1 8 18 1 active sync writemostly /dev/sdb2 0 8 2 - writemostly spare /dev/sda2
Le problème c'est que l'allocation de RAM est plutôt longue, du coup la synchro est très lente... (speed=4456K/sec)
Une fois terminée, le résultat est là:
Number Major Minor RaidDevice State 0 1 0 0 active sync /dev/ram0 1 8 18 1 active sync writemostly /dev/sdb2 2 8 2 - writemostly spare /dev/sda2
/dev/md3: Timing buffered disk reads: 1544 MB in 3.00 seconds = 514.37 MB/sec /dev/md2: Timing buffered disk reads: 208 MB in 3.03 seconds = 68.60 MB/sec(md2 est une autre partition en RAID1 sur les memes disques)
Bien sur, il y a des trucs à savoir:
sfdisk -l /dev/sda donne (entre autres) le nombre de blocs du ramdisk (dans mon cas, 26218080)
J'ajoute donc dans /boot/grub/menu.lst:
kernel /vmlinuz-2.6.18-238.12.1.el5 ro root=/dev/md2 nodmraid ramdisk_size=26218080
Puis je crée dans le fichier rc.local:
# RAID1 ramdisk mdadm /dev/md3 --add /dev/ramdisk DEVICE=/dev/sda2 if [ -e /dev/sdb2 ]; then DEVICE=/dev/sdb2 fi mdadm /dev/md3 -f ${DEVICE} -r ${DEVICE} mdadm /dev/md3 --add --write-mostly ${DEVICE}