¿Cuáles son las implicaciones de rendimiento de ejecutar máquinas virtuales en un host ZFS?

11

Estoy considerando migrar de ext3 a ZFS para el almacenamiento de datos en mi host Debian Linux, usando ZFS en Linux . Una característica increíble de ZFS que realmente quiero es sus garantías de integridad de datos. La capacidad de hacer crecer trivialmente el almacenamiento a medida que aumentan mis necesidades de almacenamiento también es algo que espero con ansias.

Sin embargo, también ejecuto algunas máquinas virtuales en el mismo host. (Aunque normalmente, en mi caso, solo se ejecuta una VM en el host al mismo tiempo)

Teniendo en cuenta el comportamiento de la suma de comprobación de datos y la copia en escritura de ZFS, junto con el hecho de que las imágenes de disco de VM son archivos comparativamente grandes (el archivo de imagen de disco de mi VM principal actualmente se encuentra en 31 GB), ¿cuáles son las implicaciones de rendimiento dentro del huésped de VM? una migración? ¿Qué pasos puedo tomar para reducir el posible impacto negativo en el rendimiento?

Puedo vivir con menos garantías de integridad de datos en las imágenes de disco de la máquina virtual si es necesario (no hago nada realmente crítico dentro de ninguna de las máquinas virtuales) y puedo separarlas fácilmente del resto del sistema de archivos, pero sería bueno si no No tengo que (incluso selectivamente) desactivar prácticamente la característica que más me hace querer migrar a un sistema de archivos diferente.

El hardware es bastante robusto para un sistema de clase de estación de trabajo, pero no le dará mucha importancia a un servidor de gama alta (32 GB de RAM con raramente> 10 GB en uso, CPU de 6 núcleos a 3,3 GHz, actualmente 2,6 TB utilizables espacio en disco de acuerdo con dfun total de aproximadamente 1.1 TB libre; migrar a ZFS probablemente agregará más espacio libre ) y no planeo ejecutar deduplicación de datos (ya que activar deduplicación simplemente no agregaría mucho en mi situación). El plan es comenzar con una configuración JBOD (obviamente con buenas copias de seguridad), pero eventualmente puedo pasar a una configuración de espejo bidireccional si las condiciones lo justifican.

un CVn
fuente
También tenga en cuenta que ZFS funciona mejor que RAID5 tradicional en términos de IOPS . Las grabaciones de RAIDZ funcionan a la velocidad de un solo disco porque no sufre las penalizaciones de rendimiento de E / S que afectan a RAID5 / 6 tradicional.
Stefan Lasiewski
1
¡Gracias a todos los que han respondido por sus ideas! Definitivamente volveré a esta pregunta más tarde.
un CVn
El comentario de Stefan es ... bueno, es falso. El rendimiento de ZFS RAIDZ es significativamente peor desde una perspectiva IOPS (con lo que generalmente tiene problemas en las máquinas virtuales ) que las matrices RAID5 tradicionales. No asuma una mejora en el rendimiento de escritura al pasar a ZFS. Rara vez es el caso. Las ganancias de rendimiento de lectura dependerán de la RAM disponible para el ARC y del tamaño y delta del conjunto de trabajo. Por lo general, con VM, ZFS ARC termina ayudando con el rendimiento general de lectura en comparación con las alternativas. Las escrituras generalmente sufren, incluso en los espejos, SIEMPRE con raidz.
Nex7
@ Nex7 ¿Cómo se escriben sin RAID desde ZFS pero con un solo dispositivo de almacenamiento, que, por ejemplo, es proporcionado por algún mdraid? ¿ZFS tiene un rendimiento comparable a otros sistemas de archivos porque no se utiliza material RAID sofisticado?
Thorsten Schöning

Respuestas:

4

Dado que ZFS funciona a nivel de bloque, el tamaño de los archivos no hace ninguna diferencia. ZFS requiere más memoria y CPU, pero no es inherentemente significativamente más lento como sistema de archivos. Aunque debe tener en cuenta que RAIDZ no es equivalente en velocidad a RAID5. RAID10 está bien donde la velocidad es una prioridad.

JamesRyan
fuente
4

Es probable que ZFS en hardware decente (es decir, buff) sea más rápido que otros sistemas de archivos, es probable que desee crear un ZIL en una ubicación rápida (es decir, SSD). Esto es esencialmente una ubicación para escribir en caché (bueno, más como un diario en ext3 / 4). Esto permite que el cuadro ack escriba como escrito en el disco antes de que los husos reales tengan los datos.

