Gluster + ZFS, deadlock durante o benchmarking: zfs_iput_taskq 100% cpu

6

Primeiro, alguns antecedentes: Eu trabalho em uma empresa que executa um aplicativo PHP-web. Nós temos um back-end de armazenamento montado sobre o NFS em vários servidores web. Hoje temos o problema se um servidor da Web gravar um arquivo no NFS, às vezes o arquivo não aparece em outros clientes montados até alguns minutos depois. Também não é redundante, por isso não podemos realizar nenhuma manutenção "invisível".

Eu tenho procurado migrar para uma solução GlusterFS (dois ou três tijolos / máquinas replicados para redundância). Agora, usando o XFS como o sistema de arquivos de armazenamento "por trás" Gluster funciona muito bem, desempenho sábio. O Gluster também não parece ter o problema de sincronização mencionado acima.

No entanto, eu gostaria de usar o ZFS como o sistema de arquivos de backend, as razões são:

  • Compactação barata (atualmente armazenando 1,5 TB sem compactação)
  • Muito fácil de expandir o volume de armazenamento "live" (um comando, comparado a bagunça da LVM)
  • Captura instantânea, proteção contra a podridão de bits e todas as outras vantagens da ZFS.

Na minha demonstração de configuração da solução, tenho três servidores com Replicated Gluster com um pool de back-end do ZFS em um disco separado em cada servidor. Estou usando o CentOS 6.5 com o ZFS no Linux (0.6.2) + GlusterFS 3.4. Eu também tentei com o Ubuntu 13.10. Tudo está no VMware ESX.

Para testar essa configuração, montei o volume sobre o Gluster e, em seguida, executei o BlogBench ( link ) para simular a carga. O problema que estou tendo é que, no final do teste, o armazenamento do ZFS parece ficar preso em um impasse. Todas as três máquinas têm "zfs_iput_taskq" rodando a 90-100% da CPU, e o teste congela. Se eu abortar o teste, o deadlock não desaparece, apenas a opção parece ser difícil de reiniciar.

Eu tentei:

  • Atime desativado
  • Agendador desativado (noop)
  • Diferente compactação / sem compactação
  • Blogbench diretamente no ZFS funciona bem
  • Blogbench no Gluster + XFS como backend funciona bem

Idéias? Devo deixar o ZFS e ir com outra coisa? alternativas?

Atenciosamente Oscar

    
por MannerMan 21.03.2014 / 10:14

1 resposta

4

O ZFS no Linux precisa de um pouco de ajuste básico para operar bem sob carga. Há um pouco de dificuldade entre o ZFS ARC e o subsistema de memória virtual do Linux.

Para seus sistemas CentOS, tente o seguinte:

Crie um arquivo de configuração /etc/modprobe.d/zfs.conf . Isso é lido durante o carregamento / inicialização do módulo.

Adicione algo como:

options zfs zfs_arc_max=40000000000
options zfs zfs_vdev_max_pending=24

Onde zfs_arc_max é aproximadamente 40% da sua RAM em bytes ( Edit: try zfs_arc_max=1200000000 ). O padrão compilado em zfs_vdev_max_pending é 8 ou 10, dependendo da versão. O valor deve ser alto (48) para unidades SSD ou de baixa latência. Talvez 12-24 para o SAS. Caso contrário, deixe no padrão.

Você também desejará ter alguns valores mínimos em /etc/sysctl.conf

vm.swappiness = 10
vm.min_free_kbytes = 512000

Por fim, com o CentOS, talvez você queira instalar tuned e tuned-utils e definir seu perfil como virtual-guest com tuned-adm profile virtual-guest .

Experimente e veja se o problema persiste.

Editar:

Execute zfs set xattr=sa storage . Aqui está o porquê. Você pode ter que limpar os volumes e começar de novo ( Eu definitivamente recomendaria fazê-lo ).

    
por 21.03.2014 / 10:43