Verhindern, dass eine unterbrochene NFS-Verbindung das Client-System einfriert

21

Wir haben eine NFS 4-Freigabe, die ein Volume zwischen mehreren Servern (NFS-Server und Clients alle Debian 8) teilt. In letzter Zeit gab es einige Probleme, bei denen Netzwerkausfälle die Clientsysteme einfrierten.

Unsere NFS Optionen waren minimal, nur rw(und so die Standardwerte hard, fgusw.).

Ich experimentiere jetzt mit diesen Optionen, bekomme aber nicht das Verhalten, das ich erwarte: rw,soft,bg,retrans=6,timeo=150

(Ich habe die Neuübertragungen erhöht, um einen Teil des weichen Risikos auszugleichen.)

Das Verfahren, das ich zum Testen befolge, ist:

  • Maschine booten
  • cd zu /mnt/mountpoint
  • Überprüfen Sie, ob die NFS-Verbindung in Ordnung ist
  • cd /
  • Netzwerk töten ifdown eth0
  • cd zu /mnt/mountpoint
  • ls

Zu diesem Zeitpunkt friert die Befehlszeile ein und ich kann sie nicht unterbrechen. Nach einiger Zeit wird die Meldung "nfs: server [servername] antwortet nicht, Zeitüberschreitung" angezeigt, die sich scheinbar einmal pro Minute (auf unbestimmte Zeit) wiederholt.

Was ich möchte / erwarten würde, damit die Operation fehlschlägt und die Kontrolle zurückgegeben wird.

Könnte mir bitte jemand sagen, wo ich mit diesen Einstellungen falsch liege?

(PS: Ich habe auch versucht, mit Autofs zu mounten, sah aber ein ähnliches Verhalten)

Vielen Dank

