Usando GlusterFS para replicação simples

Usando GlusterFS para replicação simples

pergunta de novato. Eu preciso construir isso:

  • /sharedpasta ~ 500 GB de arquivos, ~ 1 MB cada.
  • Duas caixas (servidor1 e servidor2) conectadas por uma LAN de 1Gbs
  • Cada caixa precisa obter acesso r/w aos arquivos, então ambos são clientes
  • Quero que os arquivos sejam replicados nas duas caixas, toda vez que um arquivo for gravado em um servidor o mesmo arquivo deverá estar presente no outro.

Minhas perguntas sobre GlusterFS:

  • Isso duplicará os arquivos na mesma caixa? Por exemplo, os arquivos estão ativados /sharede a montagem em /mnt/shared. Será necessário 1 GB de espaço em cada servidor?
  • Em vez disso, devo usar o sistema de arquivos diretamente, escrevendo localmente em /shared? A replicação funciona dessa maneira sem montar um cliente?

Além disso, se alguém souber alguma outra forma de realizar essa configuração ficarei muito grato. Desde já, obrigado.

Responder1

Na verdade, o Gluster é perfeito para esse cenário. Você obtém replicação bidirecional e a capacidade de montar o sistema de arquivos de qualquer máquina, fornecendo (teoricamente) o dobro da capacidade efetiva de E/S do NFS e failover ativo caso uma das caixas falhe.

O problema de fazer o rsync ativo dessa maneira é bloquear a E/S devido a bloqueios de arquivos. Dependendo da sua aplicação e da alteração nos dados, isso pode ser irrelevante ou desastroso! Os sistemas de arquivos distribuídos possuem uma semântica de bloqueio muito específica que evita que isso aconteça. Mesmo que o inotify tenha um bloqueio melhor (quando tentei pela última vez, não) hoje em dia, o acesso aos seus arquivos pode ser bloqueado, dependendo se a sua rede consegue lidar com as alterações. Todas essas são advertências teóricas, mas vale a pena examinar dependendo do que seu aplicativo faz.

Responder2

Finalmente consegui resolver isso usando GlusterFS em ambas as caixas. Algumas coisas aprendidas no processo:

  • Primeiro tentei uma configuração genérica de RAID 1. O principal problema disso é que o cliente sempre utiliza o tcp para contatar os dois servidores, mesmo quando um deles está na mesma máquina. Então eu tenho que alterar as configurações do cliente para substituir o volume 'local' tpc por um volume de acesso direto (armazenamento/posix)
  • Para evitar sobrecarregar o link de rede, cada cliente lido usa o armazenamento local com a diretiva option read-subvolume. É claro que para manter a integridade do RAID1, o GlusterFS sempre verifica outros volumes também, mas o arquivo real é recuperado diretamente do disco
  • O desempenho é bom, mas o processo do cliente parece um abraço na memória. Acho que está relacionado ao volume de leitura rápida, preciso investigar mais

Configuração do cliente modificada:

# Server1 configuration (RAID 1)
volume server2-tcp
    type protocol/client
    option transport-type tcp
    option remote-host server2
    option transport.socket.nodelay on
    option transport.remote-port 6996
    option remote-subvolume brick1
end-volume

volume posix-local
    type storage/posix
    option directory /shared
end-volume

volume locks-local
    type features/posix-locks
    subvolumes posix-local
end-volume

volume brick-local
    type performance/io-threads
    option thread-count 8
    subvolumes locks-local
end-volume

volume mirror-0
    type cluster/replicate
    option read-subvolume brick-local
    subvolumes brick-local server2-tcp
end-volume

.....

Respondendo às minhas duas perguntas:

Isso duplicará os arquivos na mesma caixa?

Não, o fs é montado usando FUSE. Linha /etc/fstab atual:

/etc/glusterfs/client.vol /mnt/shared glusterfs padrões 0 0

Em vez disso, devo usar o sistema de arquivos diretamente, escrevendo localmente em/shared? A replicação funciona dessa maneira sem montar um cliente?

Não, sempre use volumes montados para fazer leituras/gravações, usar diretamente o sistema de arquivos pode levar a inconsistências.

Responder3

Seria muito mais fácil de configurarrsync para fazer espelhamento ativo, ou apenas configurar um compartilhamento nfs e fazer com que ambos sejam extraídos da mesma unidade real.

informação relacionada