0

私はApacheの仮想ホストを持っています:

<VirtualHost IP_WAN:80>
  ServerName test.localnet
  DocumentRoot /srv/http/localnet/test/trunk/docroot
  <Directory /srv/http/localnet/test/trunk/docroot>
    Options Indexes
  </Directory>
</VirtualHost>

パーティション /srv は NFS3 でマウントされたファイルシステムです。

172.16.0.2:/srv /srv nfs    nodev 0 0

サーバー側では、次によってエクスポートされます。

/srv    172.16.0.0/255.255.255.240(rw,sync,no_subtree_check,no_root_squash)

ディレクトリ /srv/http/localnet/test/trunk は、/srv/http/localnet/test/exports/trunk-v2 への絶対シンボリック リンクです。

/srv/http/localnet/test/exports で、SVN ツリー (trunk-v1、trunk-v2、trunk-v3) をエクスポートしました。

Apache にhttp://test.localnetを要求すると、200 OK と /srv/http/localnet/test/exports/trunk-v2/docroot からのインデックスが提供されます

しかし:

シンボリックリンク /srv/http/localnet/test/trunk を削除し、別のバージョンに新しいものを作成すると (ln -s /srv/http/localnet/test/exports/trunk-v3 /srv/http/localnet/test/trunk )、Apacheは私に404 Not Foundを与えます。約数秒/分かかり、その後すべてが正常に戻ります。

この状態で ls -la /srv/http/localnet/test/trunk/ を実行すると、すぐに元に戻ります。NFS キャッシュに問題があると思いますが、問題が発生する正確な場所とそれを防ぐ方法を見つけることができません。シンボリックリンクは前のものと同じ inode を占有し、両方のターゲット (古いものと新しいもの) が存在します。

サーバー側では、 /srv パーティションを次のようにマウントしています。

/dev/xvda7 on /srv type xfs (rw,nosuid,nodev)

このパラメーターも使用します。

echo 262144 >/proc/sys/net/core/rmem_max
echo 262144 >/proc/sys/net/core/rmem_default
echo 262144 >/proc/sys/net/core/wmem_max
echo 262144 >/proc/sys/net/core/wmem_default
echo noop >/sys/block/xvda7/queue/scheduler
echo 0 >/sys/block/xvda7/queue/read_ahead_kb

また、ネットワーク インターフェイスの MTU を 9000 まで調整しようとしていますが、成功しません。

誰が知っていますか、何が問題なのですか?ディレクトリ構造 (ls) を「手動で」更新するまで、apache がシンボリックリンクを見つけられないのはなぜですか? どうもありがとう

オンドラ

4

1 に答える 1

0

解決策は次のようです: http://publib.boulder.ibm.com/httpserv/manual70/mod/core.html#enablemmap

「NFS マウントされた DocumentRoot では、httpd がメモリ マップされている間にファイルが削除または切り捨てられると、セグメンテーション エラーが原因で httpd がクラッシュする可能性があります」

これはまさに、ページへのパスにあるシンボリック リンクを削除する場合の状況です。それが他の人に役立つことを願っています:-)

于 2012-04-27T12:21:11.717 に答える