Sistema de arquivos de armazenamento distribuído - Qual deles / Existe um produto pronto para uso?

31

Com o Hadoop e o CouchDB em todo o Blogs e notícias relacionadas, o que é um armazenamento (mecanismo) tolerante a falhas distribuído que realmente funciona.

  • O CouchDB, na verdade, não possui nenhum recurso de distribuição embutido, pelo que sei, a cola para distribuir entradas automaticamente ou mesmo bancos de dados inteiros está simplesmente ausente.
  • O Hadoop parece ser amplamente utilizado - pelo menos, é bom para a imprensa, mas ainda tem um único ponto de falha: o NameNode. Além disso, ele só pode ser montado via FUSE, eu entendo que o HDFS não é realmente o principal objetivo do Hadoop
  • O GlusterFS tem um conceito de nada compartilhado, mas ultimamente eu li vários posts que me levaram à opinião de que não é tão estável
  • O Lustre também possui um único ponto de falha, pois usa um servidor de metadados dedicado
  • O Ceph parece ser o player preferido, mas a página inicial afirma que ainda está nos estágios alfa.

Portanto, a questão é qual sistema de arquivos distribuído possui o seguinte conjunto de recursos (sem ordem específica):

  • Compatível com POSIX
  • fácil adição / remoção de nós
  • conceito de nada compartilhado
  • roda em hardware barato (processadores AMD Geode ou VIA Eden)
  • autenticação / autorização incorporada
  • um sistema de arquivos de rede (eu gostaria de montá-lo simultaneamente em diferentes hosts)

Bom ter:

  • arquivos acessíveis localmente: posso desmontar um nó, montar a partição com um sistema de arquivos local padrão (ext3 / xfs / qualquer que seja ...) e ainda acessar os arquivos

Estou não à procura de aplicações hospedadas, em vez de algo que vai me permitir tomar dizer 10GB de cada uma das nossas caixas de hardware e ter essa armazenamento disponível em nossa rede, Facilmente montável em uma multidão dos exércitos.

Server Horror
fonte
Então, com o que você acabou? Seria interessante ouvir sobre sua configuração atual.
23413 MattBianco
O Lustre parece ter adicionado MDSs ativos / passivos desde que você escreveu isso; portanto, pode ser necessário outro olhar.
pjz
Na minha experiência, o GlusterFS tem sido estável, mas o desempenho é muito ruim. Para um melhor desempenho, você precisará de hardware de ponta, basicamente RDMA. O importante é a latência entre todos os servidores e a máquina cliente GlusterFS.
Mikko Rantalainen 19/09

Respostas:

9

Eu acho que você terá que abandonar o requisito POSIX, pouquíssimos sistemas implementam isso - na verdade, nem o NFS realmente (acha bloqueios etc.) e isso não tem redundância.

Qualquer sistema que use replicação síncrona será glacialmente lento; qualquer sistema que tenha replicação assíncrona (ou "consistência eventual") violará as regras do POSIX e não se comportará como um sistema de arquivos "convencional".

MarkR
fonte
Você conhece algum sistema de arquivos compatível com consistência eventual e estrita? Talvez ele possa ser ajustado para ambos e criar 2 montagens?
CMCDragonkai
16

Não posso falar com o resto, mas você parece estar confuso entre um 'mecanismo de armazenamento distribuído' e um 'sistema de arquivos distribuídos'. Eles não são a mesma coisa, não devem ser confundidos com a mesma coisa, e nunca serão a mesma coisa. Um sistema de arquivos é uma maneira de acompanhar onde as coisas estão localizadas no disco rígido. Um mecanismo de armazenamento como o hadoop é uma maneira de acompanhar um grande número de dados identificados por uma chave. Conceitualmente, não há muita diferença. O problema é que um sistema de arquivos é uma dependência de um mecanismo de armazenamento ... afinal, ele precisa de uma maneira de gravar em um dispositivo de bloco, não é?

