Raid logiciel (MD raid) sous proxmox 4

print

Proxmox 4 est sorti et j’en ai profité pour réinstaller proprement mon serveur de virtualisation.

Seulement voilà, proxmox ne gère pas le raid logiciel nativement. Voici comment faire !

Quelques explications

Proxmox ne supporte pas le raid logiciel, car celui-ci est moins performant que le raid matériel (c’est le cas de beaucoup de solutions de virtualisation bare metal tels que vmware esxi)

Étant donné le prix des cartes raid matériel, j’ai opté pour une solution logicielle, car mon usage ne requiert pas une quantité d’io très élevée. De plus, le raid logiciel est en sois assez portable. Un linux et ça démarre.

Nous allons créer 2 volumes raid md0 et md1. md0 contiendra la partition root. md1 contiendra le LVM nécessaire aux snapshots proxmox

La partition root sera simplement en raid1, nous ajouterons le lvm uniquement sur /var/lib/vz. J’ai pu tester cette configuration depuis plus d’une semaine et celle-ci fonctionne bien (backup a chaud, …)

 

Note:

Cette méthode ne semble pas fonctionner si vous gardez un boot de type UEFI sur un système de partition GPT.

il existe une autre méthode qui consiste à installer une debian nu avec un raid logiciel et ensuite de la configurer (https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Jessie) .

Merci à cdn46 pour la précision

Étapes

  • Installer proxmox
  • Partitionner le 2eme volume
  • Initialiser le RAID sur le 2eme volume (md0)
  • Copier tout le FS de proxmox dans ce 2eme volume
  • Configurer le 2eme volume
  • Installer grub sur le 2eme volume
  • Redémarrer sur le 2eme volume
  • Copier le schéma des partitions du 1er volume et l’intégrer au raid 1
  • Installer grub sur le 2eme volume.
  • Laisser le raid se synchroniser.
  • Initialiser le raid et le LVM sur md1
  • Créer les partitions /var/lib/vz et la swap sur le LVM
  • Finir la configuration (/etc/fstab)

Configuration requise

  • Un ordinateur avec 2 disques identique (raid 1)
  • Pré installer proxmox de manière basique sur /dev/sda (je ne reviendrai pas sur ce point)

Partitionnement du 2eme volume

Pour partitionner simplement, j’utilise l’excellent cfdisk. Un outil de partitionnement simple en ncurses.

Nb: pour le test, mes disques ne font que 32Go chacun, de manière a éviter une longue synchro du raid. Je vais donc allouer 10Go pour le système et le reste pour le LVM.
cfdisk /dev/sdb

Si votre disque est neuf, cfdisk vous demande le type de partitionnement. Sélectionnez « dos »

Nb: s’il n’est pas neuf, un petit dd if=/dev/null of=/dev/sdb durant quelques secondes après avoir supprimé les partitions avec cfdisk le remettront à zéro

Pour commencer sélectionner « New » indiqué la taille de votre partition système. Dans mon cas, j’écris 10G (c’est à vous de voir, je dirais 50Go sont largement suffisant). Ensuite, je sélectionne « Primary » car je souhaite une partition primaire.

Activez le flag « bootable » en appuyant une fois sur enter (la partition /dev/sdb1)

Ensuite, recommencez via « New » et allouez l’espace restant en « primary »

Enfin, avant de quitter n’oubliez pas de faire « write » et ensuite d’écrire « yes » pour valider votre choix.

Une fois terminé, le partitionnement devrait ressembler à ceci.

cfdisk-sdb

 

Initialisation du RAID sur md0 (/)

Pour commencer, il faut installer l’utilitaire de raid logiciel via
apt-get update

apt-get install mdadm

Nb: laissez les options par défaut lors de l’installation.

Ensuite, on initialise le raid software via
mdadm –create –level=1 -n 2 /dev/md0 missing /dev/sdb1
et on indique « yes » puis enter sur la question suivante

Enfin un petit cat /proc/mdstat nous permet de voir que notre raid tourne, mais uniquement sur un seul disque pour le moment.

Copie du système de fichier proxmox dans le raid logiciel

D’abord, on formate la partition en ext4 via

mkfs.ext4 /dev/md0

et ensuite, on la monte via

mkdir /mnt/copy && mount /dev/md0 /mnt/copy

Un petit df -h nous montre bien que la partition est montée.

