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 zpool
binario modificado .
No estoy usando un dispositivo ZIL o cualquier caché L2ARC en esta instalación.
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.
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)
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 .