En relation avec cette question sur StackOverflow, je me demande s'il existe un moyen pour moi de vider le cache NFS / forcer Linux à voir la copie la plus récente d'un fichier qui se trouve sur un partage NFS.
J'ai une situation où quatre serveurs Apache montent le même répertoire via NFS, et lorsqu'un serveur modifie un fichier, il faut environ 5 à 10 secondes pour que les autres serveurs voient ce changement. Si une deuxième modification est apportée à ce fichier dans cette fenêtre, elle peut écraser la première modification.
Le fstab
l'entrée pour le système de fichiers est :
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Existe-t-il une commande qui forcera Linux à vider le cache d'un fichier sur un partage NFS ?
Réponse acceptée :
Vérifiez ces éléments et voyez s'ils fonctionnent pour vous :
-
Sur le client , si vous n'utilisez pas déjà le
cto
option dans les options colonne du/etc/fstab
ligne pour votre système de fichiers NFS, ajoutez-la.cto
indique au client nfs d'ouvrir les fichiers via close-to-open, ce qui les oblige à actualiser le fichier chaque fois qu'ils l'ouvrent. -
Sur le serveur , assurez-vous que votre système de fichiers est exporté avec le
sync
option, et nonasync
. Avec les écritures synchrones, le client videra sur le disque lorsque le fichier sera fermé. (ou avec nfs V3, chaque fois qu'un commit() est fait ). Il peut y avoir un impact sur les performances de cette façon, mais si vous faites des écritures sur un système de fichiers NFS, vous voulez certainementsync
ensemble. -
Dans la foulée de cet article de stackoverflow, l'ouverture de fichier avec O_DIRECT ne fonctionne que si le noyau a été compilé avec CONFIG_NFS_DIRECTIO.
-
Assurez-vous également que vous disposez des paramètres suivants dans votre fichier httpd.conf :
EnableMMAP off
EnableSendfile off
À partir de la documentation de réglage des performances apache :
- Si vous mappez en mémoire un fichier situé sur un système de fichiers monté sur NFS et qu'un processus sur une autre machine cliente NFS supprime ou tronque le fichier, votre processus peut obtenir une erreur de bus la prochaine fois qu'il essaiera d'accéder au contenu du fichier mappé.
- Désactiver EnableSendfile n'aidera pas spécifiquement le comportement de synchronisation/asynchrone de NFS, mais il doit être désactivé si vous utilisez apache avec NFS.