NFS-Caching-Problem

8

Wir haben ein Problem, das zeitweise während einer Codebereitstellung auftritt. NFS speichert die Dateien beim Lesen zwischen, aber wenn eine Datei während einer Codebereitstellung gelesen wird, bleibt sie in einem fehlerhaften Zustand, als ob die Datei während der Bereitstellung nicht geändert worden wäre. Die einzige Möglichkeit, dieses Problem zu beheben, besteht darin, den NFS-Cache nach der Bereitstellung zu leeren.

Unser Webserver gibt leere Seiten für alle Anfragen zurück, bis der NFS-Cache geleert ist.

Gibt es eine Einstellung oder hat jemand einen Vorschlag, wie dies behoben werden kann?

Wir führen derzeit NFS v3 aus.

Michael
quelle
Was passiert, wenn Sie eine neu bereitgestellte Datei auf einem Webserver manuell öffnen, bevor Sie die NFS-Caches löschen? Sehen Sie die alte oder aktualisierte Version? Wie stellen Sie @ rsync @ oder etwas anderes bereit? Was sind die Mount-Optionen? AFAIK es soll sich nicht so verhalten.
Dmitri Chubarov
Nun, eine neu bereitgestellte Datei zeigt die neue Datei. Wir stellen mit a git pull- Mount-Optionen bereit: nfs rsize = 32768, wsize = 32768, timeo = 30, retrans = 10, intr, noatime, soft, async, nodev
Michael
Da der Linux-NFS-Client eine nahezu offene Cache-Konsistenz aufweist, müssen Sie sicherstellen, dass die Dateien vom Webserver geschlossen und erneut geöffnet werden, sobald die Bereitstellung abgeschlossen ist.
Dmitri Chubarov
Starten Sie den Webserver jedes Mal neu?
Michael
Tut mir leid, dumme Fragen zu stellen, aber sowohl Server als auch Client sind NTP-synchronisiert, ja?
MadHatter

Antworten:

7

Existiert verschiedene Optionen zum Zwischenspeichern von Dateiattributen auf einem NFS-Mount (clientseitig):

NOAC
Verwenden Sie die Option noac mount, um die Attribut-Cache-Kohärenz zwischen mehreren Clients zu erreichen. Fast jede Dateisystemoperation überprüft Dateiattributinformationen. Der Client speichert diese Informationen für einen bestimmten Zeitraum zwischengespeichert, um die Netzwerk- und Serverlast zu verringern. Wenn noac aktiviert ist, ist der Dateiattribut-Cache eines Clients deaktiviert, sodass jeder Vorgang, bei dem die Attribute einer Datei überprüft werden müssen, gezwungen ist, zum Server zurückzukehren. Auf diese Weise kann ein Client Änderungen an einer Datei sehr schnell sehen, was viele zusätzliche Netzwerkvorgänge kostet.

lookupcache = none
Wenn der Client seinen Cache ignoriert und jede Anwendungssuchanforderung mit dem Server überprüft , kann dieser Client sofort erkennen, wenn ein neuer Verzeichniseintrag von einem anderen Client erstellt oder entfernt wurde. Sie können dieses Verhalten mit lookupcache = none angeben. Die zusätzlichen NFS-Anforderungen, die erforderlich sind, wenn der Client keine Verzeichniseinträge zwischenspeichert, können zu Leistungseinbußen führen. Das Deaktivieren des Lookup-Caching sollte weniger Leistungseinbußen verursachen als die Verwendung von noac und hat keinen Einfluss darauf, wie der NFS-Client die Attribute von Dateien zwischenspeichert.

actimeo = n
Mit actimeo werden alle Werte für acregmin, acregmax, acdirmin und acdirmax auf denselben Wert gesetzt.

  • acregmin = n, Die Mindestzeit (in Sekunden), die der NFS-Client Attribute einer regulären Datei zwischenspeichert, bevor er neue Attributinformationen von einem Server anfordert. Wenn diese Option nicht angegeben ist, verwendet der NFS-Client ein Minimum von 3 Sekunden.
  • acregmax = n, Die maximale Zeit (in Sekunden), die der NFS-Client Attribute einer regulären Datei zwischenspeichert, bevor er neue Attributinformationen von einem Server anfordert. Wenn diese Option nicht angegeben ist, verwendet der NFS-Client maximal 60 Sekunden.
  • acdirmin = n, Die Mindestzeit (in Sekunden), die der NFS-Client die Attribute eines Verzeichnisses zwischenspeichert, bevor er neue Attributinformationen von einem Server anfordert. Wenn diese Option nicht angegeben ist, verwendet der NFS-
    Client ein Minimum von 30 Sekunden.
  • acdirmax = n, Die maximale Zeit (in Sekunden), die der NFS-Client Attribute eines Verzeichnisses zwischenspeichert, bevor er neue Attributinformationen von einem Server anfordert. Wenn diese Option nicht angegeben ist, verwendet der NFS-
    Client maximal 60 Sekunden.

Entnommen aus der NFS-Manpage .

Ich hoffe diese Hilfe.

Federico Sierra
quelle
1

Sie geben viele NFS-Optionen an, von denen die meisten (rsize / wsize / soft) nicht benötigt werden, da sie (normalerweise) bereits die Standardeinstellungen sind (unter Linux).

NFS-Mount-Optionen rsize=32768,wsize=32768,timeo=30,retrans=10,intr,noatime,soft,async,nodev

Wenn Sie jedoch Linux ausführen, sollten Sie wahrscheinlich die folgenden NFS-Optionen festlegen.

actimeo=3 (Setzt acreg [max | min], acdir [max | min] und kann auf 1 gesenkt werden, wenn immer noch Geschwindigkeitsprobleme auftreten.)

lookupcache=none (ignoriert den Cache vollständig, Standard ist "alle")

noac (Deaktiviert das Attribut-Caching)

Dieser Blog-Beitrag scheint mehr Informationen zu haben

Signal15
quelle