Sincronização de arquivos em tempo real entre servidores com hunderd - milhares de arquivos pequenos

3

Eu dei a tarefa de criar dois servidores CentOS 7 onde não apenas os bancos de dados serão replicados, mas também arquivos. Agora, meu problema é que provavelmente haverá centenas de milhares de arquivos, senão um milhão de arquivos, com uma grande variedade de tamanhos, de alguns Kbytes a ~ 1 Gbyte.

Eu li sobre

  • incremento
  • lysncd
  • git-annex
  • ChironFS

Agora, gostaria de perguntar suas experiências sobre qualquer uma delas se você a estiver usando ou estiver usando atualmente. Como o desempenho está sendo feito com as alterações no arquivo referentes a cópias e exclusões? Eu tenho muito medo de usar qualquer rsync porque minha experiência é que ele não é muito rápido com muitos arquivos pequenos, portanto não posso usá-lo para uma replicação de arquivos em tempo real. Ou eu estou errado? Por favor, prove-me errado. :)

Ou talvez eu precise de um terceiro e quarto servidor como servidores de arquivos? Se sim, a questão ainda permanece: Como replicar os arquivos entre os dois servidores em tempo real?

Felicidades!

    
por Bert 16.01.2017 / 14:18

4 respostas

2

Se seus servidores estiverem na mesma LAN, um sistema de arquivos em cluster (por exemplo: GlusterFS) ou uma solução de armazenamento compartilhado (por exemplo: via NFS) deverá ser a melhor opção.

Se os seus servidores estiverem em locais diferentes, tendo apenas conectividade WAN, a solução acima não funcionará bem. Nesse caso, e se você precisar apenas de replicação unidirecional (por exemplo: do servidor ativo para o de backup), lsyncd é uma boa solução. Outra solução é csync2 . Finalmente, outra possibilidade é usar DRBD + DRBD Proxy (note que seu componente proxy é um plugin comercial).

Finalmente, se os seus servidores só têm conectividade WAN e você precisa de replicação bidirecional (isto é: ambos os servidores estão ativos ao mesmo tempo), basicamente não existe um marcador de prata. Vou listar algumas possibilidades, mas estou longe de recomendar uma configuração semelhante:

  • unison com seu plugin em tempo real
  • psync , que escrevi exatamente para resolver um problema semelhante (mas, por favor, note que ele tem sua própria parcela de idiossincrasias, e eu fornecer sem suporte para isso)
  • syncthing com seu plugin em tempo real (mas tem limitações significativas, ou seja, não preserva as ACLs nem o proprietário / grupo do arquivo)
por 16.01.2017 / 17:04
1

Eu uso o sistema de arquivos ZFS e aproveito sua replicação em nível de bloco usando a estrutura send / receive do zfs.

Eu uso um script útil chamado syncoid para executar a sincronização regular de sistemas de arquivos em intervalos de 15 segundos a cada hora ou diariamente, dependendo na exigência.

A replicação em nível de bloco será mais limpa e precisa do que o rsync para o conjunto de dados de que você fala.

    
por 16.01.2017 / 17:32
0

Pela minha experiência, os sistemas de arquivos distribuídos fornecem mecanismos fáceis de replicação para aplicativos. No entanto, eles sofrem de mau desempenho, especialmente quando os diretórios se tornam muito grandes com muitos arquivos pequenos. Isso é esperado, já que eles precisam lidar com o bloqueio / acesso compartilhado de vários locais / máquinas.

As formas semelhantes a rsync fornecem, em alguns casos, replicação aceitável com algum atraso. Eles não afetam o desempenho do aplicativo durante a leitura / gravação da pasta replicada.

Acho que uma solução melhor é fornecer armazenamento compartilhado (quando acessível) acessível em um servidor. Outro servidor em espera está pronto para montar a pasta compartilhada quando o primeiro fica inativo. Não há necessidade de replicar nenhum dado entre servidores.

    
por 16.01.2017 / 14:53
0

Felicidades pelas ideias. Eu verifiquei e testei todos eles e estou aderindo ao lsyncd.

Razões:

  • Instalação fácil e extrema
  • Configuração fácil e extrema
  • Suporta unidirecional e replicação bidirecional
por 07.02.2017 / 09:49