NFS-Cache: Der Dateiinhalt wird auf dem Client nicht aktualisiert, wenn er auf dem Server geändert wird


11

Hier ist meine Einrichtung: Ein NFS-Server-Computer (v4), mehrere NFS-Client-Computer.

Wenn ein Client-Computer Dateien auf den NFS-Mount schreibt, sehen die anderen Clients den neuen Inhalt sofort: kein Problem.

Wenn der Server den Inhalt der Datei ändert, wird dieser neue Inhalt erst auf dem Client angezeigt, wenn ich ein lsVerzeichnis des Clients erstellt habe.

Ich bin absolut ratlos über diese Inkonsistenz ... jede Hilfe wäre sehr dankbar!

Infos:

  • nfs 1.2.3-r1 auf Client und Server
  • acregmin, acregmax, acdirmin, acdirmax, lookupcache: Standardwerte

1
Können Sie ein kleines Experiment durchführen, um weitere Informationen zu erhalten?: Führen Sie eine ls -iauf dem Client durch, bevor Sie die Datei auf dem Server bearbeiten, und anschließend erneut. Überprüfen Sie, ob sich die Zahlen ändern. Wenn dies der Fall ist, weil der Server die Datei ersetzt und der Client dies erst bemerkt, wenn er das Verzeichnis erneut durchsucht. Wenn ja, versuchen Sie, die Mount-Option festzulegen, lookupcache=noneund prüfen Sie, ob sich das Verhalten ändert.
Patrick

2
Entschuldigung für die Verspätung. Die Inode ändert sich effektiv. Ich habe die Lookupcache-Option hinzugefügt, sie scheint zu funktionieren. Ich werde morgen wieder nachsehen.
Nummer xiii

Antworten:


11

Hinzufügen als Antwort basierend auf Ihrem Kommentar.
Die Lösung besteht darin lookupcache=none, Ihren nfs-Mount-Optionen hinzuzufügen .

Wenn Ihr Client die Datei zum ersten Mal liest, führt er eine NFS-Suche durch, um die NFS-Datei-ID abzurufen. Anschließend wird die NFS-Datei-ID zwischengespeichert. Wenn Sie zum Öffnen der Datei zurückkehren, wird der Cache verwendet. Normalerweise ist dies kein Problem, da die Datei-ID beim Aktualisieren der Datei gleich bleibt. Aber aus irgendeinem Grund wird die alte Datei entfernt und eine neue erstellt (oder umbenannt oder etwas, bei dem es sich nicht um dieselbe Datei handelt).
Normalerweise ist dies auch kein Problem, da Ihr Client beim Versuch, eine nicht vorhandene Datei-ID zu öffnen, einen Fehler vom Server erhält und erneut nach der neuen Datei-ID sucht. Aus irgendeinem Grund lässt der NFS-Server den Client diese alte Datei-ID öffnen. Vielleicht hat ein anderer Client die Datei geöffnet und sie wird noch nicht gelöscht, ich weiß es nicht.

In jedem Fall besteht die Möglichkeit zur Lösung darin, den Client anzuweisen, immer ein nfslookup durchzuführen, bevor eine Datei mit der Option nfs mount geöffnet wird lookupcache=none. Der Nachteil dabei ist, dass es teuer sein kann, wenn Sie häufig Dateien öffnen, da dadurch mehr Datenverkehr zum NFS-Server hinzugefügt wird.


Vielen Dank für Ihre Erklärung. Auf dem NFS-Server lautet der Stapel des exportierten Verzeichnisses DRBD / LVM / ext4. Vielleicht verursacht es den "Bug". Ich habe das Problem auf mehreren Clients, aber nicht auf einigen anderen ... Ich werde alle meine Tests wiederholen und Ihnen sagen, ob mit dieser Option alles gut läuft.
Nummer xiii

0

Ändern Sie die Mount-Option in hard,intr. Ich denke, die Standardeinstellung kann in Ihrem System weich sein. das wird helfen.


Leider hat das Hinzufügen dieser Mount-Optionen nichts geändert :(
numberxiii

Für meinen ersten Test mache ich einen Remount. Dann habe ich einen Test von einem anderen Client mit einem sauberen Mount durchgeführt. Das Problem scheint behoben zu sein: Wir warten 30s, um den neuen Inhalt zu sehen
numberxiii

Ich habe einen neuen Client (vm) erstellt, um zu überprüfen: kein Problem mit dem Inhalt!
Nummer xiii

1
@ johnshen64 warum denkst du, würde hart das Problem lösen? Hart / weich spielt nur eine Rolle, wenn es um Verbindungsunterbrechungen geht, hat nichts mit Caching zu tun.
Patrick

0

Sie können den NFS-Cache auch manuell mit aktualisieren

sudo mount /nfs-mount -o remount

... für den Fall, dass Sie keine Mount-Optionen hinzufügen möchten, die die Leistung beeinträchtigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.