Avant de copier le système de fichiers, il est important de couper le service pve-cluster car c’est celui qui peuple /etc/pve. Au reboot, si proxmox trouve des fichiers dans ce dossier avant que pve-cluster démarre (c’est lui qui peuple le contenu), il ne démarrera pas et proxmox sera inutilisable.

/etc/init.d/pve-cluster stop

Enfin, un petit df -h nous montre qu’il n’y a plus de point de montage sur /etc/pve.

Nous allons commencer par copier les fichiers à l’exception des points de montages type système (sys, proc, dev, tmp, run et mnt)

cp -rp /bin/ /boot/ /etc/ /.gnupg/ /home/ /lib /lib64 /media/ /opt/ /root/ /sbin/ /srv/ /usr/ /var/ /mnt/copy/

Ensuite, on purge /mnt/copy/var/lib/lxcfs via un rm -rf /mnt/copy/var/lib/lxcfs/*

et enfin, on recrée les dossiers systèmes utiles.

mkdir /mnt/copy/sys /mnt/copy/proc /mnt/copy/dev /mnt/copy/tmp /mnt/copy/run /mnt/copy/mnt

Configuration du 2eme volume

C’est qu’il faut être attentif, on va utiliser chroot pour réinstaller grub.

Pour commencer, on va modifier la config du fstab pour ne pas monter la partition data et la swap au reboot.

On édite le fichier /mnt/copy/etc/fstab et on commente la ligne /dev/pve/data et /dev/pve/swap

Ensuite, on va désactiver les UUID sur grub. Pour cela éditez le fichier /mnt/copy/etc/default/grub  et décommentez GRUB_DISABLE_LINUX_UUID=true

Enfin, on passe au chroot pour réinstaller grub.

On monte /dev dans le futur chroot via:  mount –bind /dev/ /mnt/copy/dev/

et ensuite, on entre dans celui-ci via chroot /mnt/copy/

enfin, on configure grub via update-grub et un update-initramfs -u (ps: vous pouvez ignorer d’éventuelles erreurs)

pour finir, on installe grub sur notre nouveau disque via grub-install /dev/sdb

Vérifications

Enfin, nous pouvons quitter le chroot via exit et redémarrer sur le 2eme disque dur

Un bon moyen de vérifier que tout à bien fonctionné est de regarder via df -h si le / est bien sur /dev/md0

md0-ok

Ensuite, vérifiez si tous les services proxmox sont bien UP

Nb: corosync est off, c’est normal, il ne démarre que si proxmox est en cluster

services-up

 

Remettre le disque /dev/sda à zéro et copier le schéma des partitions.

Ouvrez cfdisk via cfdisk /dev/sda et supprimez toutes les partitions. N’oubliez pas de sauvegarder.

Ensuite faite un dd if=/dev/zero of=/dev/sda (10 secondes) et interrompez le via control-C

Si vous relancez cfdisk, il devrait vous demander le type de partition. Ne continuez pas et quittez simplement via control-C

Pour copier le schéma des partitions, nous allons utiliser la commande suivante:

sfdisk -d /dev/sdb | sfdisk -f /dev/sda

Enfin, un dernier cfdisk nous montrera que le schéma est identique à notre précédent partitionnement.

Pour conclure cette étape, un dernier petit redémarrage assurera que le schéma des partitions est correctement détecté avant l’ajout du volume au raid

Intégration au raid 1 et installation de grub

On install grub: grub-install  /dev/sda

On ajoute le disque: mdadm –add /dev/md0 /dev/sda1

et enfin, on attend que le raid sois synchro en regardant avec la commande watch cat /proc/mdstat

NB: ne redémarrez pas votre serveur tant que la synchro n’est pas complète !

Création du 2eme volume raid et du LVM pour les DATA

On crée le 2eme volume en une fois via la commande

mdadm –create –level=1 -n 2 /dev/md1 /dev/sda2 /dev/sdb2

et on regarde via watch cat /proc/mdstat que le raid sois synchro.

Ensuite, on initialise le volume physique LVM via

pvcreate /dev/md1

Ensuite, on va créer le groupe de volume « pve »

vgcreate pve /dev/md1

Maintenant, il est temps de créer les groupes de volumes data et swap. Notez qu’il est important de ne pas le remplir intégralement pour permettre au snapshot de fonctionner !

Pour vérifier la taille de votre volume group, vous pouvez faire vgdisplay et regarder la ligne Free PE / Size

Création du swap (1 fois votre ram): lvcreate  -L 2G -n swap pve

Création du volume data pour /var/lib/vz: lvcreate  -L 18G -n data pve

Nb: -L 2G veut dire: taille de 2Go, adaptez donc cela à votre schéma de partitionnement.

Enfin, on vérifie que tout s’est bien passé via lvdisplay

pve

 

Fin de la configuration

Formatage de la partition data en ext4 via mkfs.ext4 /dev/pve/data

Initialisation de la swap: mkswap /dev/pve/swap

La dernière étape consiste à décommenter les 2 lignes commentés précédemment dans le fichier /etc/fstab (data et swap)

Enfin, n’oubliez pas de nettoyer le contenu de /var/lib/vz via rm -rf /var/lib/vz/*

Pour conclure, on reboot et on vérifie que tout est ok.

 

Tester si tout est en ordre

On vérifie que tous les services sont ok via l’interface de proxmox

services-up

Un petit cat /proc/mdstat permet de vérifier que le raid est bien synchroniser

et enfin, un df -h permet de voir si tout est monté correctement.

Conclusion

Le raid logiciel est maintenant fonctionnel sur proxmox 4.

N’oubliez pas de le monitorer afin de prévenir d’éventuelles désynchro.

Si vous rencontrez des problèmes ou si cela fonctionne parfaitement, n’hésitez pas à poster un commentaire afin de confirmer / améliorer ce tutoriel.

 

2 comments

  1. Bonjour, cela ne fonctionne pas avec un système en UEFI (dans mon cas, serveur IBM X3200M3 avec deux hdd sata de 250GB identiques).
    L’installateur de Proxmox créé le partitionnement suivant en gpt (sur une table de partition dos créée au préalable) :
    ==================================================
    Disk /dev/sda: 232.9 GiB, 250059350016 bytes, 488397168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt

    Device Start End Sectors Size Type
    /dev/sda1 34 2047 2014 1007K BIOS boot
    /dev/sda2 2048 262143 260096 127M EFI System
    /dev/sda3 262144 488397134 488134991 232.8G Linux LVM

    Disk /dev/mapper/pve-root: 58 GiB, 62277025792 bytes, 121634816 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/mapper/pve-swap: 4 GiB, 4294967296 bytes, 8388608 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/mapper/pve-data: 154.8 GiB, 166174130176 bytes, 324558848 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    ==================================================

    A ce stade, j’avais deux disques identiques puisque j’ai procédé à deux installations de PVE (lors de la première « fdisk -l » sortant une table gpt sur /dev/sda, j’ai voulu vérifier et du coup j’ai écrit une nouvelle table de partition dos sur /dev/sdb dans le but de voir comment PVE gérait le partitionnement, j’ai sorti physiquement /dev/sda pour mettre /dev/sdb à son emplacement et recommencer l’install)
    On peut donc à partir de ce moment considérer que c’est une solution puisque qu’il ne reste qu’à créer l’ensemble raid.

    J’ai trouvé ici un autre tuto qui utilise l’outil « sfdisk » afin de copier la table de partition d’un disque à l’autre : https://blog.bravi.org/?p=1100
    J’aurai très bien pu créer un ensemble raid de suite mais j’ai voulu voir si la commande « sfdisk -d /dev/sda | sfdisk -f /dev/sdb » était ok dans mon cas, voilà le résultat, ça ne fonctionne pas (on a juste le type de table de partition qui est créé soit gpt) :
    ===================================================
    Disk /dev/sdb: 232.9 GiB, 250059350016 bytes, 488397168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    ===================================================

    Poursuite des recherches, j’arrive sur ce post :
    https://susilon.wordpress.com/2014/06/19/how-to-install-proxmox-ve-3-2-on-software-raid-mdraid/

    Pas de chance, au moment d’initialiser avec la commande « mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb2 », le système me sort un « device busy blablabla … »

    Par ailleurs, quelques commentaires avisés indiquent que cette méthode relève du « bricolage » et n’est pas fiable (?)
    Donc pour ma part, je laisse tomber et je m’oriente vers ce qui semble peut-être plus simple, une installation de Proxmox sur une minimale de Debian Jessie :
    https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Jessie

    Christophe

    1. En effet ,c’est bien possible que cela ne fonctionne pas avec un schéma GPT.
      Sinon, il est vrai que cette méthode est un peu archaïque, mais utile dans le cas ou on ne souhaite pas remettre son proxmox à zéro.

      Merci du feedback 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.