Eu criei várias dessas configurações de armazenamento "tudo-em-um" do ZFS. Inicialmente inspirada nas excelentes postagens do Ubiquitous Talk , minha solução adota uma abordagem ligeiramente diferente para o design do hardware, mas produz o resultado do armazenamento ZFS virtualizado encapsulado.
Para responder suas perguntas:
Determinar se esta é uma abordagem inteligente depende realmente de seus objetivos. O que você está tentando realizar? Se você tem uma tecnologia (ZFS) e está procurando por um aplicativo, isso é uma má ideia. É melhor usar um controlador RAID de hardware adequado e executar suas VMs em uma partição VMFS local. É o caminho de menor resistência. No entanto, se você tiver um motivo específico para querer usar o ZFS (replicação, compactação, segurança de dados, portabilidade etc.), isso é definitivamente possível se você estiver disposto a se esforçar.
O desempenho depende muito do seu design, independentemente de você estar executando em bare-metal ou virtual. O uso da passagem PCI (ou AMD IOMMU no seu caso) é essencial, pois você forneceria à VM ZFS VM acesso direto a um controlador de armazenamento e discos SAS. Desde que sua VM seja alocada com uma quantidade adequada de recursos de RAM e CPU, o desempenho é quase nativo. Obviamente, o design do seu pool é importante. Por favor, considere espelhos versus RAID Z2. O ZFS é escalável entre vdevs e não o número de discos .
Minha plataforma é o VMWare ESXi 5 e meu sistema operacional preferido para ZFS é o NexentaStor Community Edition .
Este é o meu servidor doméstico . É um HP ProLiant DL370 G6 executando o ESXi a partir de um cartão SD interno. Os dois discos espelhados de 72 GB no centro estão vinculados ao controlador RAID Smart Array P410 interno e formam um volume VMFS. Esse volume contém uma VM NexentaStor. Lembre-se de que a máquina virtual ZFS precisa viver em algum lugar com armazenamento estável.
Há um controlador SAS LSI 9211-8i conectado ao compartimento da unidade que contém seis discos SATA de 1 TB à direita. Ele é passado para a máquina virtual NexentaStor, permitindo que a Nexenta veja os discos como uma configuração RAID 1 + 0. Os discos são drives baratos Western Digital Green WD10EARS alinhados adequadamente com um zpool
binário modificado .
Não estou usando um dispositivo ZIL ou nenhum cache L2ARC nesta instalação.
A VM possui 6 GB de RAM e 2 vCPU alocados. No ESXi, se você usar passagem PCI, será criada uma reserva de memória para a quantidade total de RAM atribuída à VM.
Dou à VM NexentaStor duas interfaces de rede. Um é para gerenciamento de tráfego. O outro faz parte de um vSwitch separado e possui uma interface vmkernel (sem um uplink externo). Isso permite que a VM forneça armazenamento NFS montável pelo ESXi por meio de uma rede privada. Você pode adicionar facilmente uma interface de ligação ascendente para fornecer acesso a hosts externos.
Instale suas novas VMs no armazenamento de dados exportado pelo ZFS. Certifique-se de definir os parâmetros "Inicialização / desligamento da máquina virtual" no ESXi. Você deseja que a VM de armazenamento seja inicializada antes dos sistemas convidados e desligada por último.
Aqui estão os resultados bonnie ++ e iozone de uma execução diretamente na VM NexentaStor. A compactação ZFS está desativada para que o teste mostre números mais relacionáveis, mas, na prática, a compactação padrão do ZFS (não o gzip) sempre deve estar ativada.
# 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 é um gráfico do NexentaStor DTrace mostrando o IOPS da VM de armazenamento e as taxas de transferência durante a execução do teste. 4000 IOPS e mais de 400 megabytes / segundo são razoáveis para esses discos de baixo custo. (tamanho grande do bloco)
Outras notas.
- Você deseja testar seus SSDs para ver se eles podem ser apresentados diretamente a uma VM ou se o DirectPath escolhe todo o controlador da placa-mãe.
- Você não possui muita energia da CPU; portanto, limite a unidade de armazenamento a 2 vCPUs.
- Não use RAIDZ1 / Z2 / Z3, a menos que você realmente precise do espaço em disco.
- Não use desduplicação. A compactação é gratuita e muito útil para VMs. A desduplicação exigiria muito mais RAM + L2ARC para ser eficaz.
- Comece sem os SSDs e adicione-os, se necessário. Certas cargas de trabalho não atingem o ZIL ou o L2ARC .
- O NexentaStor é um pacote completo. Há um benefício em ter uma GUI de gerenciamento sólida, no entanto, também ouvi falar de sucesso com o Napp-It .