Hébergement d'un serveur ZFS en tant qu'invité virtuel

23

Je suis encore nouveau sur ZFS. J'utilise Nexenta mais je pense à passer à OpenIndiana ou Solaris 11 Express. En ce moment, je suis sur le point d'envisager de virtualiser le serveur ZFS en tant qu'invité dans ESXi, Hyper-V ou XenServer (je n'ai pas encore décidé lequel - je penche vers ESXi pour VMDirectPath et le support FreeBSD).

La principale raison étant qu'il semble que j'ai suffisamment de ressources pour faire le tour, que je pourrais facilement avoir 1 à 3 autres machines virtuelles exécutées simultanément. Surtout Windows Server. Peut-être aussi une machine virtuelle Linux / BSD. J'aimerais que le serveur ZFS virtualisé héberge toutes les données des autres machines virtuelles afin que leurs données puissent être conservées sur des disques physiquement séparés des disques ZFS (montés en iscsi ou nfs).

Le serveur dispose actuellement d'un AMD Phenom II avec 6 cœurs au total (2 déverrouillés), 16 Go de RAM (max) et un HBA LSI SAS 1068E avec (7) disques SATA II de 1 To connectés (planification sur RAIDZ2 avec disque de secours). J'ai également (4) SSD SATA II de 32 Go connectés à la carte mère. J'espère mettre en miroir deux des SSD sur un miroir de démarrage (pour l'hôte virtuel) et laisser les deux autres SSD pour ZIL et L2ARC (pour l'invité ZFS VM). Je suis prêt à ajouter deux disques supplémentaires pour stocker les invités VM et à allouer les sept disques actuels en tant que stockage ZFS. Remarque: la carte mère ne prend pas en charge IOMMU car le 880G ne le prend pas en charge, mais j'ai une carte 890FX qui a IOMMU si cela fait une énorme différence.

Mes questions sont:

1) Est-il sage de faire cela? Je ne vois aucun inconvénient évident (ce qui me fait me demander pourquoi personne d'autre ne l'a mentionné). J'ai l'impression que je pourrais faire un énorme oubli et je détesterais m'y engager, déplacer toutes mes données uniquement pour aller fubar à partir de quelques détails que j'ai manqués.

2) Performances de l'invité virtuel ZFS? Je suis prêt à prendre un petit coup sur les performances, mais je pense que si l'invité VM a un accès complet au disque sur les disques, les performances d'E / S du disque seront à tout le moins négligeables (par rapport à l'exécution de ZFS non virtualisé) . Quelqu'un peut-il en parler par expérience de l'hébergement d'un serveur ZFS en tant qu'invité de machine virtuelle?

osij2is
la source
Vous dites que vous souhaitez héberger des données pour toutes les autres VM. Vous prévoyez vous-même vouloir la déduplication à un moment donné? Si c'est le cas, cela devrait vraiment être sur sa propre machine, car la déduplication est très gourmande en mémoire. Pourquoi ne pas jeter un œil à quelque chose comme SmartOS pour vos besoins ZFS? De cette façon, vous obtenez également un hyperviseur.
devicenull
J'ai pensé à la déduplication mais pour l'instant, non, je préfère ne pas l'utiliser. Je vais enquêter sur SmartOS. Je n'en ai pas entendu parler alors je vais vérifier cela.
osij2is

Réponses:

38

J'ai construit un certain nombre de ces configurations de stockage ZFS «tout-en-un». Inspirée initialement par les excellents articles de Ubiquitous Talk , ma solution adopte une approche légèrement différente de la conception matérielle, mais donne le résultat d'un stockage ZFS virtualisé encapsulé.

