J'ai eu quelques soucis récemment avec une instance Amazon qui héberge une base de données Mysql très sollicitée par période.
En effet les données de la base étaient sur la même partition que le système ( déjà c'est mauvais ), celle-ci étant fortement sollicitée en IO, la charge système se met à grimper, les temps d'attente d’accès au disque étant de plus en plus grand, jusqu'au crash complet .

La solution simple et rapide est de déplacer les données vers une partition dédiée, avec des performances en IO plus importantes (tant qu'à faire). C'est dans ce contexte que je vais présenter, dans ce billet, la mise en place d'une partition en Raid0 pour augmenter significativement les IO/s et surtout éviter de surcharger le système.

Ce que l'on va voir

  • Création de système de fichiers XFS
  • Création d'un Raid logiciel
  • Monitoring avec atop
  • Ajout d'un disque au Raid
  • Extension d'une partition XFS

Etat des lieux

Je vais utiliser une instance micro ( gratuite ) sous Debian Jessie en HVM ( virtualisation totale ). je vais y attacher 4 disques.

Capture_d_e_cran_2015-05-17_a__10.28.54.png

  • /dev/xvda pour le système
  • /dev/sdb pour tester les perfs. sur un seul disque
  • /dev/sdc premier disque du Raid
  • /dev/sdb deuxième disque du Raid

Installation des outils

Le système étant vierge nous allons installer les paquets nécessaires pour les manipulations ci-dessous.

sudo apt-get install xfsprogs atop mdadm

Premier test : Disque seul

Pour pouvoir comparer, nous allons commencer avec un test sur un disque "seul" possédant une partition XFS

Voici comment sont perçus les disques à ce moment

Capture_d_e_cran_2015-05-17_a__10.35.40.png

Commençons par créer la partition :

sudo cfdisk /dev/xvdb

Une fois la partition créée, voici comment sont perçus les disques

Capture_d_e_cran_2015-05-17_a__10.37.39.png

Nous allons maintenant créer le système de fichiers sur cette nouvelle partition

mkfs.xfs /dev/xvdb1

Enfin il ne nous reste plus qu'à monter cette partition sur un répertoire que nous allons également créer maintenant

mkdir /home/admin/diskLocal
mount -t xfs /dev/xvdb1 /home/admin/diskLocal/

Dirigeons nous dans ce répertoire et effectuons le premier test basique, grâce à l'outil dd

cd /home/admin/diskLocal
dd if=/dev/zero of=bench.dat bs=1M count=1024 oflag=direct

Pendant le test on voit bien grâce à la commande atop, l'utilisation du disque qui est à son maximum

Capture_d_e_cran_2015-05-17_a__10.45.21.png

Et voici le résultat

Capture_d_e_cran_2015-05-17_a__10.45.39.png

Deuxième test : 2 Disques en Raid0

Commençons par construire notre raid0 "software" ( via la commande mdadm )

mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/xvdc /dev/xvdd

Ce qui nous donne :

Capture_d_e_cran_2015-05-17_a__10.48.43.png

Un petit check :

mdadm -D /dev/md0

Maintenant, créons notre système de fichiers sur md0

mkfs.xfs /dev/md0

Enfin il ne nous reste plus qu'à monter cette partition sur un répertoire que nous allons créer: diskRaid

mkdir /home/admin/diskRaid
mount -t xfs /dev/md0 /home/admin/diskRaid/

Dirigeons nous dans ce répertoire et effectuons le second test sur ce disque Raid0

cd /home/admin/diskRaid
dd if=/dev/zero of=bench.dat bs=1M count=1024 oflag=direct

Regardons ce qui se passe pendant le test

Capture_d_e_cran_2015-05-17_a__10.52.27.png

Les deux disques sont en pleine charge, et quelques secondes plus tard ...

Capture_d_e_cran_2015-05-17_a__10.52.37.png

On passe donc de 30 secondes à 18 sec. pour effectuer ce test et un débit d’écriture de 35.5MB/s à 51MB/s

Conclusion

Il est plus intéressant de mettre en place 2 disques en Raid0 qu'avoir un gros disque pour améliorer les IO/s.

Ajoutons un disque au Raid0

Si nous ajoutons un disque à notre Raid0, nous passerons ainsi à 3 disques

Voici le disque à ajouter

  • /dev/xvde

Capture_d_e_cran_2015-05-17_a__14.21.34.png

Ajoutons le à notre raid md0

sudo mdadm --grow /dev/md0 --raid-devices=3 --level=0 --add /dev/xvde
sudo xfs_growfs /dev/md0

Regardons si tout est ok

lsblk

Capture_d_e_cran_2015-05-17_a__14.59.08.png

Vérifions que la partition fasse bien 15G

df -h

Capture_d_e_cran_2015-05-17_a__15.00.30.png

Bien ça me semble parfait, lançons le troisième test

cd /home/admin/diskRaid
dd if=/dev/zero of=bench.dat bs=1M count=1024 oflag=direct

Capture_d_e_cran_2015-05-17_a__15.02.34.png

Résultat :

Capture_d_e_cran_2015-05-17_a__15.03.51.png

Les performances restent les mêmes, certainement limitées par la virtualisation ou simplement physiquement, cependant la charge étant répartie sur 4 disques, l'occupation ne dépasse pas les 65%, ce qui permet d'avoir d'autres processus en parallèles.

L'ajout de disques reste donc très intéressante pour pouvoir encaisser une forte charge d'IO/s .

Bon tests ,

Ch.

Restez informé

inscrivez vous à la newsletter pour recevoir les nouveaux billets par mail. ( formulaire en haut à droite )