UpTheCreek
quelle
3
Ich würde es softauf keinen Fall empfehlen . Es ermöglicht das Verwerfen von Daten im Fehlerfall . Stattdessen würde ich vorschlagen hard,intr.
Roaima
2
@roaima - Danke. Diese Meinung scheint im Web weit verbreitet zu sein :) Das Problem ist, dass die derzeitige Situation hardfür uns genauso schlimm ist (Systeme sterben und bleiben tot, bis sie neu gestartet werden). intrwird in NFS4 laut man nicht unterstützt.
UpTheCreek
2
(Korrektur, es scheint, dass intres von NFS4 unterstützt wird, aber nicht von Kerneln> 2.6.25)
UpTheCreek
Ich denke, dass das, was sich von den 'Standard'-Antworten unterscheidet, darin besteht, dass Sie das aktuelle Arbeitsverzeichnis in den Mount-Punkt ändern. Bekommst du dasselbe Verhalten ohne das cd, aber stattdessen zu tun ls /mnt/mountpoint? Es ist möglich, dass lsIhre Shell nach dem Fehlschlagen versucht, Dateisystemoperationen durchzuführen, die von PWD abhängig sind. (Noch schlimmer, wenn Sie dumm genug waren, um .Ihre $PATH
Toby Speight

Antworten:

4

intrsollte es dir ermöglichen, die Kontrolle wieder zu erlangen, wenn du schlägst ^C, aber normalerweise nicht sofort.

   intr           If an NFS file operation has a major timeout and it is hard mounted, then allow signals to interupt the
                  file  operation  and cause it to return EINTR to the calling program.  The default is to not allow file
                  operations to be interrupted.

Wie Sie sagen, sind hier die Erwartungen das Problem. Netzwerkprobleme können vorübergehend sein, das Fehlschlagen eines Vorgangs ist jedoch dauerhaft. Daher blockieren die meisten Vorgänge standardmäßig nur, bis der Vorgang abgeschlossen ist.

Dies ist die Standardantwort, aber wenn ich mir eine aktuelle Manpage ansehe, sehe ich Folgendes:

                  The  intr / nointr mount option is deprecated after ker-
                  nel 2.6.25.  Only SIGKILL can interrupt  a  pending  NFS
                  operation on these kernels, and if specified, this mount
                  option is ignored  to  provide  backwards  compatibility
                  with older kernels.

Es scheint mir also kein NFS3 / NFS4-Problem zu sein, sondern eine Entscheidung darüber, wie es intrfunktioniert. Sie sollten also in der Lage sein, KILLden Vorgang auszuführen, aber das kann Ihnen nicht viel Nutzen bringen.

Ich konnte die Diskussion darüber, warum die Option entfernt wurde, nicht finden. Kannst du deinen Prozess töten?

BowlOfRed
quelle
Danke, aber laut man intrwird von nfs 2/3 aber nicht 4 unterstützt.
UpTheCreek
@UpTheCreek, ich verstehe nicht, warum das so ist. Ich habe hier kein Debian-System, aber es wird ausdrücklich als verfügbar erwähnt. Hast du es versucht? "intr Hiermit können NFS4-Vorgänge (auf Festplatten) unterbrochen werden, während auf eine Antwort vom Server gewartet wird."
BowlOfRed
2
Ja, ich habe es versucht und es schien keine Wirkung zu haben. Man sagt, es wird in den letzten Kernelversionen ignoriert.
UpTheCreek
Es ist nicht möglich, einen Prozess abzubrechen, da das gesamte System einfriert. Nach meiner Erfahrung können keine Befehle ausgegeben werden. (Obwohl es in einigen Fällen möglich sein könnte, SSH in eine solche gefrorene Maschine zu integrieren.)
MountainX für Monica Cellio
3

Ein Teil meiner Antwort ist eine auf Erfahrung basierende Meinung. Wo ich Fakten habe, werde ich (versuche mich daran zu erinnern) auf sie verlinken.

  1. NFS 4 wird als Verbesserung gegenüber den Versionen 2 und 3 angesehen. Ich habe jedoch noch keinen starken Anwendungsfall für die Notwendigkeit der Verbesserungen gesehen. Vielleicht liegt das daran, dass ich Dateisysteme mit Samba auf Windows-Clients und mit NFS auf Unix / Linux-Clients exportieren möchte.
  2. Ich würde es softunter fast keinen Umständen empfehlen . Es ermöglicht das Verwerfen von Daten im Fehlerfall . Stattdessen würde ich vorschlagen hard,intr.
  3. Wie Sie bereits betont haben, intrist dies nicht für NFS 4 gültig, aber es scheint, dass dies eher eine Kerneländerung als eine NFS- Änderung ist .
  4. Der NFS-Automounter ( autofs) eignet sich gut für meine Anwendungsfälle mit den NFS-Versionen 2 und 3 und hilft dabei, meine Client-Systeme vor Server-Fehlern zu schützen, indem die NFS-Dateisysteme nur bereitgestellt werden, wenn sie benötigt werden.

Mein Vorschlag an Sie wäre, einen Wechsel von NFS 4 zu NFS 3 in Betracht zu ziehen und zu prüfen, ob dies für Ihren speziellen Anwendungsfall hilfreich ist. Betrachten Sie es nicht als eine Herabstufung.

Roaima
quelle
1
Danke, aber ich kann nicht auf NFS3 umsteigen, und selbst wenn ich es wäre, wie Sie sagen, intrwird es in den neuesten Kernelversionen nicht unterstützt.
UpTheCreek
2
Ah ja, es sieht so aus, als ob intr es in NFS4 unterstützt wird (es ist sowohl in den Optionen 2/3 als auch in den 4 Optionen in man aufgeführt, was ein bisschen verwirrend ist), aber es wird nur in neueren Kernelversionen nicht unterstützt.
UpTheCreek
1
"Ich würde soft unter keinen Umständen empfehlen" - wirklich? In meinem Fall habe ich einen ausgelasteten Webserver, der ein Bilderverzeichnis bereitstellt. Wenn der Images-Host ausfällt und wir verwenden, hardfällt die gesamte Website aus. Wenn wir verwenden soft, erhalten wir möglicherweise einige fehlerhafte Bilder (obwohl unser Caching-System dies fast vollständig abschwächt). Das Risiko soft, Dateibeschädigungen zuzulassen, ist wirklich nicht so groß. Ich hätte lieber eine beschädigte Bilddatei als eine heruntergekommene Site!
Doug McLean
1
@DougMcLean war auch in einer ähnlichen Situation (ausgelastete Webfarm, Image-Server, NFS ...). Ich würde sagen, es ist ein etwas spezialisierter Fall. Wenn meine Image-Server so unzuverlässig gewesen wären, hätte ich mich vermutlich softmit einer akzeptablen Lösung zufrieden gegeben. Antwort geändert von "nie" zu "fast nie". Vielen Dank!
Roaima
1
Wenn mein Speicher korrekt ist, war dieses Problem mit dem Einfrieren des Systems auch in NFS v3 vorhanden.
MountainX für Monica Cellio