Stockage ZFS avec OmniOS sur ESX avec Fibre Channel
Sommaire
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
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
Nous 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>
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
Pour 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
Cela est indiqué également en listant les cartes HBA disponibles :
fcinfo hba-port
C. Création des LUN
sbdadm create-lu <cheminZvol>
sbdadm list-lu
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
Il ne nous reste plus qu’à les formater en VMFS , il faut pour cela aller dans Configuration > Storage > Add Storage
Et vous voilà avec votre Fibre Channel @home ! 😉
III. 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)
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 :
- http://plasmasphere.co.uk/omnios/how-to-setup-fibre-channel-targets-on-omnios/
- http://docs.oracle.com/cd/E23824_01/html/821-1459/fnnop.html
- http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
- http://noonworld.fr/guide-configuration-iscsi/
- http://www.servethehome.com/ibm-serveraid-m1015-part-4/
- http://www.fr.sysadmin-cookbook.net/zfs/
- http://constantin.glez.de/blog/2011/02/frequently-asked-questions-about-flash-memory-ssds-and-zfs#benefit
- http://milek.blogspot.fr/2010/05/zfs-synchronous-vs-asynchronous-io.html
- https://icesquare.com/wordpress/how-to-improve-zfs-performance/
- http://www.hypervisor.fr/?p=4010
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
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
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
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
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