Existe um comando que forçará o Linux a limpar o cache de um arquivo em um compartilhamento NFS?

14

Relacionado a esta pergunta no StackOverflow , estou querendo saber se existe uma maneira de liberar o cache do NFS / forçar o Linux a ver a cópia mais atualizada de um arquivo que está em um compartilhamento NFS.

Eu tenho uma situação em que quatro servidores Apache montam o mesmo diretório via NFS, e quando um servidor faz uma alteração em um arquivo, leva de 5 a 10 segundos para os outros servidores verem essa mudança. Se uma segunda alteração for feita nesse arquivo dentro dessa janela, poderá sobrescrever a primeira alteração.

A entrada fstab para o sistema de arquivos é:

172.16.1.15:/home               /media/home     nfs     vers=3,defaults,noauto,sync,acregmin=1          0       0

Existe um comando que forçará o Linux a limpar o cache de um arquivo em um compartilhamento NFS?

    
por Josh 27.10.2011 / 18:39

2 respostas

12

Verifique esses itens e veja se algum trabalho para você:

  1. No cliente , se você ainda não estiver usando a opção cto na coluna opções da linha /etc/fstab do seu sistema de arquivos NFS , adicione. cto diz ao cliente nfs para abrir arquivos via close-to-open, o que faz com que eles atualizem o arquivo sempre que o abrirem.

  2. No servidor , certifique-se de que seu sistema de arquivos seja exportado com a opção sync , e não async . Com gravações síncronas, o cliente será liberado para o disco quando o arquivo for fechado. ( ou com nfs V3, sempre que um commit () é feito ). Pode haver um impacto no desempenho dessa maneira, mas se você está fazendo gravações em um sistema de arquivos NFS, você definitivamente quer sync set.

  3. Seguindo os saltos da postagem stackoverflow, abrir o arquivo com O_DIRECT só funciona se o kernel foi compilado com CONFIG_NFS_DIRECTIO.

  4. Além disso, verifique se você possui as seguintes configurações no arquivo httpd.conf:

    • EnableMMAP off
    • EnableSendfile off

    Na documentação de ajuste de desempenho do apache:

    • Se você mapear a memória de um arquivo localizado em um sistema de arquivos montado pelo NFS e um processo em outra máquina cliente do NFS excluir ou truncar o arquivo, seu processo poderá receber um erro de barramento na próxima vez que tentar acessar o conteúdo do arquivo mapeado.
    • Desativar o EnableSendfile não ajudará especificamente com o comportamento de sincronização / assíncrono do NFS, mas precisa ser desativado se você estiver usando o apache com o NFS.
por 27.10.2011 / 22:22
3

Dentro de um determinado processo, chamar opendir e closedir no diretório pai de um arquivo invalida o cache do NFS. Eu usei isso durante a programação de um agendador de tarefas. Muito, muito útil. Experimente!

    
por 03.06.2015 / 23:17

Tags