Tudo isso de lado, posso falar sobre o uso do ocfs2 como um sistema de arquivos distribuído em um ambiente de produção. Se você não quiser detalhes detalhados, pare de ler após esta linha: é bem legal, mas pode significar mais tempo de inatividade do que você pensa.

Temos executado o ocfs2 em um ambiente de produção nos últimos dois anos. Tudo bem, mas não é ótimo para muitas aplicações. Você deve realmente analisar seus requisitos e descobrir quais são - você pode descobrir que possui muito mais espaço para falhas do que pensava.

Como exemplo, o ocfs2 possui um diário para cada máquina no cluster que montará a partição. Então, digamos que você tenha quatro máquinas da Web e, quando criar essa partição usando mkfs.ocfs2, especifique que haverá seis máquinas no total para dar espaço para crescer. Cada um desses diários ocupa espaço, o que reduz a quantidade de dados que você pode armazenar nos discos. Agora, digamos que você precise escalar para sete máquinas. Nessa situação, você precisa derrubar toda acluster (ou seja, desmonte todas as partições ocfs2) e use o utilitário tunefs.ocfs2 para criar um diário adicional, desde que haja espaço disponível. Então, e somente então, você poderá adicionar a sétima máquina ao cluster (que requer a distribuição de um arquivo de texto para o restante do cluster, a menos que você esteja usando um utilitário), trazer tudo de volta e montar a partição nos sete máquinas

Entendeu o que eu quis dizer? Deveria ser alta disponibilidade, o que deveria significar 'sempre on-line', mas ali você tem um monte de tempo de inatividade ... e Deus não permita que você esteja lotado por espaço em disco. Você NÃO quer ver o que acontece quando você aglomera ocfs2.

Lembre-se de que evms, que costumava ser a maneira 'preferida' de gerenciar clusters ocfs2, seguiu o caminho do pássaro dodô em favor de clvmd e lvm2. (E boa viagem para evms.) Além disso, os batimentos cardíacos rapidamente se transformarão em um projeto de zumbi em favor da pilha de openais / marcapasso. (Além disso: ao fazer a configuração inicial do cluster para o ocfs2, você pode especificar 'pcmk' como o mecanismo de cluster, em vez da pulsação. Não, isso não está documentado.)

Pelo que vale a pena, voltamos aos nfs gerenciados pelo pacemaker, porque os poucos segundos de inatividade ou alguns pacotes tcp perdidos à medida que o pacemaker migra um compartilhamento nfs para outra máquina são triviais em comparação com a quantidade de tempo de inatividade que estávamos observando para o básico operações de armazenamento compartilhado, como adicionar máquinas ao usar o ocfs2.

Karl Katzke
fonte
2
Só queria comentar que essa é exatamente a minha experiência com OCFS2 / Pacemaker vs. NFS também. Depois de experimentar o OCFS2 como armazenamento de dados em cluster por um tempo, achei extremamente ausente. Enquanto isso, nosso sistema HA NFS está funcionando como um encanto.
Kamil Kisiel
11
Definitivamente, o OCFS2 não é o que estou vendo. Por distribuída fazer algo não significa com uma instância central de armazenamento, mas sim algo onde eu possa facilmente adicionar / remover os nós que fornecem armazenamento enquanto ainda estar com o resto do "cluster"
serverhorror
2
Como ainda estou recebendo votos positivos sobre esta resposta, devo acrescentar que agora estamos usando o GlusterFS na produção como substituto do nfs. No entanto, NÃO armazenamos imagens de disco da VM, arquivos de armazenamento de banco de dados (sqlite ou myisam ou o que for) ou outros arquivos que tendem a mudar com frequência no glusterfs, pois causam chicote de replicação. Aqueles que armazenamos localmente em hosts de VM no LVM e usamos o DRBD para distribuir em sites de failover, ou usam replicação interna.
31812 Karl Katzke
3

Só para jogar aqui os meus € 0,02: o OpenAFS não pode fazer o que você quer?

wzzrd
fonte
3

