Im Zusammenhang mit dieser Frage zu StackOverflow frage ich mich, ob ich den NFS-Cache leeren oder Linux zwingen kann, die aktuellste Kopie einer Datei auf einer NFS-Freigabe anzuzeigen.
Ich habe eine Situation, in der vier Apache-Server dasselbe Verzeichnis über NFS bereitstellen, und wenn ein Server eine Änderung an einer Datei vornimmt, dauert es ungefähr 5 bis 10 Sekunden, bis die anderen Server diese Änderung sehen. Wenn in diesem Fenster eine zweite Änderung an dieser Datei vorgenommen wird, wird möglicherweise die erste Änderung überschrieben.
Der fstab
Eintrag für das Dateisystem lautet:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Gibt es einen Befehl, der Linux zwingt, den Cache einer Datei auf einer NFS-Freigabe zu leeren?
Antworten:
Überprüfen Sie diese Elemente und prüfen Sie, ob sie für Sie geeignet sind:
Auf dem Client , wenn Sie nicht bereits die Verwendung von
cto
Option in den Optionen - Spalte der/etc/fstab
Zeile für Ihr NFS - Dateisystem, fügen Sie es.cto
Weist den nfs-Client an, Dateien über "Close-to-Open" zu öffnen. Dadurch wird die Datei jedes Mal aktualisiert, wenn sie geöffnet wird.Stellen Sie auf dem Server sicher, dass Ihr Dateisystem mit der
sync
Option exportiert wird und nichtasync
. Bei synchronen Schreibvorgängen wird der Client beim Schließen der Datei auf die Festplatte geleert. ( oder mit nfs V3, wenn ein commit () ausgeführt wird ). Auf diese Weise kann es zu Leistungseinbußen kommen, aber wenn Sie in ein NFS-Dateisystem schreiben, möchten Sie dies auf jeden Fall tunsync
.Nach diesem Stackoverflow-Post funktioniert das Öffnen der Datei mit O_DIRECT nur, wenn der Kernel mit CONFIG_NFS_DIRECTIO kompiliert wurde.
Stellen Sie außerdem sicher, dass Ihre httpd.conf-Datei die folgenden Einstellungen enthält:
EnableMMAP off
EnableSendfile off
Aus der Dokumentation zur Apache-Leistungsoptimierung:
quelle
cto
auf dem Client und ich werde das versuchen. Ich habe wedersync
nochasync
auf dem Server; Ich habe gerade hinzugefügtsync
.O_DIRECT
hat mir nicht geholfen, weil es eigentlich PHP ist, das diese Dateien liest und sie nichtO_DIRECT
auf irgendeine Weise öffnen kann, die ich finden kann.Wenn Sie innerhalb eines bestimmten Prozesses opendir und closedir im übergeordneten Verzeichnis einer Datei aufrufen, wird der NFS-Cache ungültig. Ich habe dies beim Programmieren eines Job Schedulers verwendet. Sehr sehr hilfreich. Versuch es!
quelle
Wenn Sie die angegebene Datei in einem nicht zwischengespeicherten Programm (wie vim oder emacs) öffnen und dann schließen, wird der Cache für diese Datei aktualisiert / geleert
quelle