Compartilhamento de arquivos em cache local simples, descentralizado, sincronizado automaticamente para o servidor linux

1

Gostaria de saber se alguém poderia me recomendar alguma solução para compartilhar arquivos entre uma pequena quantidade de VPS (servidores privados virtuais) do Linux.

Basicamente eu tenho um monte de VPS Linux para gerenciar, e eu quero compartilhar arquivos entre eles. Os casos de uso típicos são para compartilhar arquivos de dados, bibliotecas pré-compiladas ou binários, etc, portanto, a frequência de gravação é muito baixa, a maioria dos quais são apenas adicionando novos arquivos em vez de modificar os existentes. Normalmente eu uso minha própria máquina desktop para gerar os dados e construir os binários e publicar nas máquinas.

Os requisitos são:

  1. Simples. Não precisa ser uma tecnologia complicada projetada para grandes clusters. Eu tenho apenas uma pequena quantidade de máquinas, digamos 10-20.
  2. Os dados são replicados e armazenados em todas as máquinas. Os VPS não estão próximos um do outro, portanto, a conexão de rede é lenta, portanto, todos os dados devem ser replicados e armazenados localmente em todas as máquinas.
  3. Descentralizado. Máquinas podem ser baixadas ou removidas a qualquer momento devido a eu ter esquecido de pagar em tempo hábil. Portanto, as máquinas não precisam manter a conexão com um servidor centralizado, mas conversam entre si. Quando uma máquina é configurada pela primeira vez, ela conhece uma lista de máquinas, mas depois disso elas devem apenas conversar uma com a outra e manter uma lista de hosts disponíveis. Minha área de trabalho não tem um IP externo fixo, portanto, a área de trabalho deve ser usada apenas para enviar dados, não para serem buscados por esses servidores VPS.
  4. Quando publico novos dados da minha área de trabalho, ele deve enviar apenas aproximadamente uma cópia de dados e depois que essa máquina deve buscar uns dos outros.
  5. (Recurso opcional, mas prefere ter) o diretório de dados aparece como um vfs e montado em um determinado diretório. Isso facilita muito o uso.

Uma coisa que eu considerei foi algum sistema de arquivos baseado em fusíveis com suporte do git. Há um monte de git-fs no github ou no code.google.com, mas nenhum deles parece maduro e confiável. Além disso, em cada máquina ainda é necessário manter uma lista de máquinas disponíveis para conversar, o que não é automático e, portanto, doloroso.

Outra coisa é usar algum tipo de software de compartilhamento de arquivos P2P, mas existe algum que torne os arquivos organizados? Por exemplo, quando eu publico os arquivos, eu também deveria ser capaz de especificar quais diretórios os arquivos devem ser colocados. Isso deve ser feito automaticamente, não faço login em cada máquina e movo-as manualmente depois que o P2P baixou o arquivo.

Para a maioria dos sistemas de arquivos distribuídos, eles são projetados para clusters onde as máquinas estão próximas umas das outras. Para o HDFS, é necessário um nó de nome centralizado, então não posso usá-lo também.

Alguma ideia? Obrigado.

    
por icando 06.08.2014 / 07:22

2 respostas

3

O BitTorrent Sync parece que vai fazer o que você quiser.

Você basicamente dá a ele uma pasta para sincronizar, e o que quer que você coloque nessa pasta - estrutura e tudo - é sincronizado com qualquer máquina que você configurar com a chave secreta.

Você pode até mesmo especificar uma chave somente para leitura, para que as outras máquinas não possam afetar seu "mestre".

As máquinas podem ficar off-line por muito tempo e, quando ficam on-line, elas se conectam aos outros colegas e realizam qualquer comparação.

E, claro, é grátis.

    
por 06.08.2014 / 08:07
0

Eu simplesmente usaria o git clone do nome DNS, por exemplo, git clone ssh://mastergit.example.com/vmshared.git e, em seguida, git pull periodicamente com o cron. Esse nome DNS seria um alias (CNAME) para uma das VMs. Quando o servidor mestre é alterado, basta alterar esse alias do DNS para outra máquina.

Com a autenticação com as mesmas chaves SSH para cada VM, você terá:

  • transferência de dados criptografados como o git funciona sobre SSH,

  • fácil alternar para o servidor mestre diferente,

  • facilitando as alterações da sua cópia local (simplesmente git push ),

  • controle de versão e fácil reversão se algo frear.

por 06.08.2014 / 09:40