E o Xtreemfs ? A versão 1.4 (novembro de 2012) é considerada Qualidade da produção.

É compatível com POSIX e possui excelente tolerância automática a falhas.

MattBianco
fonte
2

O Luster permite vários repositórios de metadados na configuração ativa / passiva para redundância, portanto, nenhum ponto único de falha.

Também vale a pena olhar para o OCFS2.

Observe que, eliminando o requisito de acesso múltiplo à rede, é possível alternar para algo como iSCSI ou mesmo CIFs ou NFS. A desvantagem é que você precisa "esculpir" pedaços do seu uberArray em pedaços para cada servidor que precisar de espaço.

pjz
fonte
2

A menos que seja para fins acadêmicos / de desenvolvimento, esse tipo de coisa deve ser abordado a partir dos requisitos gerais do projeto. A maioria dos sistemas de arquivos distribuídos não é madura o suficiente para uma implantação séria - por exemplo, o que você faz se tudo acontecer. Se for para fins acadêmicos / de desenvolvimento, isso é realmente uma coisa boa, pois você pode aprender bastante e corrigir muitos bugs.

O comentário questionando se você realmente precisa da semântica do POSIX é um bom começo. A semântica de "sistema de arquivos" não POSIX pode ser muito mais flexível, levando a sistemas muito mais confiáveis.

Se esse é um aplicativo herdado, eu realmente me pergunto por que um sistema de arquivos distribuído moderno pode ser considerado a melhor solução.

Não me interpretem mal - estes são brinquedos incrivelmente divertidos. Eu só não gostaria de ser responsável por uma solução interdependente complexa que não é comumente usada e seria muito difícil de corrigir quando ela sair.

Carlito
fonte
1

Você realmente precisa absolutamente semântica POSIX? A vida fica muito mais fácil se você pode usar um armazenamento de dados personalizado. Temos um armazenamento de dados gravado internamente que é efetivamente um armazenamento de valor-chave distribuído muito grande. Você armazena um arquivo nele e recebe um token de volta. Se você quiser o arquivo de volta, forneça o token que você recebeu anteriormente. É distribuído, não é compartilhado, os dados são replicados três vezes, os nós podem ser adicionados e removidos à vontade, servidores de armazenamento e servidores de controle.

David Pashley
fonte
Infelizmente, eu realmente preciso da semântica do POSIX. Temos muitos "aplicativos herdados" que armazenam coisas no sistema de arquivos local. Reescrita tudo isso está definitivamente fora de qualquer orçamento
serverhorror
Eu suspeito que você terá que abandonar alguns de seus outros requisitos. Eu estaria olhando para GlusterFS, Luster, OCFS2, GFS, mas duvido que você encontre um que não tenha compartilhado nada.
David Pashley #
en.wikipedia.org/wiki/… lista sistemas de arquivos distribuídos, mas muito poucos deles são POSIX.
David Pashley 03/06
Éons atrás, eu costumava usar uma variante do AFS (o que é agora OpenAFS). Funcionou, mas era complexo e tinha seu próprio conjunto de peculiaridades.
Jauder Ho 04/06/09
1

O Lustre também possui um único ponto de falha, pois usa um servidor de metadados dedicado

O Luster foi projetado para oferecer suporte ao failover e um MDS / MDT / OSS pode ter um número de endereços nos quais pode ser contatado; a pulsação pode ser usada para migrar o serviço.

Esteja ciente de que algumas versões recentes tiveram problemas nos quais a desmontagem parece funcionar, mas ainda há dados em andamento no disco. No entanto, a proteção de montagem dupla deveria ter ajudado (além dos problemas interessantes que tivemos) ...

James
fonte
1

Eu recomendo que você use o MooseFS (sistema de arquivos distribuído em rede, tolerante a falhas, em expansão ). É compatível com POSIX e, desde a versão 1.6, o MooseFS oferece uma autenticação / autorização simples, semelhante ao NFS. Veja também requisitos de hardware .

TechGeek
fonte