2 Stimmen

Wiederherstellung des Apache von einem gemounteten, nicht verfügbaren NFS-Mount

Ich habe mehrere Webanwendungen in Produktion, die NFS-Verbindungen nutzen, um Ressourcen (in der Regel statische Bestandsdateien) für Webköpfe freizugeben. Wenn eine NFS-Einhängung nicht mehr verfügbar ist, hängt sich Apache auf und fordert Dateien an, auf die nicht zugegriffen werden kann, was der Kernel protokolliert:

Nov 2 14:21:20 server2 kernel: nfs: server server1 not responding, still trying

Ich habe das Verhalten in RHEL5 mit NFS v3 und Apache 2.2.3 reproduziert:

  1. Erstellen eines NFS-Mounts auf Server1 (Inhalt meiner /etc/exports)

    /srv/test_share server2(rw)

  2. Hängen Sie die NFS-Freigabe auf Server2 ein (Inhalt meiner /etc/fstab)

    server1:/srv/test_share /mnt/test_share nfs defaults 0 0

  3. Einrichten eines virtuellen Hosts in Apache mit einer einfachen HTML-Datei, die auf Bilddateien verweist, die im NFS-Sharen gespeichert sind

  4. Laden Sie die Website, die HTML- und Bilddateien geben alle 200

  5. Deaktivieren Sie die NFS-Freigabe, das Laden der Seite liefert 404s für die referenzierten Bilder

  6. Hängen Sie die NFS-Freigabe erneut ein

  7. Simulieren Sie einen NFS-Absturz, indem Sie NFS auf Server1 ausschalten - das erneute Laden der Site hängt die referenzierten Dateien ab.

Die Internetrecherchen haben bisher keine gute Lösung ergeben. Grundsätzlich wäre das gewünschte Verhalten, dass der Webserver 404er zurückgibt und sich nicht aufhängt, bis die NFS-Einhängung wiederhergestellt ist.

Zum Wohl,

Ben

2voto

pfote Punkte 286

Mehrere Optionen:

  • stellen Sie Ihre nfs-Einhängeoptionen richtig ein, Sie müssen ein Softmount durchführen, damit der nfs-Zugriff unterbrochen werden kann. versuchen Sie soft,intr,timeo=10 anstelle von default
  • Synchronisieren Sie Ihre Dokumentenstämme mit etwas anderem wie rsync, oder schreiben Sie ein halbautomatisches Checkout/Export-Skript für Ihr SCM, wenn Sie eines verwenden. Die Verwendung eines SCM wird ohnehin empfohlen, da es Ihnen die Möglichkeit gibt, auf die letzte Arbeitsversion zurückzugreifen, z. B.
  • ein echtes verteiltes Dateisystem verwenden (vorzugsweise fehlertolerant wie coda ) oder sogar ein verteiltes Blockgerätesystem wie drdb

Option 2 und 3 bieten einen getrennten Betrieb und sind daher viel robuster als nfs. drdb ist sexy, aber mein Rat wäre Option 2 mit etwas wie git oder svn, einfach und robust

0voto

Cullen Walsh Punkte 4198

Ich würde nicht direkt von der NFS-Einhängung servieren, sondern von Ihrem lokalen Dateisystem.

Es wäre nicht allzu schwierig, einen Cron-Job einzurichten, der die NFS-Einhängung alle paar Minuten mit dem lokalen Dateisystem synchronisiert. Der Apache würde seine Inhalte von dort aus bereitstellen, unabhängig von der NFS-Einhängung. Wenn der Mount ausfällt, könnte der Apache die Inhalte immer noch bereitstellen, auch wenn sie möglicherweise nicht mehr aktuell sind, bis der NFS-Mount wieder funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X