Quais são as implicações de desempenho da execução de VMs em um host ZFS?

11

Estou pensando em migrar do ext3 para o ZFS para armazenamento de dados no meu host Debian Linux, usando o ZFS no Linux . Um recurso matador do ZFS que eu realmente quero é a sua garantia de integridade de dados. A capacidade de aumentar trivialmente o armazenamento à medida que minhas necessidades de armazenamento aumentam também é algo que eu gostaria de ver.

No entanto, eu também executo algumas VMs no mesmo host. (Embora normalmente, no meu caso, apenas uma VM esteja sendo executada no host por vez.)

Considerando o comportamento de soma de verificação de dados e cópia na gravação do ZFS, juntamente com o fato de as imagens de disco da VM serem arquivos comparativamente grandes (o arquivo de imagem de disco da minha VM principal atualmente possui 31 GB), quais são as implicações de desempenho no convidado da VM desse tipo uma migração? Que medidas posso tomar para reduzir o possível impacto negativo no desempenho?

Posso viver com menos garantias de integridade de dados nas imagens de disco da VM, se necessário (não faço nada realmente crítico dentro de nenhuma das VMs) e posso separá-las facilmente do resto do sistema de arquivos, mas seria bom se eu não precisa (mesmo seletivamente) desativar o recurso que mais me faz querer migrar para um sistema de arquivos diferente.

O hardware é bastante robusto para um sistema de classe de estação de trabalho, mas não suporta muito um servidor high-end (32 GB de RAM com raramente> 10 GB em uso, CPU de 6,3 GHz e 6 núcleos, atualmente utilizável em 2,6 TB espaço em disco de acordo com dfe um total de cerca de 1,1 TB livre; migrar para o ZFS provavelmente adicionará mais espaço livre ) e não estou planejando executar a desduplicação de dados (como ativar a desduplicação não adicionaria muito à minha situação). O plano é começar com uma configuração JBOD (obviamente com bons backups), mas eu posso passar para uma configuração de espelho bidirecional eventualmente, se as condições o justificarem.

um CVn
fonte
Lembre-se também de que o ZFS tem um desempenho melhor que o RAID5 tradicional em termos de IOPS . As gravações RAIDZ são executadas na velocidade de um único disco, porque não sofrem as penalidades de desempenho de E / S que afetam o RAID5 / 6 tradicional.
Stefan Lasiewski
1
Obrigado a todos que responderam por suas idéias! Definitivamente voltarei a esta pergunta mais tarde.
um CVn
O comentário de Stefan é ... bem, é apenas falso. O desempenho do ZFS RAIDZ é significativamente pior do ponto de vista de IOPS (com o qual você costuma ter problemas nas VMs) do que as matrizes RAID5 tradicionais. Por favor, não assuma uma melhoria no desempenho de gravação mudando para o ZFS. Raramente é o caso. Os ganhos de desempenho de leitura dependerão da RAM disponível para o ARC e do tamanho e delta do seu conjunto de trabalho. Geralmente nas VMs, o ZFS ARC acaba ajudando no desempenho geral da leitura em comparação com as alternativas. As gravações geralmente sofrem, mesmo em espelhos, SEMPRE com raidz.
Nex7 22/08/2013
@ Nex7 Como são escritas sem RAID do ZFS, mas com apenas um dispositivo de armazenamento, que por exemplo é fornecido por alguns mdraid? O ZFS tem desempenho comparável a outros sistemas de arquivos porque nenhum material RAID sofisticado é usado?
Thorsten Schöning

Respostas:

4

Como o ZFS funciona em um nível de bloco, o tamanho dos arquivos não faz diferença. O ZFS requer mais memória e CPU, mas não é inerentemente significativamente mais lento como um sistema de arquivos. Embora você precise estar ciente de que o RAIDZ não é equivalente em velocidade ao RAID5. O RAID10 é bom quando a velocidade é uma prioridade.

JamesRyan
fonte
4

O ZFS em um hardware decente (ou seja, buff) provavelmente será mais rápido que em outros sistemas de arquivos; é provável que você queira criar um ZIL em um local rápido (ou seja, SSD). Este é essencialmente um local para armazenar gravações em cache (bem, mais como um diário no ext3 / 4). Isso permite que a caixa ack escreva como sendo gravada em disco antes que os eixos reais tenham os dados.

