Evitando SPOFS com GlusterFS e Windows

10

Temos um cluster GlusterFS que usamos para nossa função de processamento. Queremos integrar o Windows a ele, mas estamos tendo problemas para descobrir como evitar o ponto único de falha que é um servidor Samba que atende a um volume GlusterFS.

Nosso fluxo de arquivos funciona assim:

Fluxo de documentos do GlusterFS

  1. Os arquivos são lidos por um nó de processamento do Linux.
  2. Os arquivos são processados.
  3. Os resultados (podem ser pequenos, podem ser bastante grandes) são gravados de volta no volume GlusterFS à medida que são feitos.
    • Os resultados podem ser gravados em um banco de dados ou podem incluir vários arquivos de vários tamanhos.
  4. O nó de processamento seleciona outro trabalho da fila e GOTO 1.

O Gluster é ótimo, pois fornece um volume distribuído e replicação instantânea. A resiliência a desastres é agradável! Nós gostamos.

No entanto, como o Windows não possui um cliente GlusterFS nativo, precisamos de alguma maneira de nossos nós de processamento baseados no Windows interagirem com o armazenamento de arquivos de maneira semelhante resiliente. A documentação do GlusterFS afirma que a maneira de fornecer acesso ao Windows é configurar um servidor Samba em cima de um volume GlusterFS montado. Isso levaria a um fluxo de arquivos como este:

Doc-flow do GlusterFS via Winders

Isso me parece um único ponto de falha.

Uma opção é agrupar o Samba , mas isso parece estar baseado no código instável agora e, portanto, fora de execução.

Então, eu estou procurando outro método.

Alguns detalhes importantes sobre os tipos de dados que lançamos:

  • Os tamanhos de arquivo originais podem variar de alguns KB a dezenas de GB.
  • O tamanho dos arquivos processados ​​pode variar de alguns KB a um GB ou dois.
  • Certos processos, como cavar em um arquivo morto como .zip ou .tar, podem causar muitas gravações adicionais à medida que os arquivos contidos são importados para o armazenamento de arquivos.
  • A contagem de arquivos pode chegar aos 10 milhões.

Essa carga de trabalho não funciona com uma configuração do Hadoop "tamanho estático da unidade de trabalho". Da mesma forma, avaliamos os armazenamentos de objetos no estilo S3, mas os encontramos em falta.

Nosso aplicativo é escrito em Ruby e temos um ambiente Cygwin nos nós do Windows. Isso pode nos ajudar.

Uma opção que estou considerando é um serviço HTTP simples em um cluster de servidores com o volume GlusterFS montado. Como tudo o que estamos fazendo com o Gluster são essencialmente operações GET / PUT, isso parece facilmente transferível para um método de transferência de arquivos baseado em HTTP. Coloque-os atrás de um par de balanceador de carga e os nós do Windows podem colocar HTTP no conteúdo do seu pequeno coração azul.

O que não sei é como a coerência do GlusterFS seria mantida . A camada de proxy HTTP introduz latência suficiente entre quando o nó de processamento relata que é feito com a gravação e quando é realmente visível no volume GlusterFS, que estou preocupado com os estágios de processamento posteriores que tentam pegar o arquivo. encontre. Tenho certeza de que usar a direct-io-mode=enableopção de montagem ajudará, mas não tenho certeza se isso é suficiente . O que mais devo fazer para melhorar a coerência?

Ou devo seguir outro método inteiramente?


Como Tom apontou abaixo, o NFS é outra opção. Então eu fiz um teste. Como os arquivos mencionados acima têm nomes fornecidos pelo cliente que precisamos manter e podem vir em qualquer idioma, precisamos preservar os nomes dos arquivos. Então, eu criei um diretório com esses arquivos:

Diretório NFS com bons nomes, no servidor

Quando o monto a partir de um sistema Server 2008 R2 com o NFS Client instalado, recebo uma lista de diretórios como esta:

Diretório NFS com nomes incorretos, no cliente

Claramente, o Unicode não está sendo preservado. Então o NFS não vai funcionar para mim.

