2

NFS マウントを使用して Web ヘッド間でリソース (通常は静的アセット ファイル) を共有するいくつかの Web アプリケーションを運用しています。NFS マウントが利用できなくなった場合、Apache はアクセスできないファイルを要求してハングし、カーネルは次のログを記録します。

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

NFS v3 と Apache 2.2.3 を実行している RHEL5 での動作を再現しました。

  1. Server1 に NFS マウントを作成します (私の /etc/exports の内容)

    /srv/test_share server2(rw)

  2. Server2 に NFS 共有をマウントします (私の /etc/fstab の内容)

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

  3. NFS共有に保存されたイメージファイルを参照する単純なHTMLファイルを使用して、Apacheで仮想ホストをセットアップします

  4. サイトをロードすると、html ファイルと画像ファイルはすべて 200 を返します

  5. NFS 共有をアンマウントし、ページをロードすると、参照されているイメージに対して 404 が返されます

  6. NFS 共有を再マウントする

  7. Server1 で NFS をオフにして、NFS クラッシュをシミュレートします。サイトをリロードすると、参照ファイルの取得中にハングします。

これまでのインターネット検索では、適切な解決策が見つかりませんでした。基本的に、Web サーバーが 404 を返し、NFS マウントが回復するまでハングしないことが望ましい動作です。

乾杯、

ベン

4

2 に答える 2

2

いくつかのオプション:

  • nfs マウント オプションを正しく設定するには、ソフト マウントを実行して、nfs アクセスを中断できるようにする必要があります。soft,intr,timeo=10代わりに試してくださいdefault
  • ドキュメント ルートを rsync などの他のものと同期するか、SCM を使用している場合は、SCM からの半自動チェックアウト/エクスポートを自分でスクリプト化します。いずれにせよ SCM の使用をお勧めします。たとえば、最後に動作していたバージョンに戻すことができます。
  • 実際の分散ファイルシステム (できればcodaのようなフォールト トレラント) を使用するか、 drdbのような分散ブロック デバイス システムを使用します。

オプション 2 と 3 は切断された操作を提供するため、nfs よりもはるかに堅牢です。drdb は魅力的ですが、私のアドバイスは、git や svn のようなシンプルで堅牢なオプション 2 です。

于 2009-11-02T23:10:02.327 に答える
0

NFS マウントから直接サービスを提供するのではなく、ローカル ファイル システムからサービスを提供します。

数分ごとに NFS マウントをローカル ファイル システムに同期する cron ジョブをセットアップするのはそれほど難しくありません。Apache は、NFS マウントに依存せずに、そこからコンテンツを提供します。マウントがダウンした場合でも、Apache は引き続きアセットを提供できますが、NFS マウントが復旧するまでアセットが古くなっている可能性があります。

于 2009-11-02T22:31:55.370 に答える