Eu tenho uma série de servidores (HP ProLiant, 34 servidores), cada um com 500 G de espaço no disco rígido. Esses servidores fazem parte de um cluster computacional que executa processos que se enquadram em duas "fases":
- fase 1: lendo um pequeno número de arquivos grandes (até 6 Gb) e escrevendo arquivos relativamente grandes (até 1-2 Gb).
- fase 2: lendo e escrevendo lotes (centenas) de pequenos arquivos que depois são combinados em arquivos maiores; Além disso, esses arquivos são gerados junto com arquivos temporários que servem como "pontos transacionais".
Os servidores não compartilham o mesmo gabinete e estão conectados via Ethernet Gbit.
Inicialmente, coloquei um compartilhamento NFS em um único servidor, conforme minha pergunta anterior , mas o nível de simultaneidade causava problemas de disponibilidade e bloqueio, fazendo com que os processos falhassem na segunda fase, com muita frequência.
Agora que posso usar os discos nos servidores, pensei em usar um sistema de arquivos distribuído. Minha abordagem inicial (usada graças a testes bem-sucedidos em outros lugares) era usar o GlusterFS (configuração distribuída + replicada).
No entanto, embora funcione perfeitamente para a primeira fase, os problemas não terminam no segundo, pois a latência na rede não é baixa o suficiente para lidar com todas essas leituras e gravações simultâneas de todos os servidores no pool, causando os vários servidores para sair de sincronia e, portanto, erros estranhos ao redor do caminho (falta de arquivos, permissão estranha negou erros ...).
Além disso, o "problema" é que os próprios servidores (ou uma parte deles, eu não preciso usar todos) precisarão executar o cálculo junto com o fornecimento de armazenamento (é um recurso doado, então não posso fazer mais do que isso).
Tudo isso para explicar o caso de uso, que então faz a pergunta: qual seria o melhor sistema de arquivos distribuídos para lidar com a "fase 2"? Observe que preciso de algo no nível do arquivo, por exemplo um ponto de montagem ou um dispositivo virtual.