Cache NFS: conteúdo do arquivo não atualizado no cliente quando modificado no servidor


11

Aqui está a minha configuração: Uma máquina servidor NFS (v4), várias máquinas clientes NFS.

Quando uma máquina cliente grava arquivos na montagem NFS, os outros clientes veem o novo conteúdo instantaneamente: não há problema.

Mas, quando a máquina do servidor modifica o conteúdo do arquivo, esse novo conteúdo não é mostrado no cliente até que eu faça um lsdiretório do cliente.

Estou absolutamente perplexo com essa inconsistência ... qualquer ajuda seria muito apreciada!

Informações:

  • nfs 1.2.3-r1 no cliente e no servidor
  • acregmin, acregmax, acdirmin, acdirmax, lookupcache: valores padrão

1
Você pode fazer um pequeno experimento para obter mais informações ?: Faça um ls -ino cliente antes de editar o arquivo no servidor e depois novamente. Veja se os números mudam. Se eles fizerem isso, porque o servidor está substituindo o arquivo e o cliente não notará isso até que ele redefina o diretório. Nesse caso, tente definir a opção de montagem lookupcache=nonee veja se o comportamento muda.
Patrick

2
Desculpe o atraso. O inode muda efetivamente. Eu adicionei a opção lookupcache, parece funcionar. Vou verificar novamente amanhã.
numberxiii

Respostas:


11

Adicionando como resposta com base no seu comentário.
A solução é adicionar lookupcache=noneàs suas opções de montagem nfs.

O que acontece é que, na primeira vez em que o cliente lê o arquivo, ele faz uma pesquisa no NFS para obter o ID do arquivo NFS. Em seguida, ele armazena em cache o ID do arquivo NFS e, quando você volta a abrir o arquivo, ele usa o cache. Normalmente, isso não é um problema, pois quando o arquivo é atualizado, seu arquivo permanece o mesmo. Mas, por alguma razão, o arquivo antigo está sendo removido e um novo é criado (ou renomeado, ou algo para o qual não é o mesmo arquivo).
Agora, normalmente, isso não é um problema, pois quando o cliente tenta abrir um arquivo que não está lá, ele recebe um erro do servidor e faz outra pesquisa para obter o novo arquivo. Mas, por alguma razão, o servidor NFS está permitindo que o cliente abra esse arquivo antigo. Talvez outro cliente tenha o arquivo aberto e, portanto, ele não está sendo excluído ainda, eu não sei.

De qualquer forma, a maneira de resolvê-lo é dizer ao cliente para sempre executar uma pesquisa nfs antes de abrir um arquivo usando a opção de montagem nfs lookupcache=none. A desvantagem disso é que pode ser caro se você estiver abrindo arquivos com frequência, pois adiciona mais tráfego ao servidor NFS.


Obrigado pela sua explicação. No servidor NFS, a pilha do diretório exportado é DRBD / LVM / ext4. Pode estar causando o "bug". Estou com o problema em vários clientes, mas não em alguns outros ... Vou refazer todos os meus testes e dizer se tudo está indo bem com essa opção.
numberxiii

0

Mude a opção de montagem para hard,intr. Eu acho que o padrão pode ser suave em seu sistema. isso vai ajudar.


infelizmente, adicionar essas opções de montagem não mudou nada :(
numberxiii 18/04/12

Para o meu primeiro teste, faço uma remontagem. Então eu fiz um teste de outro cliente, com uma montagem limpa. O problema parece estar corrigido: esperamos 30 anos para ver o novo conteúdo
numberxiii

Eu construí um novo cliente (vm) para verificar: não há problema com o conteúdo!
numberxiii

1
@ johnshen64 Por que você acha difícil resolver o problema? Hard / soft importa apenas quando se trata de interrupção de conexão, não tem nada a ver com cache.
Patrick

0

Você também pode atualizar manualmente o cache do NFS com

sudo mount /nfs-mount -o remount

... caso você não queira adicionar nenhuma opção de montagem prejudicando o desempenho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.