Pour répondre à vos questions:

  • Déterminer s'il s'agit d'une approche sage dépend vraiment de vos objectifs. Qu'est-ce que vous essayez d'accomplir? Si vous avez une technologie (ZFS) et que vous recherchez une application, alors c'est une mauvaise idée. Il vaut mieux utiliser un contrôleur RAID matériel approprié et exécuter vos machines virtuelles sur une partition VMFS locale. C'est le chemin de la moindre résistance. Cependant, si vous avez une raison spécifique de vouloir utiliser ZFS (réplication, compression, sécurité des données, portabilité, etc.), cela est certainement possible si vous êtes prêt à faire l'effort.

  • Les performances dépendent fortement de votre conception, que vous exécutiez sur du métal nu ou virtuel. Il est essentiel d' utiliser le passthrough PCI (ou AMD IOMMU dans votre cas), car vous fourniriez à votre machine virtuelle ZFS un accès direct à un contrôleur de stockage SAS et à des disques. Tant que votre machine virtuelle dispose d'une quantité appropriée de ressources RAM et CPU, les performances sont presque natives. Bien sûr, la conception de votre piscine est importante. Veuillez considérer les miroirs par rapport à RAID Z2. ZFS évolue sur les vdev et non sur le nombre de disques .


Ma plate-forme est VMWare ESXi 5 et mon système d'exploitation compatible ZFS préféré est NexentaStor Community Edition .

Ceci est mon serveur domestique . Il s'agit d'un HP ProLiant DL370 G6 exécutant ESXi sur une carte SD interne. Les deux disques en miroir de 72 Go au centre sont liés au contrôleur RAID Smart Array P410 interne et forment un volume VMFS. Ce volume contient une machine virtuelle NexentaStor. N'oubliez pas que la machine virtuelle ZFS doit vivre quelque part sur un stockage stable.

Il y a un contrôleur LSI 9211-8i SAS relié au boîtier cage d'entraînement six disques SATA de 1 To à droite. Il est transmis à la machine virtuelle NexentaStor, permettant à Nexenta de voir les disques comme une configuration RAID 1 + 0. Les disques sont el-cheapo Western Digital Vert WD10EARS disques alignés correctement avec une version modifiée zpoolbinaire.

Je n'utilise pas de périphérique ZIL ou de cache L2ARC dans cette installation.

entrez la description de l'image ici

La machine virtuelle a 6 Go de RAM et 2 processeurs virtuels alloués. Dans ESXi, si vous utilisez le passthrough PCI, une réservation de mémoire pour la quantité totale de RAM attribuée à la machine virtuelle sera créée.

Je donne à la NexentaStor VM deux interfaces réseau. L'un est pour la gestion du trafic. L'autre fait partie d'un vSwitch séparé et possède une interface vmkernel (sans liaison montante externe). Cela permet à la machine virtuelle de fournir un stockage NFS montable par ESXi via un réseau privé. Vous pouvez facilement ajouter une interface de liaison montante pour fournir un accès aux hôtes externes.

Installez vos nouvelles machines virtuelles sur la banque de données exportée par ZFS. Assurez-vous de définir les paramètres «Démarrage / arrêt de la machine virtuelle» dans ESXi. Vous souhaitez que la machine virtuelle de stockage démarre avant les systèmes invités et s'arrête en dernier.


entrez la description de l'image ici

Voici les résultats bonnie ++ et iozone d'une exécution directement sur la machine virtuelle NexentaStor. La compression ZFS est désactivée pour que le test affiche des nombres plus pertinents, mais en pratique, la compression par défaut ZFS (pas gzip) doit toujours être activée.

# bonnie++ -u root -n 64:100000:16:64

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
saint           12G   156  98 206597  26 135609  24   410  97 367498  21  1478  17
Latency               280ms    3177ms    1019ms     163ms     180ms     225ms
Version  1.96       ------Sequential Create------ --------Random Create--------
saint               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
    64:100000:16/64  6585  60 58754 100 32272  79  9827  58 38709 100 27189  80
Latency              1032ms     469us    1080us     101ms     375us   16108us

