Hospedando um servidor ZFS como convidado virtual

23

Ainda sou novo no ZFS. Estou usando o Nexenta, mas estou pensando em mudar para o OpenIndiana ou Solaris 11 Express. No momento, estou pensando em virtualizar o servidor ZFS como convidado no ESXi, Hyper-V ou XenServer (ainda não decidi qual deles - estou inclinado ao ESXi para suporte ao VMDirectPath e FreeBSD).

A principal razão é que parece que eu tenho recursos suficientes para poder usar facilmente outras 1-3 VMs em execução simultaneamente. Principalmente Windows Server. Talvez uma VM Linux / BSD também. Eu gostaria que o servidor ZFS virtualizado hospedasse todos os dados das outras VMs, para que seus dados pudessem ser mantidos em discos separados fisicamente dos discos ZFS (montados como iscsi ou nfs).

Atualmente, o servidor possui um AMD Phenom II com 6 núcleos no total (2 desbloqueados), 16 GB de RAM (máximo) e um LSI SAS 1068E HBA com (7) discos SATA II de 1 TB conectados (planejando RAIDZ2 com hot spare). Também tenho (4) SSDs SATA II de 32 GB conectados à placa-mãe. Espero espelhar dois dos SSDs em um espelho de inicialização (para o host virtual) e deixar os outros dois SSDs para o ZIL e o L2ARC (para o convidado da VM do ZFS). Estou disposto a adicionar mais dois discos para armazenar os convidados da VM e alocar todos os sete discos atuais como armazenamento ZFS. Nota: A placa-mãe não tem suporte para IOMMU, pois o 880G não suporta, mas eu tenho uma placa 890FX que possui IOMMU se isso faz uma enorme diferença.

Minhas perguntas são:

1) É aconselhável fazer isso? Não vejo nenhuma desvantagem óbvia (o que me faz pensar por que ninguém mais mencionou isso). Eu sinto que poderia estar fazendo uma grande supervisão e eu odiaria me comprometer com isso, mover todos os meus dados apenas para ir fubar a partir de alguns detalhes que eu perdi.

2) Desempenho do convidado virtual do ZFS? Estou disposto a sofrer um pequeno impacto no desempenho, mas acho que, se o convidado da VM tiver acesso total ao disco, o desempenho de E / S do disco será insignificante (pelo menos, em comparação com a execução do ZFS não virtualizado) . Alguém pode falar disso por experiência em hospedar um servidor ZFS como convidado da VM?

osij2is
fonte
Você diz que deseja hospedar dados para todas as outras VMs. Você se vê desejando desduplicação em algum momento? Nesse caso, isso realmente deve estar em sua própria máquina, pois a desduplicação consome muita memória. Por que não dar uma olhada em algo como o SmartOS para suas necessidades de ZFS? Dessa forma, você também recebe um hipervisor.
devicenull
Pensei em desduplicar, mas, por enquanto, não, prefiro não usá-lo. Eu vou investigar o SmartOS. Eu não ouvi falar, então vou verificar isso.
osij2is

Respostas:

38

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 zpoolbinário modificado .

Não estou usando um dispositivo ZIL ou nenhum cache L2ARC nesta instalação.

insira a descrição da imagem aqui

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.


insira a descrição da imagem aqui

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) insira a descrição da imagem aqui

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 .
ewwhite
fonte
+1. Obrigado por todas as informações! Para responder sua pergunta, estou fazendo isso por alguns motivos. Estou fazendo isso amplamente para alavancar os outros núcleos da CPU para criar uma ou duas outras VMs (não executando o ZFS) e para fornecer um destino iSCSI ao meu servidor virtual Opteron. Minhas razões para o ZFS são (sem ordem específica) compactação, segurança e replicação de dados. Dedupe parece muito legal, mas em termos de recursos e meus dados, não tenho certeza se é necessário. Estou usando o Nexenta agora, mas estava pensando em mudar para o Solaris Express ou OpenIndiana se continuar a empilhar os discos para exceder o limite de 18 TB.
osij2is
Portanto, entendo seu comentário sobre o uso ou não dos SSDs para L2ARC ou ZIL e estou disposto a fazer exatamente isso. Veja o desempenho primeiro e, em seguida, determine se deseja adicionar ZIL e / ou ARC. Quanto ao espelhamento vs. RAIDZ, depois de ler seus comentários e ler esta postagem do blog ( constantin.glez.de/blog/2010/01/… ), acho que o espelhamento tem uma ligeira vantagem. Eu realmente não preciso de espaço em disco, mas se eu tiver redundância e recursos rápidos de leitura / gravação, acho que vou mudar para isso. Qualquer que seja o espaço de armazenamento que eu conseguisse, realmente não valeria a pena.
osij2is
Além disso, lembre-se de que a compactação é útil. Pago pela Nexenta comercial para sistemas clientes e qualquer coisa maior que 18 TB. Mas as mesmas dicas se aplicam ao OpenIndiana.
ewwhite
Você está usando um vnic E1000 ou VMXNet3 para a rede NFS? Porque estou recebendo apenas 1 gbps entre o Nexenta / Solaris e o VMware usando uma configuração semelhante e não consigo descobrir como obter mais velocidade. Qual versão do NexentaStor? Eu suspeito que a versão que eles têm atualmente disponível está quebrado ...
Josh