Hospedar un servidor ZFS como invitado virtual

23

Todavía soy nuevo en ZFS. He estado usando Nexenta pero estoy pensando en cambiarme a OpenIndiana o Solaris 11 Express. En este momento, estoy en un punto de considerar la virtualización del servidor ZFS como invitado dentro de ESXi, Hyper-V o XenServer (aún no he decidido cuál, me estoy inclinando hacia ESXi para VMDirectPath y soporte de FreeBSD).

La razón principal es que parece que tengo suficientes recursos para todos y que fácilmente podría tener otras 1-3 máquinas virtuales ejecutándose simultáneamente. Principalmente Windows Server. Tal vez una VM Linux / BSD también. Me gustaría que el servidor ZFS virtualizado aloje todos los datos para las otras máquinas virtuales para que sus datos puedan mantenerse en discos físicamente separados de los discos ZFS (montar como iscsi o nfs).

El servidor actualmente tiene un AMD Phenom II con 6 núcleos totales (2 desbloqueados), 16 GB de RAM (máximo) y un HBA LSI SAS 1068E con (7) discos SATA II de 1 TB conectados (planeando en RAIDZ2 con repuesto dinámico). También tengo (4) SSD SATA II de 32 GB conectados a la placa base. Espero duplicar dos de los SSD en un espejo de arranque (para el host virtual) y dejar los otros dos SSD para ZIL y L2ARC (para el invitado ZFS VM). Estoy dispuesto a agregar dos discos más para almacenar los invitados de VM y asignar los siete discos actuales como almacenamiento ZFS. Nota: La placa base no es compatible con IOMMU ya que el 880G no es compatible, pero tengo una placa 890FX que tiene IOMMU si hace una gran diferencia.

Mis preguntas son:

1) ¿Es sabio hacer esto? Obviamente no veo ningún inconveniente (lo que me hace preguntarme por qué nadie más lo ha mencionado). Siento que podría estar haciendo un gran descuido y odiaría comprometerme con esto, mover todos mis datos solo para volverme loco por algunos detalles que me perdí.

2) rendimiento de invitado virtual ZFS? Estoy dispuesto a tener un pequeño impacto en el rendimiento, pero creo que si el invitado de VM tiene acceso completo al disco a los discos, como mínimo, el rendimiento de E / S del disco será insignificante (en comparación con la ejecución de ZFS no virtualizado) . ¿Alguien puede hablar de esto desde la experiencia de hospedar un servidor ZFS como invitado de VM?

osij2is
fuente
Dice que desea alojar datos para todas las otras máquinas virtuales. ¿Te ves deseando deduplicación en algún momento? Si es así, esto realmente debería estar en su propia máquina, ya que la deduplicación requiere mucha memoria. ¿Por qué no echar un vistazo a algo como SmartOS para sus necesidades de ZFS? De esa manera también obtienes un hipervisor.
devicenull
He pensado en deduplicar, pero por el momento, no, prefiero no usarlo. Investigaré SmartOS. No he oído hablar de eso, así que lo comprobaré.
osij2is

Respuestas:

38

He creado varias de estas configuraciones de almacenamiento ZFS "todo en uno". Inicialmente inspirado por las excelentes publicaciones en Ubiquitous Talk , mi solución adopta un enfoque ligeramente diferente al diseño del hardware, pero produce el resultado del almacenamiento ZFS virtualizado encapsulado.

Para responder tu pregunta:

  • Determinar si este es un enfoque inteligente realmente depende de sus objetivos. ¿Qué está tratando de lograr? Si tiene una tecnología (ZFS) y está buscando una aplicación para ella, entonces esta es una mala idea. Es mejor usar un controlador RAID de hardware adecuado y ejecutar sus máquinas virtuales en una partición VMFS local. Es el camino de menor resistencia. Sin embargo, si tiene una razón específica para querer usar ZFS (replicación, compresión, seguridad de datos, portabilidad, etc.), definitivamente esto es posible si está dispuesto a esforzarse.

  • El rendimiento depende en gran medida de su diseño, independientemente de si está ejecutando en metal desnudo o virtual. Usar PCI-passthrough (o AMD IOMMU en su caso) es esencial, ya que estaría proporcionando su acceso directo ZFS VM a un controlador de almacenamiento SAS y discos. Mientras su VM tenga asignada una cantidad adecuada de recursos de RAM y CPU, el rendimiento es casi nativo. Por supuesto, el diseño de su piscina es importante. Considere los espejos versus RAID Z2. ZFS escala en vdevs y no en la cantidad de discos .


Mi plataforma es VMWare ESXi 5 y mi sistema operativo preferido compatible con ZFS es NexentaStor Community Edition .

Este es mi servidor de casa . Es un HP ProLiant DL370 G6 con ESXi desde una tarjeta SD interna. Los dos discos duplicados de 72GB en el centro están vinculados al controlador interno Smart Array P410 RAID y forman un volumen VMFS. Ese volumen contiene una VM NexentaStor. Recuerde que la máquina virtual ZFS necesita vivir en algún lugar con almacenamiento estable.

