FALE COM UM ESPECIALISTA

4004-2122

Atendimento: 9:00h às 18:00h, 2ª a 6ª

NFS Super Rápido

Quem me conhece sabe que eu sou movido a desafios. Não sei se é karma ou destino, mas problemas técnicos que supostamente não tem solução acabam encontrando seu caminho até mim. Lei da atração, talvez?

Bom, o fato é que devido a uma necessidade e características do local onde eu trabalho, foi necessário migrar uma área de dados inteira pra NFS. Foi aí que começou o problema… A performance não ficou boa o bastante.

Na realidade eu já havia escrito sobre isso há anos atrás. Veja aqui. Então pensei: essa vai ser fácil. Já fiz isso antes. #sqn

Nada é fácil. As necessidades de 10 anos atrás em nada se comparam as atuais. E a bem da simplicidade, grande parte das tecnologias daquela época ainda estão sendo utilizadas (mais até que eu gostaria).

Quando falamos de performance, temos 2 grandes players principais (e que normalmente não são valorizados como se deveria):

  • Quem faz a implementação do software.
  • Quem faz a implementação da topologia para rodar o software.

Quem cria soluções que são utilizadas em larga escala, obviamente são pessoas com um nível de habilidade muito alto. Porém, quem faz a implementação destas soluções, além de precisar conhecer muito bem delas, precisa conhecer igualmente bem de outros serviços e técnicas acessórias.

Infelizmente, este é o tipo de habilidade que só se aprende com o grau de dificuldades que a carreira impôs (alô Equinix, um abraço!), experiências de campo, e curiosidade.

Uma informação sobre mim: não sou do tipo que faz “mais do mesmo”. Isso me incomoda. Fico com a sensação de estar sendo incompleto nas minhas entregas. Por isso, sempre busco algo diferente e pouco explorado. E até revisito algumas coisas que já fiz, e não tive tempo (ou interesse) de olhar em detalhes, para tentar descobrir se eu poderia ter feito melhor.

É justamente neste ponto que entram o foco deste artigo: ZFS e NFS-Ganesha.

Apenas uma última parte da estória antes do papo super técnico:

Quando eu era apenas um sysadmin Unix, trabalhando ativamente com Solaris, já conhecia o ZFS. Porém, eu não tinha noção do real potencial desta tecnologia. Também, como poderia? Até então, RAM era muito caro pra ter em abundância, conforme temos hoje.

Howard Stark resumiu isso muito bem:

I'm limited by the technology of my time [Iron Man 2]

E sobre o NFS, alguém poderia dizer: Serviço NFS é tudo igual. Todos os sistemas operacionais e Storages da atualidade possuem essa função. Bom, eu poderia dizer que todos fazem a mesma coisa. Porém, como fazem, é uma estória completamente diferente.
Por isso digo que o NFS-Ganesha é o estado da arte quando se trata de NFS. Falarei mais sobre isso daqui a pouco.

Mas por que devo me importar? Vou explicar.

  • NFS ofertado direto pelo storage não possui uma performance satisfatória para alguns tipos de carga, que é justamente o desafio que motivou a escrita deste artigo. Mesmo utilizando versão 4+.
  • O NFS Server “default” de qualquer distribuição Linux ou FreeBSD, apesar de ser um pouco melhor, não atendeu a demanda que eu tinha em mãos.
  • Diversas combinações de filesystem, tipos de disco, redes e tunning foram testadas (com efeito benéfico), porém não ficaram boas o bastante, levando em consideração o desempenho que eu precisava entregar.
  • O que eu precisava entregar? Uma performance NFS similar a performance de um disco local. Difícil, certo?

Então sobrou pra este mero mortal que vos escreve, tentar fazer essa mágica acontecer.

Magic!

Como eu consegui?

Primeiro, entendendo o que as tecnologias tem a oferecer. Vamos a alguns fatos simples:

  • ZFS: quanto mais memória disponível, mais rápido são os acessos de leitura e gravação, graças a um componente chamado ARC (Adaptative Replacement Cache).
  • Ganesha: NFS Server que faz Multi-threading like a boss, com cache nativo e um escalonamento excepcional. Ah, e que funciona em user space! Um viva pra quem fala mal dos serviços que rodam em user space. XD

Obviamente, para juntar adequadamente essas peças, alguns requisitos precisam ser atendidos. Especialmente o Kernel 4+ do Linux. Mais sobre isso pode ser lido aqui. Então optei por usar o SUSE Linux Enterprise Server 15. Por que SUSE? Simples: É moderno, tem um bom suporte, um bom conjunto de ferramentas, e um custo benefício atrativo. Provavelmente o OpenSUSE apresentará os mesmos resultados. Porém, como eu trabalho para uma empresa, utilizamos distribuições Enterprise.

Quais são as peças que preciso ter em meu tabuleiro?

  • SLES 15
  • OpenZFS 0.8.1
  • NFS-Ganesha 2.7
  • Virtual Machine com 2×4 Cores de vCPU e 32Gb RAM
  • NIC 10 Gigabit
  • Jumbo Frames em todo o Stack de comunicação NFS.

A topologia final ficou desta forma:

INSERIR IMAGEM DA TOPOLOGIA

Mãos a obra!

Quem não estiver interessado em saber os detalhes sobre como implementar esta topologia, pode rolar a página até o final, e olhar alguns gráficos bonitos que deixei pra você. 🙂

COLOCAR O HOW TO AQUI

Gráficos!

INSERIR OS GRÁFICOS AQUI

  • Serviço NFS Normal (40mb/s): Velocidades “padrão”, compatíveis com qualquer solução de mercado, sejam elas NFS de Storage ou de Sistemas Operacionais.
Meh
  • Serviço NFS Turbo (500mb/s): Os resultados foram igualmente bons em diversos cenários de Leitura e Escrita: arquivos grandes e pequenos, e acessos sequenciais e randômicos. Conforme a realização dos acessos ocorria, o Arc do ZFS e o Cache do Ganesha eram preenchidos, fazendo a performance aumentar cada vez mais ao longo do tempo.
Cool

Nota de Encerramento

O resultado final, é que não só deixamos a performance do serviço NFS padrão do storage e demais SO a anos luz atrás, mas conseguimos alcançar o objetivo, que era ter os acessos via rede NFS com uma performance bem similar aos acessos de disco local. Bem impressionante, não?

Atualmente eu não tenho muito interesse em trabalhar com VMs e instâncias de nuvem. Estou mais focado em contêiner e orquestração Kubernetes. Mas às vezes é preciso fazer o trabalho a moda antiga para alcançar um bom resultado

Atualmente eu não tenho muito interesse em trabalhar com VMs. Estou mais focado em cloud, contêineres e orquestração Kubernetes. Mas às vezes é preciso fazer o trabalho a moda antiga para alcançar um bom resultado.

Comments are closed.