# iozone -t1 -i0 -i1 -i2 -r1m -s12g

    Iozone: Performance Test of File I/O

    Run began: Wed Jun 13 22:36:14 2012

    Record Size 1024 KB
    File size set to 12582912 KB
    Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
    Output is in Kbytes/sec
    Time Resolution = 0.000001 seconds.
    Throughput test with 1 process
    Each process writes a 12582912 Kbyte file in 1024 Kbyte records

    Children see throughput for  1 initial writers  =  234459.41 KB/sec
    Children see throughput for  1 rewriters        =  235029.34 KB/sec
    Children see throughput for  1 readers          =  359297.38 KB/sec
    Children see throughput for 1 re-readers        =  359821.19 KB/sec
    Children see throughput for 1 random readers    =   57756.71 KB/sec
    Children see throughput for 1 random writers    =  232716.19 KB/sec

Il s'agit d'un graphique NexentaStor DTrace montrant les IOPS et les taux de transfert de la VM de stockage pendant le test. 4000 IOPS et 400+ mégaoctets / seconde est assez raisonnable pour de tels disques bas de gamme. (grande taille de bloc, cependant) entrez la description de l'image ici

Autres notes.

  • Vous voudrez tester vos SSD pour voir s'ils peuvent être présentés directement à une machine virtuelle ou si DirectPath choisit le contrôleur de carte mère entier.
  • Vous n'avez pas beaucoup de puissance CPU, alors limitez l'unité de stockage à 2 vCPU.
  • N'utilisez pas RAIDZ1 / Z2 / Z3 sauf si vous avez vraiment besoin de l'espace disque.
  • N'utilisez pas de déduplication. La compression est gratuite et très utile pour les VM. La déduplication nécessiterait beaucoup plus de RAM + L2ARC pour être efficace.
  • Commencez sans les SSD et ajoutez-les si nécessaire. Certaines charges de travail n'atteignent pas le ZIL ou le L2ARC .
  • NexentaStor est un package complet. Il y a un avantage à avoir une interface graphique de gestion solide, cependant, j'ai également entendu parler de succès avec Napp-It .
ewwhite
la source
+1. Merci pour toutes les informations! Pour répondre à votre question, je fais cela pour plusieurs raisons. Je fais cela en grande partie pour tirer parti des autres cœurs de processeur pour créer une ou deux autres machines virtuelles (ne faisant pas ZFS) et pour fournir une cible iSCSI à mon serveur virtuel Opteron. Mes raisons pour ZFS sont (sans ordre particulier) la compression et la sécurité et la réplication des données. Dedupe a l'air très cool, mais en termes de ressources et de mes données, je ne sais pas si c'est nécessaire. J'utilise Nexenta en ce moment, mais j'envisageais de passer à Solaris Express ou OpenIndiana si je continuais à empiler sur les disques pour dépasser la limite de 18 To.
osij2is
Donc, je comprends votre commentaire sur l'utilisation ou non des SSD pour L2ARC ou ZIL et je suis prêt à le faire. Voyez d'abord les performances, PUIS déterminez s'il faut ajouter ZIL et / ou ARC. Quant à la mise en miroir vs RAIDZ, après avoir lu vos commentaires et lu ce billet de blog ( constantin.glez.de/blog/2010/01/… ), je suppose que la mise en miroir a un léger avantage. Je n'ai pas vraiment besoin d'espace disque mais si je peux avoir des capacités de redondance et de lecture / écriture rapide, je pense que je vais passer à cela. Quel que soit l'espace de stockage dont je pouvais sortir, cela n'en valait vraiment pas la peine.
osij2is
De plus, n'oubliez pas que la compression est utile. Je paie pour Nexenta commercial pour les systèmes clients et tout ce qui dépasse 18 To. Mais les mêmes conseils s'appliquent à OpenIndiana.
ewwhite
Utilisez-vous un vnic E1000 ou un vnic VMXNet3 pour le réseau NFS? Parce que je n'obtiens que 1 Gbit / s entre Nexenta / Solaris et VMware en utilisant une configuration similaire et je ne peux pas comprendre comment obtenir plus de vitesse. Quelle version de NexentaStor? Je soupçonne que la version dont ils disposent actuellement est cassée ...
Josh