Hay un controlador SAS LSI 9211-8i conectado a la caja de la unidad que aloja seis discos SATA de 1 TB a la derecha. Se pasa a la máquina virtual NexentaStor, lo que permite que Nexenta vea los discos como una configuración RAID 1 + 0. Los discos son unidades WD10EARS Western Digital Green de el-cheapo alineadas correctamente con un zpoolbinario modificado .

No estoy usando un dispositivo ZIL o cualquier caché L2ARC en esta instalación.

ingrese la descripción de la imagen aquí

La VM tiene 6 GB de RAM y 2 vCPU asignadas. En ESXi, si utiliza el paso de PCI, se creará una reserva de memoria para la cantidad total de RAM asignada de la VM.

Le doy a NexentaStor VM dos interfaces de red. Uno es para la gestión del tráfico. El otro es parte de un vSwitch separado y tiene una interfaz vmkernel (sin un enlace ascendente externo). Esto permite que la VM proporcione almacenamiento NFS montable por ESXi a través de una red privada. Puede agregar fácilmente una interfaz de enlace ascendente para proporcionar acceso a hosts externos.

Instale sus nuevas máquinas virtuales en el almacén de datos exportado por ZFS. Asegúrese de establecer los parámetros de "Inicio / apagado de la máquina virtual" en ESXi. Desea que la VM de almacenamiento se inicie antes que los sistemas invitados y se apague por última vez.


ingrese la descripción de la imagen aquí

Aquí están los resultados de bonnie ++ y iozone de una ejecución directamente en la VM NexentaStor. La compresión ZFS está desactivada para que la prueba muestre números más identificables, pero en la práctica, la compresión predeterminada ZFS (no gzip) siempre debe estar habilitada.

# 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

Este es un gráfico NexentaStor DTrace que muestra las IOPS de la VM de almacenamiento y las tasas de transferencia durante la ejecución de la prueba. 4000 IOPS y más de 400 Megabytes / segundo es bastante razonable para estos discos de gama baja. (tamaño de bloque grande, sin embargo) ingrese la descripción de la imagen aquí

Otras notas.

  • Deberá probar sus SSD para ver si se pueden presentar directamente a una máquina virtual o si DirectPath elige el controlador completo de la placa base.
  • No tiene mucha potencia de CPU, por lo tanto, limite la unidad de almacenamiento a 2 vCPU.
  • No use RAIDZ1 / Z2 / Z3 a menos que realmente necesite el espacio en disco.
  • No use la deduplicación. La compresión es gratuita y muy útil para las máquinas virtuales. La deduplicación requeriría mucha más RAM + L2ARC para ser efectiva.
  • Comience sin los SSD y agréguelos si es necesario. Ciertas cargas de trabajo no llegan a ZIL o L2ARC .
  • NexentaStor es un paquete completo. Es beneficioso tener una GUI de administración sólida, sin embargo, también he oído hablar del éxito con Napp-It .
ewwhite
fuente
+1. ¡Gracias por toda la información! Para responder a su pregunta, estoy haciendo esto por varias razones. Estoy haciendo esto en gran medida para aprovechar los otros núcleos de CPU para hacer una o dos máquinas virtuales más (sin ZFS) y para proporcionar un objetivo iSCSI a mi servidor virtual Opteron. Mis razones para ZFS son (sin ningún orden en particular) compresión y seguridad y replicación de datos. Dedupe se ve muy bien, pero en términos de recursos y mis datos, no estoy seguro de si es necesario. Estoy usando Nexenta en este momento, pero estaba considerando mudarme a Solaris Express u OpenIndiana si continúo apilando los discos para exceder el límite de 18 TB.
osij2is
Entonces, entiendo su comentario sobre si usar o no los SSD para L2ARC o ZIL y estoy dispuesto a hacer eso. Vea primero el rendimiento, LUEGO determine si agregará ZIL y / o ARC. En cuanto a la duplicación frente a RAIDZ, después de leer sus comentarios y leer esta publicación de blog ( constantin.glez.de/blog/2010/01/… ) supongo que la duplicación tiene una ligera ventaja. Realmente no necesito el espacio en disco, pero si puedo tener algunas capacidades de redundancia y lectura / escritura rápidas, creo que cambiaré a eso. Cualquier espacio de almacenamiento que pudiera buscar realmente no valdría la pena.
osij2is
Además, recuerda que la compresión es útil. Pago por Nexenta comercial para sistemas de clientes y cualquier cosa mayor que 18 TB. Pero los mismos consejos se aplican a OpenIndiana.
ewwhite
¿Está utilizando un E1000 vnic o un VMXNet3 vnic para la red NFS? Debido a que solo obtengo 1gbps entre Nexenta / Solaris y VMware usando una configuración similar y no puedo encontrar la manera de obtener más velocidad. ¿Qué versión de NexentaStor? Sospecho que la versión que tienen disponible actualmente está rota ...
Josh