Im Zusammenhang mit dieser Frage zu StackOverflow frage ich mich, ob es eine Möglichkeit gibt, den NFS-Cache zu leeren / Linux zu zwingen, die aktuellste Kopie einer Datei zu sehen, die sich auf einer NFS-Freigabe befindet.
Ich habe eine Situation, in der vier Apache-Server dasselbe Verzeichnis über NFS mounten, und wenn ein Server eine Änderung an einer Datei vornimmt, dauert es etwa 5 bis 10 Sekunden, bis die anderen Server diese Änderung sehen. Wenn innerhalb dieses Fensters eine zweite Änderung an dieser Datei vorgenommen wird, kann die erste Änderung überschrieben werden.
Die fstab
Eintrag für das Dateisystem ist:
172.16.1.15:/home /media/home nfs vers=3,defaults,noauto,sync,acregmin=1 0 0
Gibt es einen Befehl, der Linux dazu zwingt, den Cache einer Datei auf einer NFS-Freigabe zu leeren?
Akzeptierte Antwort:
Überprüfen Sie diese Elemente und prüfen Sie, ob etwas für Sie funktioniert:
-
Auf dem Client , wenn Sie nicht bereits
cto
verwenden Option in den Optionen Spalte der/etc/fstab
Zeile für Ihr NFS-Dateisystem, fügen Sie sie hinzu.cto
weist den nfs-Client an, Dateien über close-to-open zu öffnen, wodurch er die Datei jedes Mal aktualisiert, wenn er sie öffnet. -
Auf dem Server , vergewissern Sie sich, dass Ihr Dateisystem mit
sync
exportiert wird Option und nichtasync
. Bei synchronen Schreibvorgängen wird der Client beim Schließen der Datei auf die Festplatte geleert. (oder mit nfs V3, immer wenn ein commit() gemacht wird ). Auf diese Weise kann es zu Leistungseinbußen kommen, aber wenn Sie in ein NFS-Dateisystem schreiben, möchten Sie auf jeden Fallsync
eingestellt. -
Nach diesem Stackoverflow-Beitrag funktioniert das Öffnen einer Datei mit O_DIRECT nur, wenn der Kernel mit CONFIG_NFS_DIRECTIO kompiliert wurde.
-
Stellen Sie außerdem sicher, dass Sie die folgenden Einstellungen in Ihrer httpd.conf-Datei haben:
EnableMMAP off
EnableSendfile off
Aus der Dokumentation zur Leistungsoptimierung von Apache:
- Wenn Sie eine Datei auf einem NFS-gemounteten Dateisystem speicherzuordnen und ein Prozess auf einem anderen NFS-Client-Rechner die Datei löscht oder abschneidet, erhält Ihr Prozess möglicherweise einen Busfehler, wenn er das nächste Mal versucht, auf den Inhalt der zugeordneten Datei zuzugreifen.
- Das Deaktivieren von EnableSendfile hilft nicht speziell beim Sync/Async-Verhalten von NFS, aber es muss deaktiviert werden, wenn Sie Apache mit NFS verwenden.