Sistema de arquivos distribuídos geograficamente com localidade preferida

11

Estou criando um aplicativo que precisa distribuir um servidor de arquivos padrão em alguns sites por uma WAN. Basicamente, cada site precisa gravar muitos arquivos variados de tamanho variado (alguns na faixa dos 100s MB, mas os mais pequenos), e o aplicativo é gravado de modo que as colisões não sejam um problema. Eu gostaria de ter um sistema configurado que atenda às seguintes qualificações:

  1. Cada site pode armazenar arquivos em um "espaço para nome" compartilhado. Ou seja, todos os arquivos apareceriam no mesmo sistema de arquivos.
  2. Cada site não enviaria dados pela WAN, a menos que necessário. Ou seja, haveria armazenamento local em cada lado da WAN que seria "mesclado" no mesmo sistema de arquivos lógico.
  3. Linux & Free ($$$) é um Plus

Basicamente, algo como um compartilhamento central do NFS atenderia à maioria dos requisitos, no entanto, não permitiria que os dados gravados localmente permanecessem locais. Todos os dados dos lados remotos da WAN seriam copiados localmente o tempo todo.

Eu examinei o Luster e executei alguns testes bem-sucedidos, no entanto, ele parece distribuir arquivos de maneira bastante uniforme no armazenamento distribuído. Examinei a documentação e não encontrei nada que "preferisse" o armazenamento local automaticamente ao armazenamento remoto. Mesmo algo que acompanha o armazenamento de menor latência seria bom. Funcionaria na maioria das vezes, atendendo aos requisitos desse aplicativo.


Algumas respostas para algumas perguntas abaixo:

  • Nós do servidor: 2 ou 3 para iniciar. Cada servidor teria dezenas de clientes simultâneos de leitura / gravação se conectando.
  • A topologia da WAN é de malha completa e confiável. (grande empresa, o custo não é tão limitador quanto a burocracia)
  • Failover de cliente: na verdade, eu não tinha pensado em fazer o failover de clientes (principalmente porque nosso aplicativo atual não faz isso em apenas um site). Suponho que a resposta prática seja que se espera que os servidores em cada site distribuído geograficamente sejam pontos únicos de falhas para os clientes que estão atendendo. No entanto, se você estiver pensando em algo específico aqui, acho que seria bastante pertinente para a discussão.
  • Roll-my-own: pensei em rsync / unison, no entanto, precisaria de um pouco de lógica sofisticada para tornar a parte "dinâmica" deste trabalho perfeitamente. Ou seja, o arquivo parece ser local, mas é recuperado somente sob demanda.
  • MS-DFS: Certamente parece ser algo que eu deveria procurar. Meu principal problema seria não ter certeza sobre a configuração / confiabilidade / desempenho do servidor NFS no Windows, pois muitos dos clientes conectados são clientes NFS.
dpb
fonte
Req difícil do Linux e Free to a Plus.
Dpb

Respostas:

5

Vergonha sobre o requisito do Linux. É exatamente isso que o Windows DFS faz. Desde 2003 R2, ele também faz isso em nível de bloco.

Chris Thorpe
fonte
Chris, obrigado pela resposta. Acho que DFS é praticamente o que estou procurando, no Windows. Certamente algo para eu olhar.
Dpb 25/03/10
O DFS não funciona em nível de bloco. O serviço de replicação não é transacional com base em arquivos.
Eckes
4

Algumas perguntas:

  • Em quantos nós de "servidor" você está pensando em participar dessa coisa?

  • Como é a topologia de conectividade WAN - hub e spoke, malha completa? Quão confiável é?

  • Você espera que os clientes façam failover em um servidor geograficamente não local, caso o servidor local falhe?

O Windows DFS-R certamente seria o que você está procurando, apesar de alguns custos de licenciamento potencialmente pesados.

Você diz que as colisões não são um problema e não precisa de um gerenciador de bloqueios distribuídos; portanto, você pode fazer isso com ferramentas da terra do usuário como rsync ou Unison e apenas exportar o corpus resultante de arquivos com NFS para os clientes locais. É feio, e você teria que lidar com a combinação de algum tipo de sistema para gerar uma topologia de replicação e realmente executar as ferramentas da terra do usuário, mas certamente seria barato conforme o custo do licenciamento.