También puede crear un ARC L2 en SSD para leer el caché. Esto es fantástico en un entorno de VM en el que puede poner los discos físicos de rodillas arrancando varias VM al mismo tiempo.

Las unidades van a los VDEV, los VDEV a los zpools (use discos completos a la vez). Si se trata de un sistema más pequeño, es posible que desee tener un único zpool y (si no le preocupa demasiado la pérdida de datos) un solo VDEV. Los VDEV son donde selecciona el nivel RAID (aunque también puede MIRROR VDEV si tiene suficientes discos). El disco más lento en un VDEV determina qué tan rápido es todo el VDEV.

ZFS tiene que ver con la integridad de los datos: la razón por la que muchas de las herramientas tradicionales para el mantenimiento del sistema de archivos no existen (como fsck) es que el problema que resuelven no puede existir en un sistema de archivos ZFS.

En mi opinión, el mayor inconveniente de ZFS es que si sus sistemas de archivos se acercan por completo (digamos 75% +) se vuelve MUY lento. Solo no vayas allí.

TheFiddlerWins
fuente
2

31GB realmente no es grande en absoluto ...

De todos modos, dependiendo del sistema de archivos que esté utilizando actualmente, es posible que ZFS sea un poco más lento, pero dadas las especificaciones de hardware, puede ser insignificante.

Obviamente, ZFS utilizará una buena porción de RAM para el almacenamiento en caché, lo que puede hacer que sus máquinas virtuales parezcan más ágiles en el uso general (cuando no está haciendo una lectura o escritura intensas). No estoy seguro de cómo ZFS está sintonizado en Linux, pero es posible que deba limitar su ARC, si es posible, para evitar que se escape con toda su RAM (ya que querrá un trozo decente para su sistema host y VM).

Permitiría la compresión (el consejo en estos días es activarla a menos que tenga una buena razón para no hacerlo). Recuerde que esto debe hacerse antes de poner datos en el sistema de archivos. La mayoría de las personas se sorprenden al descubrir que en realidad es más rápido, ya que los algoritmos de compresión generalmente se ejecutarán más rápido que el disco IO. Dudo que cause un gran problema de rendimiento con su procesador de 6 núcleos. No esperaba que las máquinas virtuales se comprimieran mucho, pero logré convertir ~ 470 GB de datos de máquinas virtuales en 304 GB solo con la configuración de compresión predeterminada.

No te molestes con la deduplicación, solo volverá para atormentarte más tarde y pasarás semanas barajando datos tratando de deshacerte de ella.

Si encuentra problemas de rendimiento, la respuesta obvia es agregar un SSD como ZIL / L2ARC o incluso ambos. No es ideal usar un dispositivo para ambos, pero lo más probable es que mejore el rendimiento en un grupo que contenga una pequeña cantidad de discos / vdevs.

Para agregar: Realmente trataría de comenzar con una configuración redundante, si es posible (idealmente espejos), o convertirlos en espejos desde una franja lo antes posible. Si bien ZFS comprobará todos los datos y detectará errores sobre la marcha (o durante un exfoliante), no podrá hacer nada al respecto (sin usar copias = 2, lo que duplicará el uso del disco). Simplemente se quedará con él diciéndole que hay errores en los archivos (probablemente sus imágenes de disco de VM) que no podrá hacer mucho sin eliminar y volver a crear esos archivos.

USD Matt
fuente
"Simplemente te dejará diciéndote que hay errores en los archivos ... sobre los cuales no podrás hacer mucho". Esa es una buena opinión, y lo agradezco. Dicho esto, ahí es donde entran mis copias de seguridad nocturnas. Tal como está, nada se interpone entre mí y la corrupción silenciosa de datos, por lo que incluso si ZFS simplemente se niega a dejarme leer el archivo o una parte de él hasta que lo restaure del (bien conocido ) copia de seguridad, es una gran mejora en las garantías de integridad de datos.
un CVn
En cuanto al tamaño del archivo, no, 31 GB no es exactamente objetivamente grande (aunque todavía es ~ 1.2% de la capacidad total de almacenamiento de mi sistema), pero mi preocupación estaba más en la línea de que la VACA tendría el sistema copiando todos esos datos de ida y vuelta continuamente, un error que JamesRyan corrigió rápidamente .
un CVn
1

Dependiendo de sus casos de uso y máquinas virtuales, consideraría lo siguiente. Deje que el sistema operativo host se encargue de los archivos que está almacenando en los volúmenes ZFS.

