Digamos que você tenha duas máquinas, A e B. Em cada máquina, você exporta /opt/files
como um bloco Gluster e configura a replicação do lado do cliente. Em seguida, montamos o diretório resultante como /mnt/gluster-files
em ambas as máquinas. Isso é importante!
Usando esse ponto de montagem, agora temos um sistema de arquivos altamente disponível nas duas máquinas.
Quando você escreve um arquivo - digamos /mnt/gluster-files/example
na máquina A, isso fará com que duas coisas aconteçam:
- Escreva uma cópia para
/opt/files
- Envie uma cópia pela rede para ser gravada em
/opt/files
na máquina B.
Isso é bom, porque queremos ter redundância, o que significa que precisamos ter mais de uma cópia dos dados.
Em seguida, digamos que queremos ler o mesmo arquivo. Novamente na máquina A:
- Você emite uma leitura para
/mnt/gluster-files/example
- O GlusterFS diz "Preciso verificar todos os nós de réplica para descobrir quem tem a versão mais recente desse arquivo"
- O GlusterFS verifica cada nó
- Acontece que todas as cópias são iguais, porque a replicação está funcionando bem
- Você retorna o arquivo do disco local. §
(§ Existe uma opção read-subvolume
client, e é sensato configurá-la para o volume local em qualquer máquina que seja cliente e servidor Gluster, como neste caso. Caso contrário, o passo 5 poderia ser 'você é enviou o arquivo de um nó aleatório '.)
Nos bastidores, o GlusterFS mantém /opt/files
nas duas máquinas em sincronia. Verificar todos os nós, especialmente para um grande número de arquivos pequenos, adiciona uma penalidade de desempenho não insignificante.
A pergunta é levantada: se estou executando um processo em uma dessas duas máquinas e sei que os arquivos estão em sincronia, por que não posso simplesmente ler os arquivos do compartilhamento local?
Não é recomendado, mas você pode fazer isso. Leia os arquivos de /opt/files
. Acompanhe manualmente se você sair da sincronização e, se fizer isso, faça algo como ls -laR
in /mnt/gluster-files
, que acionará uma sincronização.
Então, o que acontece se você escreve em /opt/files
na máquina A?
O arquivo fica lá sem ser notado pelo GlusterFS. Gluster não funciona assim. Ele não entra na máquina B, a menos que você faça alguma coisa que faça com que a Gluster a note na máquina A.
Portanto, você não pode simplesmente dizer ao Apache para ler e escrever em /opt/files
. O que parece ser um bom compromisso é dizer para ler /opt/files
, mas escreva para /mnt/gluster-files
. Isso só é possível se seu aplicativo permitir que você especifique um caminho diferente para ler e gravar arquivos, o que muitos não fazem.