Stockage ZFS avec OmniOS sur ESX avec Fibre Channel

I. Présentation

Dans cet article nous allons naviguer entre plusieurs milieux bien intégrés au sein du SI actuel, à savoir la virtualisation et le stockage. Pas à pas nous mettrons en place une solution de stockage basé sur une distribution OmniOS et le système de fichier ZFS puis celui-ci sera exposé à l'hyperviseur VMware ESXi via une liaison Fibre Channel en Point-to-Point.

Prérequis :

  •  Une machine faisant office de serveur stockage (OmniOS)
  •  Une machine faisant office d'hyperviseur (VMware ESXi dans cet exemple)
  •  2 cartes Fibre Channel QLogic (ici les modèles sont des QLE2460) connectées en Point-to-point donc sans switch FC (http://en.wikipedia.org/wiki/Fibre_Channel_point-to-point).
    • Les cartes peuvent être trouvées à un prix abordable sur eBay sous la référence QLE2460 (~40€ la paire + 1 fibre optique connecteur LC/LC à 10€ )

Dans mon cas mes machines sont les suivantes :

  • Stockage
    • Processeur AMD Phenom II X4 925
    • Carte mère Gigabyte GA-890GPA-UDH3
    • 16Go DDR3
    • IBM ServeRaid M1015 SAS flashé en firmware IT (ZFS à besoin dans le meilleur des cas d’avoir les disques présentés directement (passthrough) sans aucune sur-couche raid puisque il fera du raid logiciel par la suite)
      • 5 disques SATA Samsung spinpoint F1 de 1To 7200trs
      • 2 SSD Kingston V200 de 60Go
      • 1 SSD Kingston V300 de 120Go
      • 1 Carte Fibre Channel 4gb QLogic QLE2460
  • ESXi 5.5
    • Processeur Intel Core i7 4770s
    • Carte mère ASUS H87M-E C2
    • 32Go DDR3
    • 2 Cartes Intel Pro 1000 CT
    • 1 Carte Fibre Channel 4gb QLogic QLE2460

II. Mise à jour des cartes HBA QLogic

Les cartes ont été mise à jour avec le dernier firmware disponible à savoir 3.63. Au cas où cela se produirait les cartes étaient forcées en 2Gb après la mise à jour du firmware. La modification de ce paramètre se trouve dans le BIOS des cartes QLogic (Data rate).

OmniOS (Stockage)

Lien de téléchargement: http://omnios.omniti.com/

Nous avons besoin de :

  • Configurer le réseau (adresse IP statique)
  • Activer SSH, installer et activer le service stockage
  • Configurer le filesystem ZFS et les volumes
  • Configurer la carte HBA et les LUN

Informations : Les login par défaut est root et il n’y a pas de password. Pour en ajouter un après être connecté en root il faut taper passwd root.

Configurer le réseau

Étant nouveau sur l’environnement Sun, je me suis appuyé sur le wiki OmniOS très bien expliqué http://omnios.omniti.com/wiki.php/GeneralAdministration

Activer SSH

La gestion des services sous OmniOS se fait avec la commande svcadm.

svcadm enable ssh

Pour avoir le statut du service (ONLINE,OFFLINE ect) il faut utiliser la commande svcs. Example : svcs ssh

Installation des paquets serveur de stockage

pkg install storage-server

Activation du service stockage :

svcadm enable stmf

III. Configurer le filesystem ZFS et les volumes

L’avantage de OmniOS ou des systèmes dérivant de Solaris est d’embarquer le système de fichier ZFS (http://en.wikipedia.org/wiki/ZFS) avec ses principaux avantages :

  • Storage pool (zpool)
  • Snapshot
  • Cache ARC (ram), L2ARC (média cache L2), ZIL (média logs)
  • Auto-repair (scrub)
  • Software raid (stripe, mirror, raidz 1,2,3)
  • Data integrity (checksum des blocs)
  • Copy-on-write
  • Déduplication
  • Compression
  • Ect

A. Configuration de notre zpool

Le zpool est un espace virtuel de stockage (un pool) regroupant plusieurs médias de stockage physique. Il va être représenté comme un seul disque virtuel.

Afin de créer notre pool nous avons besoin d’identifier nos disques. Il est possible d’obtenir cette information avec la commande format.
Ce qui nous intéresse ici c’est le nom des disques c1xxxxxx par exemple c1t50024E90034D7D6Fd0

ZFSformat

Une fois ceci fais nous passons à la création du zpool que nous nommerons ZVM. Celui-ci sera constitué de 2 vdev en miroir, 1 cache L2 (L2ARC) et 1 slog (ZIL) + disque en spare (ayant 5 disques SATA de marque et modèle identique).

Voici la commande de création de notre zpool. Il faut remplacer hddX par le nom du disque vu précédemment (c1xxxx).

zpool create ZVM mirror hdd1 hdd2 mirror hdd3 hdd4 cache hdd5 log hdd6 spare hdd7

La priorité de ZFS étant de conserver l’intégrité des données  plutôt que fournir des performances pures (même s’il est adroit aussi sur ce point avec un peu de matériel !).

Je me permets de préciser que les performances du pool de stockage (zpool) dérive de beaucoup de facteurs et notamment le nombre de vdev dans le pool ainsi que leurs géométries.

Tout ceci est très bien résumé sur ce lien http://nex7.blogspot.fr/2013/03/readme1st.html au chapitre « Virtual Devices Determine IOPS ».
Pour afficher le détail du zpool :

zpool status

zpoolStatusNous avons donc un zpool composé de :

  • 2 vdev (mirror-0 et mirror-1)
  • 1 disque de log (logs)
  • 1 disque de cache (cache)
  • 1 disque de spare (spares)

Maintenant que ceci est fait il faut configurer certaines options ZFS. Pour afficher les options/informations disponibles sur notre zpool il faut faire zfs get all <zpool>
Options utilisés sur cette installation :

  •  zfs set recordsize=8k ZVM
    • Définit la taille des blocs pour notre zpool
  • zfs set compression=lz4 ZVM
    • Active la compression lz4
  •  zfs set mountpoint=/volumes/ZVM ZVM
    • Changement du point de montage par défaut
  • zpool set autoreplace=on ZVM
    • Remplace le disque défectueux par le disque de spare automatiquement si une erreur est détectée
  • zpool set autoexpand=on ZVM
    • Permet d’étendre le pool dans le futur
  • zfs set quota=1.4T ZVM
    • Une des best practice étant de réserver environ 20% d’espace libre sur un zpool afin d’éviter une dégradation des performances.
    • 1.76To – 20% = 1.4To (taille du zpool – 20%)

Désormais nous devons créer nos volumes (zvol) block afin de les présenter à l’hyperviseur au travers de la liaison Fibre Channel.
Nous allons donc créer 2 zvol dans les 1.4To restant ce qui nous donne environ 690Go par zvol.

zfs create –V 690g ZVM/vm1
zfs create –V 690g ZVM/vm2

Vous pouvez afficher la configuration des volumes comme ceci :

zfs get all <zvol>

zfsZvolOption

B. Configuration des cartes HBA sur OmniOS

Nous allons commencer par lister les cartes disponibles (1 carte dans notre tp)

mdb -k
::devbindings -q qlc
$q

listHBAPour rappel : qlc= initiator mode et qlt = target mode

Nous devons passer notre carte en mode target

update_drv -d -i ‘pciex1077,2432’ qlc

Vous allez recevoir une erreur : Cannot unload module: qlc Will be unloaded upon reboot.

update_drv -a -i ‘pciex1077,2432′ qlt

Vous allez recevoir une autre erreur :

devfsadm: driver failed to attach: qlt  Warning: Driver (qlt) successfully added to system but failed to attach

Redémarrer le serveur :

init 6

Nous allons maintenant vérifier que ces modifications ont bien été prises en comptes avec la commande :

stmfadm list-target –v

listTargert

Cela est indiqué également en listant les cartes HBA disponibles :

fcinfo hba-port

hbaSAN

C. Création des LUN

sbdadm create-lu <cheminZvol>

createLunVérification :

sbdadm list-lu

listLUN

lunList

Dernière étape, on « publie » les lun :

stmfadm add-view <GUID>
stmfadm add-view 600144f0ccc8c13d0000549231220001
stmfadm add-view 600144f0ccc8c13d0000549231360002

Côté hyperviseur, il faut aller dans Configuration > Storage Adapters

hbaESXI
Il ne nous reste plus qu’à les formater en VMFS , il faut pour cela aller dans Configuration > Storage > Add Storage

esxiAddLun

Et vous voilà avec  votre Fibre Channel @home ! 😉

latencyIII. Le mot de la fin ..

Il est vrai que la machine stockage peut paraître surdimensionné pour du stockage en comparaison avec un NAS. Avec ZFS, certains paramètres comme le CPU ou la RAM ne doivent pas être négligés (tout dépend aussi des besoins et exigences de chacun). ZFS est friant de la mémoire ram, car il s’en sert environ à 80% comme cache pour ses opérations (ARC)

arc size
Capture Cacti du lab (paramètre arc_size)

La tendance est d’environ 1Go de RAM par To de stockage supplémentaire tout en ayant une base d’au moins 2 ou 4Go.

Le processeur permet de gérer plus sereinement la compression, mais également la déduplication qui est vraiment gourmande en utilisation CPU. Je vous conseille d’activer la compression (lz4), mais pas déduplication.

Je posterais quelques tests de performance un peu plus tard afin d’avoir une idée. Pour le moment je dispose de 8 VM de toute sorte (Active Directory, Exchange 2013, serveur web, Veeam B&R) tout OS confondu (OpenBSD, Debian, Windows serveur 2012) qui démarrent, fonctionnent et réagissent rapidement.

Pour aller plus loin voici les différents liens qui m’ont permis de réaliser ce tutoriel :

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

5 thoughts on “Stockage ZFS avec OmniOS sur ESX avec Fibre Channel

  • bonjour,
    Votre article est intéressant !
    Pour la déduplication, c’est un mode à utiliser avec précaution, mais n’est pas un problème si l’on utilise toujours les même blocs (ou presque) comme un fichier brut de MV (ou les blocs changent peu)
    Je sauvegarde environ 170Go/jour sur un disque de 2To et j’ai presque 2 mois de MV (5MV)
    J’ai eu fais de la déduplication avec un dual-core sur une carte mère en 775 (j’utilisais du SAS pour le cache ou des clefs USB de 16Go, environs 4 ou 6 clefs, mais en secondarycache=none, le cache à none, implique très peu de débits)
    aujourd’hui, j’utilise un bixéon avec du SSD, mes pools sont en iscsi (les 775 étant sous NAS4Free avec 4Go de RAM seulement (je trouve cette solution pratique pour utiliser du vieux matos 😉
    Il faut surtout que le fichier RAW ne sois pas décalé (un décalage de un octet sur un fichier de 50Go et l’effet est totalement perdu).
    Mais, c’est surtout pour la sauvegarde, pour une utilisation directe, le mieux est d’avoir un pool (avec ou sans compression) ni dédup.
    Cordialement,
    Marcth25

    Répondre
  • Bonjour marcth25,

    Merci pour votre commentaire !
    Je vais suivre votre conseil et activer la déduplication sur un second serveur FreeNAS que j’utilise pour du backup de VM. Celui-ci possédant un Xeon de bonne facture. Il devrait pouvoir bien encaisser cette feature.
    Je ne vous suis pas sur le fichier RAW ?

    Cordialement,

    Damien

    Répondre
  • Hello,

    le calcul sur la deduplication avec zfs est simple. Tant que la ddt se trouve en ram pas de souci. Si elle sort de la ram c’est terminer. Par defaut la ddt peut utiliser 25% de la ram (cela peut etre modifier simplement).

    Il faut ensuite compter 320 bytes par block deduplifie. Si vous voulez le meilleur taux de deduplication possible il faut mettre le recordsize a 4k mais cela implique aussi que votre ddt va vite grossir. Le mieux (pour moi qui fait du file et non du block) et de partir sur un recordsize a 128k et de base mais calcul sur un blocksize de 32k (ce qui est mon blocksize moyen).

    Attention avec la l2arc toutefois, car la ddt va pouvoir descendre sur le l2arc automatiquement. Dans ce cas prenez une l2arc tres rapide car l’impact de perf est deja eleve.

    en tout cas ca fait plaisir de voir un autre site sur zfs en francais

    Répondre
  • Salut nOonworld,

    Merci pour ton commentaire, ton article m’a bien aidé pour construire celui-ci.
    Je suis moi même en plein apprentissage sur ZFS et les divers avis et retour d’expérience m’intéresse beaucoup pour progresser.
    N’hésite pas si tu souhaite poster tes propres articles ou partager ton expérience sur le sujet.

    Damien

    Répondre
  • tutoriel sympathique sur ZFS.
    je vous conseille d’aller faire un tour sur le site http://www.napp-it.org

    ce site propose un WEB-GUI pour gérer et administrer des stockage ZFS

    ps le site est en allemand et en anglais

    Répondre

Répondre à Damien Annuler la réponse

Votre adresse e-mail 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.