sysadmin1138
fonte
Acredito que a equipe do Samba considere ctdbestável e pronta para uso em produção e a primeira frase no link que você deu inviabiliza a segunda porque se nunca foi atualizada. Eu estava planejando estabelecer isso, mas antes de chegar a esse ponto, mudei de emprego para um ambiente quase sem janelas.
Sven
Qual versão do Windows você está usando?
Tom O'Connor
@ TomO'Connor Como diz a etiqueta, Windows 7. No entanto, o Server 2008 R2 estará lá em algum momento.
sysadmin1138
Suponho que Cygwin está fora de questão?
Tom O'Connor

Respostas:

5

Eu gosto do GlusterFS. Na verdade, eu adoro o GlusterFS. Contanto que você possa oferecer uma largura de banda dedicada, tudo ficará bem.

Uma das melhores coisas do GlusterFS é usá-lo com o NFS. Uma das coisas surpreendentes com as quais trabalho ultimamente é o NFS no Windows 7 e 2k8R2 .

Aqui está o que eu faria.

  1. Configure 2 servidores GlusterFS que podem exportar NFS.
  2. Configure um link de pulsação entre eles.
  3. Implantar algo como Heartbeat / Pacemaker, talvez?
  4. Configure um IP virtual (VIP) entre os nós do Gluster.
  5. Conecte as unidades de rede mapeadas do Windows boxen usando o endereço IP do VIP.
  6. Teste tudo o que você pode imaginar.

Agrupar o Samba parece assustador, e mesmo se você fizer isso, o Samba ainda não tem a capacidade de se comportar de maneira confiável em algumas redes Windows (toda a compatibilidade com o domínio NT4, nunca parece ser capaz de superar isso).

Eu acho que porque cada nó Gluster está no modo distribuído, replicado, em seguida, você deve, teoricamente, ser capaz de se conectar a qualquer um e permitir que ele se preocupe em mover seus dados ao redor. Como resultado, o batimento cardíaco deve ser o que redireciona e controla com quem você está falando.

Quanto ao seu

  • A contagem de arquivos pode chegar aos 10 milhões.

Sugiro que você investigue o uso do XFS como sistema de arquivos subjacente, pois é muito bom em grandes sistemas de arquivos e é suportado pelo GlusterFS

Tom O'Connor
fonte
Atualmente, estou usando o XFS! Analisamos o NFS3 há algum tempo para lidar com a função inicial de ingestão, mas ela se mostrou impraticável devido à falta de suporte ao Unicode. Isso foi com o servidor NFS no Windows. "会計 2012.xls" não seria correto, e isso é muito importante. Mas ... eu não sabia disso sobre 7 / R2, e vale a pena investigar!
sysadmin1138
Então eu fiz um teste. Infelizmente, ele não retornou bons resultados (consulte a atualização na pergunta). O problema Unicode é bidirecional, parece.
sysadmin1138
Bugger. Estou sem idéias, então. Gostaria de saber se você poderia colocar o Samba atrás de um VIP.
Tom O'Connor
Grupo de trabalho sim, domínio (que estamos usando) não. Assim, meu problema.
sysadmin1138
Por outro lado, depois de conversar com os desenvolvedores, manter os nomes dos arquivos não é tão crítico quanto eu esperava. Aparentemente, desde que possamos obtê-los no primeiro estágio (ingestão), o banco de dados acompanhará os nomes. Portanto, o NFS é uma opção válida aqui (depois de obter as versões corretas do Windows).
sysadmin1138
1

Talvez você possa pensar na solução de alta disponibilidade ... use um LDAP para autenticação (ele pode ser replicado quantos servidores LDAP você desejar) e coloque um IP para ouvir os serviços SMB.

Este IP estará flutuando no servidor principal. Quando isso está desativado, o Heartbeat pode iniciar os serviços no segundo servidor.

Esses servidores terão um ponto de montagem para o glusterfs e todos os dados estarão lá.

É uma solução possível e é tão fácil de gerenciar ...

Saxa
fonte