Você também pode criar um L2 ARC no SSD para cache de leitura. Isso é fantástico em um ambiente de VM em que você pode colocar discos físicos de joelhos inicializando várias VMs ao mesmo tempo.

As unidades entram nos VDEVs, os VDEVs entram nos zpools (use discos inteiros de cada vez). Se este for um sistema menor, convém ter um único zpool e (se você não estiver muito preocupado com a perda de dados) um único VDEV. Os VDEVs são onde você seleciona o nível RAID (embora você também possa MIRROR VDEVs se você tiver discos suficientes). O disco mais lento em um VDEV determina a rapidez com que o VDEV inteiro é.

O ZFS tem tudo a ver com integridade de dados - a razão pela qual muitas das ferramentas tradicionais de manutenção do sistema de arquivos não existem (como o fsck) é o problema que elas resolvem não pode existir em um sistema de arquivos ZFS.

Na IMO, a maior desvantagem do ZFS é que, se seus sistemas de arquivos se aproximarem (digamos, 75% +), fica MUITO lento. Só não vá lá.

TheFiddlerWins
fonte
2

31GB realmente não é nada grande ...

De qualquer forma, dependendo do sistema de arquivos que você está usando no momento, você pode achar que o ZFS é um pouco mais lento, mas, considerando as especificações de hardware, pode ser insignificante.

Obviamente, o ZFS usará uma boa parte da RAM para armazenar em cache, o que pode fazer com que suas VMs pareçam mais rápidas em uso geral (quando não estiver lendo ou gravando muito). Não tenho certeza de como o ZFS está sintonizado no Linux, mas pode ser necessário limitar seu ARC, se possível, para impedir que ele se esgote com toda a sua RAM (já que você precisará de um pedaço decente para o seu sistema host e VMs).

Eu habilitaria a compactação (atualmente, o conselho é ativá-la, a menos que você tenha um bom motivo para não fazê-lo). Lembre-se de que isso precisa ser feito antes de colocar os dados no sistema de arquivos. A maioria das pessoas fica surpresa ao descobrir que é realmente mais rápido com isso, pois os algoritmos de compactação geralmente rodam mais rápido que as E / S do disco. Duvido que isso cause muito problema de desempenho no seu processador de 6 núcleos. Eu não esperava que as VMs compactassem muito, mas consegui transformar ~ 470 GB de dados da VM em 304 GB apenas com a configuração de compactação padrão.

Não se preocupe com a desduplicação, ela voltará para assombrá-lo mais tarde e você passará semanas baralhando os dados tentando se livrar deles.

Se você encontrar problemas de desempenho, a resposta óbvia é adicionar um SSD como ZIL / L2ARC ou ambos. Não é ideal usar um dispositivo para ambos, mas provavelmente ainda melhorará o desempenho em um pool que contém um pequeno número de discos / vdevs.

Para adicionar: eu realmente tentaria começar com uma configuração redundante, se possível (idealmente espelhos), ou converter para espelhos a partir de uma faixa o mais rápido possível. Embora o ZFS faça a soma de todos os dados e detecte erros em tempo real (ou durante uma limpeza), ele não poderá fazer nada a respeito (sem usar cópias = 2, o que duplicará o uso do disco). Você ficará sabendo que há erros nos arquivos (provavelmente as imagens de disco da sua VM) que você não poderá fazer muito sem excluir e recriar esses arquivos.

USD Matt
fonte
"Você ficará dizendo que há erros nos arquivos ... sobre os quais você não poderá fazer muito" Essa é uma boa opinião, e eu aprecio isso. Dito isso, é onde entram meus backups noturnos. Como não há nada entre mim e a corrupção de dados silenciosa, mesmo que o ZFS simplesmente se recuse a me deixar ler o arquivo ou parte dele até que eu o restaure do (bem conhecido) ), é uma grande melhoria nas garantias de integridade de dados.
um CVn
Quanto ao tamanho do arquivo, não, 31 GB não é exatamente objetivamente grande (embora ainda seja ~ 1,2% da minha capacidade total de armazenamento do sistema), mas minha preocupação era mais ao longo da linha em que o COW faria o sistema copiar todos esses dados continuamente, um equívoco que JamesRyan corrigiu rapidamente .
um CVn
1

Dependendo dos seus casos de uso e VMs, eu consideraria o seguinte. Deixe o sistema operacional host cuidar dos arquivos que você está armazenando nos volumes ZFS.