Si es posible, cree solo un LUN para cada VM, que solo contenga el sistema operativo y los archivos binarios necesarios. Y presente la posición de almacenamiento para datos individuales como recursos compartidos a través de NFS, samba o iSCSI (o zvols como se menciona en los comentarios). ZFS puede realizar un seguimiento de cada archivo con suma de verificación y tiempos de acceso, etc. Por supuesto, si la velocidad no es tan importante, también podría habilitar la compresión en algunos almacenes de datos. El beneficio sería una capa faltante de otro sistema de archivos. Si crea un LUN para el segundo disco duro virtual y crea un sistema de archivos NTFS además de eso, ZFS tiene que manejar un gran blob binario y no conoce ninguno de los contenidos o archivos, y por lo tanto no puede aprovechar el caché ZIL o ARC en de la misma manera que los archivos del avión podrían.

Al mencionar las ACL, ZFS puede usar las ACL a través de NFSv4 o Samba (si está habilitado). Tengo que admitir que uso ZFS en FreeBSD, y no puedo asegurar cómo habilitar el acoplamiento de ACL de Sambas en volúmenes ZFS. Pero estoy seguro de que esto no debería ser un gran problema.

La deduplicación en combinación con un caché de lectura es una gran ventaja cuando se trata de ahorrar algo de espacio y mejorar las lecturas masivas (tormenta de arranque) ya que todas las máquinas virtuales comienzan a leer los mismos bloques.

Lo mismo ocurre con las instantáneas de ZFS para las máquinas virtuales y los almacenes de datos. Puede crear un script de shell simple, para congelar la VM, tomar una instantánea de la VM y el Datastore y continuar trabajando, o solo el Datastore solo, y clonar la VM para presentar la Instantánea de la original y probar algunas cosas.

Las posibilidades son infinitas con ZFS;)

EDITAR: Espero haberlo explicado un poco mejor ahora

EDIT2: Opinión personal: ¡Considere usar un RAIDZ2 (RAID6) ya que puede soportar una falla de doble disco! Si le queda un solo disco de repuesto, nunca estará mal, pero dos fallas de disco deberían ser suficientes para una reparación rápida. Acabo de publicar mi script para monitorear el estado del disco aquí

Caminante diario
fuente
No estoy seguro de entenderlo. ¿Está diciendo que debería almacenar los archivos que utilizan las máquinas virtuales como archivos separados en el sistema de archivos ZFS, en lugar de como una imagen de disco? ¿Qué pasa con cosas como particiones, sectores de arranque, atributos que ZFS no conoce, ACL de Windows en un contexto de Linux, ...? Te estoy entendiendo mal o estás respondiendo algo diferente a lo que te estoy preguntando. ¿Puede volver a leer la pregunta y editar su respuesta para aclarar cómo aborda mi problema de rendimiento de almacenamiento?
un CVn
Con respecto a las instantáneas: puede que no sea necesario congelar la VM. ZFS usa Copia en escritura (COW), lo que significa que las instantáneas son instantáneas y le proporcionarán una imagen de disco completa. Algunos administradores usan esto para las bases de datos MySQL y PostGRES sin congelar sus bases de datos (por ejemplo, sin tiempo de inactividad), aunque otros primero eliminan las tablas. Si necesita congelar la VM, tomar la instantánea ZFS solo debería tomar unos segundos.
Stefan Lasiewski
Michael, creo que Daywalker se refiere a zvols donde puedes crear un archivo que actúa como un dispositivo de bloque. Usaría NFS, no zvols individuales para máquinas virtuales (bueno, en este caso parece que todo es local, así que solo archivos en los sistemas de archivos). Sí, los zvols pueden ser geniales, pero son una capa adicional de complicación. Y las instantáneas de ZFS son, por definición, consistentes. No significa que el sistema operativo de la VM sabe que necesita vaciar sus datos al disco, pero obtendrá la consistencia del sistema de archivos con el mismo nivel que si perdiera energía en la VM.
TheFiddler gana el
Dedup es muy intensivo en recursos. El uso de la compresión no lo es y (para las máquinas virtuales) probablemente le devolverá mucho espacio debido al espacio en blanco en los sistemas de archivos de la máquina virtual.
TheFiddler gana el
@ MichaelKjörling Sólo editet mi puesto, con la esperanza de una mejor comprensión (también con los comentarios de TheFiddlerWins y Stefan Lasiewski
Daywalker