Evan Anderson
fonte
Obrigado pela resposta Evan, atualizei minha pergunta com os dados que você estava solicitando. Estou interessado na sua ideia de uníssono / rsync, mas não vejo bem como o aspecto dinâmico seria tratado. (Eu não tenho muita experiência com o Unison, apenas rsync).
Dpb 25/03/10
@ DPB: Eu não estava entendendo esse requisito em sua edição original. O Microsoft DFS-R também não fará isso. O comportamento de recuperação sob demanda exigirá algo "ativo" no sistema de arquivos para interceptar solicitações de leitura para stubs de arquivos que não têm seus dados locais em cache, obter os dados e realizar a leitura. Não conheço nenhum sistema de arquivos distribuídos geograficamente com esse comportamento - é mais como um HSM.
Evan Anderson
Para aqueles sem noção como eu: en.wikipedia.org/wiki/Hierarchical_storage_management . Mais uma vez obrigado @Evan. Não estou tão interessado em reorganizar o local de armazenamento subjacente de uma maneira dinâmica como escolher inicialmente de forma dinâmica. Eu acho que o HSM parece muito legal, mas a parte legal é um exagero para o que estou fazendo.
dpb
3

Você já considerou o AFS ?

O Andrew File System (AFS) é um sistema de arquivos em rede distribuído que usa um conjunto de servidores confiáveis ​​para apresentar um espaço de nome de arquivo homogêneo e transparente ao local para todas as estações de trabalho clientes.

Pelo que entendi, a maior parte do desenvolvimento recente está por trás do projeto OpenAFS .

Não posso fingir que estou familiarizado o suficiente com o projeto para saber se o recurso "localidade preferida" está disponível, mas, caso contrário, parece um bom ajuste.

Insyte
fonte
1
Verifique também o CodaFS: en.wikipedia.org/wiki/Coda_%28file_system%29
blank3
1

Você já viu os pools OST em Luster?

Não será automático, mas com os pools OST, você pode atribuir diretórios / arquivos a OST / OSSes específicos - basicamente a alocação de armazenamento baseada em políticas, em vez do rodízio / distribuição padrão nos OSTs.

Portanto, você pode configurar um diretório por site e atribuir esse diretório aos OSTs locais desse site, que direcionarão todas as E / S aos OSTs locais. Ainda será um espaço para nome global.

Há muito trabalho para melhorar as conexões Luster over WAN (servidores de cache local e coisas assim), mas tudo ainda está sob forte desenvolvimento do AFAIK.

James
fonte
Obrigado @ James, isso é quase exatamente o que estou procurando. Não estou interessado no espaço para nome munged no nível superior (atribua diretórios específicos a um pool OST), mas talvez isso seja bom. É pelo menos bom saber qual é o caso e a limitação de uso no Luster. Obrigado novamente!
dpb
1

Talvez NFS mas com CacheFS sobre os servidores de aplicativos irá realizar a sua parte do seu objetivo. Pelo que entendi, tudo o que foi escrito ainda vai para o servidor central, mas pelo menos as leituras podem acabar sendo armazenadas em cache localmente. Isso pode levar muito tempo a atrasar as leituras, dependendo dos seus padrões de uso.

Além disso, vale a pena examinar o UnionFS mabye. Com isso, acho que cada local seria uma exportação NFS e, em seguida, você poderia usar o UnionFS em cada local para que essa e todas as outras montagens NFS do local apareçam como um sistema de arquivos. Eu não tenho experiência com isso, no entanto.

Kyle Brandt
fonte
Obrigado @Kyle, eu não sabia sobre o UnionFS, juntamente com o cache agressivo, o NFS poderia ser uma boa solução para isso. Estou achando que poderia haver mais problemas para manter à medida que o número de locais aumentasse, mas vou analisá-lo antes de decidir.
dpb
0

Você pode procurar no DRBD para replicar os discos. http://www.drbd.org/ . Esta é uma solução Linux de alta disponibilidade que acabou de entrar no Kernel.

No entanto, isso tem algumas limitações:

  1. Apenas dois nós podem ser configurados
  2. A WAN pode ser muito confiável para manter o DRBD robusto.

fonte
Idéia interessante, no entanto, acho que não daria nada ao meu aplicativo sobre outros sistemas de arquivos distribuídos. (brilho, glusterfs, etc). Obrigado por postar ...
dpb
0

Se você quiser simplificar, consulte o rsync, resolva muitos problemas e pode ser script.

O zelador do Unix
fonte
0

Verifique chironfs .

Talvez ele possa fazer o que quiser, com base no sistema de arquivos.

Dom
fonte
0

Btsync é outra solução com a qual tive uma boa experiência. Ele usa o protocolo BitTorrent para transferir os arquivos; portanto, quanto mais servidores você tiver, mais rápido será o sincronismo de novos arquivos.

Diferentemente da solução baseada em rsync, ela detecta quando você renomeia os arquivos / pastas e os renomeia em todos os nós, em vez de excluir / copiar.

Os clientes btsync do Yout podem compartilhar as pastas em uma rede local.

A única desvantagem que encontrei (em comparação com o MS DFS) é que ele não detectará uma cópia de arquivo local. Em vez disso, ele será interpretado como um novo arquivo e enviado a todos os pares.

Até agora, o btsync parece ser a melhor solução de sincronização e pode ser instalado em dispositivos Windows, Linux, Android e ARM (por exemplo, NAS)

Alex G
fonte