Se possível, crie apenas um LUN para cada VM, contendo apenas o sistema operacional e os arquivos binários necessários. E apresente o armazenamento para Dados Individuais como compartilhamentos via NFS, samba ou iSCSI (ou zvols, conforme mencionado nos comentários). O ZFS é capaz de acompanhar todos os arquivos com soma de verificação e tempos de acesso etc. Obviamente, se a velocidade não for tão importante, você também poderá ativar a compactação em alguns Datastores. O benefício seria uma camada ausente de outro sistema de arquivos. Se você criar um LUN para o segundo disco rígido virtual e criar um sistema de arquivos NTFS, o ZFS precisará lidar com um grande blob binário e não conhecer nenhum conteúdo ou arquivos e, portanto, não poderá tirar proveito do cache ZIL ou ARC no da mesma maneira que os arquivos de avião podiam.

Mencionando ACLs, o ZFS pode usar ACLs via NFSv4 ou Samba (se ativado). Eu admito que uso o ZFS no FreeBSD e não posso garantir como habilitar as ACLs do Sambas acasalando nos volumes do ZFS. Mas tenho certeza de que isso não deve ser grande coisa.

A redução de redundância em combinação com um cache de leitura é uma grande vantagem quando se trata de economizar espaço e melhorar leituras massivas (tempestade de inicialização), pois todas as VMs começam a ler os mesmos blocos.

O mesmo vale para os instantâneos do ZFS para as VMs e os datastores. Você pode criar um script de shell simples, para congelar a VM, tirar uma captura instantânea da VM e do armazenamento de dados e continuar trabalhando, ou apenas o armazenamento de dados sozinho, e clonar a VM para apresentar o instantâneo do original e testar algumas coisas.

As possibilidades são infinitas com o ZFS;)

EDIT: Espero ter explicado um pouco melhor agora

EDIT2: Opinião pessoal: considere usar um RAIDZ2 (RAID6), pois você pode suportar uma falha de disco duplo! Se você tiver um único disco sobressalente, ele nunca estará errado, mas duas falhas no disco deverão ser suficientes para uma rápida reação. Acabei de postar meu script para monitorar o status do disco aqui

Daywalker
fonte
Não tenho certeza se entendi. Você está dizendo que devo armazenar os arquivos usados ​​pelas VMs como arquivos separados no sistema de arquivos ZFS, e não como uma imagem de disco? Que tal coisas como partições, setores de inicialização, atributos que o ZFS não conhece, ACLs do Windows em um contexto Linux, ...? Ou estou lhe entendendo mal ou você está respondendo algo diferente do que estou perguntando. Você pode reler a pergunta e editar sua resposta para esclarecer como ela aborda minha preocupação com o desempenho de armazenamento?
um CVn
Em relação aos instantâneos: pode não ser necessário congelar a VM. O ZFS usa a cópia na gravação (COW), o que significa que os instantâneos são instantâneos e fornecerão uma imagem de disco completa. Alguns administradores usam isso para bancos de dados MySQL e PostGRES sem congelar seus bancos de dados (por exemplo, sem tempo de inatividade), embora outros limpem as tabelas primeiro. Se você precisar congelar a VM, tirar o instantâneo do ZFS levará apenas alguns segundos.
Stefan Lasiewski
Michael: Acho que Daywalker está se referindo ao zvols, onde você pode criar um arquivo que funciona como um dispositivo de bloco. Eu usaria zvols NFS não individuais para VMs (nesse caso, parece que tudo é local, então apenas arquivos nos sistemas de arquivos). Sim, os zvols podem ser legais, mas são uma camada extra de complicação. E os instantâneos do ZFS são consistentes por definição. Isso não significa que o sistema operacional da VM sabe que precisa liberar seus dados para o disco, mas você obterá a consistência do sistema de arquivos com o mesmo nível como se perdesse energia na VM.
TheFiddlerWins
A desduplicação consome muitos recursos. O uso da compactação não é e (para VMs) provavelmente recuperará muito espaço devido ao espaço em branco nos sistemas de arquivos da VM.
TheFiddlerWins
@ MichaelKjörling Apenas editet minha Post, esperando para uma melhor compreensão (também com os comentários de TheFiddlerWins e Stefan Lasiewski
Daywalker