pergunta de novato. Eu preciso construir isso:
/shared
pasta ~ 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
/shared
e 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.