NFSキャッシュ:サーバーで変更されたときにファイルの内容がクライアントで更新されない


11

これが私のセットアップです。1つのNFSサーバーマシン(v4)、いくつかのNFSクライアントマシン。

クライアントマシンがNFSマウントにファイルを書き込むと、他のクライアントはすぐに新しいコンテンツを表示します。問題ありません。

しかし、サーバーマシンがファイルのコンテンツを変更すると、クライアントからlsディレクトリを変更するまで、この新しいコンテンツはクライアントに表示されません。

私はこの矛盾に完全に困惑しています...どんな助けでも大歓迎です!

情報:

  • クライアントとサーバーの両方でのnfs 1.2.3-r1
  • acregmin、acregmax、acdirmin、acdirmax、lookupcache:デフォルト値

1
詳細について少し実験できますか?:ls -iサーバー上でファイルを編集する前にクライアントでを実行し、その後で再度実行します。数値が変化するかどうかを確認します。サーバーがファイルを置き換えているためにサーバーがファイルを置き換え、クライアントがディレクトリを再スキャンするまでクライアントがこれに気付かない場合。その場合は、マウントオプションlookupcache=noneを設定して、動作が変化するかどうかを確認してください。
Patrick

2
遅れて申し訳ありません。iノードは効果的に変更されます。lookupcacheオプションを追加しましたが、動作するようです。明日またチェックします。
numberxiii

回答:


11

コメントに基づいて回答として追加します。
解決策はlookupcache=none、nfsマウントオプションに追加することです。

何が起こるかというと、クライアントが初めてファイルを読み取るときに、NFSルックアップを実行してNFSファイルIDを取得します。次に、NFS fileidをキャッシュし、ファイルを開くために戻ったときに、キャッシュを使用します。通常、これは問題ではありません。ファイルが更新されても、ファイルIDは同じままです。しかし、何らかの理由で古いファイルが削除され、新しいファイルが作成されます(または名前が変更されたか、同じファイルではない場所に何かが作成されます)。
クライアントがそこにないファイルIDを開こうとすると、サーバーからエラーが発生し、新しいファイルIDを取得するために別の検索を行うため、通常これは問題になりません。しかし、何らかの理由で、NFSサーバーはクライアントにその古いfileidを開かせています。おそらく別のクライアントがファイルを開いているため、まだ削除されていません。

いずれにせよ、それを解決する方法は、nfsマウントオプションを使用してファイルを開く前に常にnfslookupを実行するようにクライアントに指示することですlookupcache=none。これの欠点は、ファイルを頻繁に開くと、NFSサーバーへのトラフィックが増えるため、コストがかかる可能性があることです。


あなたの説明をありがとう。NFSサーバーでは、エクスポートされたディレクトリのスタックはDRBD / LVM / ext4です。それが「バグ」を引き起こしているのかもしれません。私はいくつかのクライアントで問題を抱えていますが、他のクライアントでは問題がありません...私はすべてのテストをやり直し、すべてがこのオプションでうまくいくかどうかを教えます。
numberxiii 2012

0

マウントオプションをに変更しますhard,intr。私はあなたのシステムではデフォルトがソフトかもしれないと思います。これは役立ちます。


残念ながら、これらのマウントオプションを追加しても何も変わりませんでした:(
numberxiii

最初のテストでは、再マウントを行います。次に、別のクライアントからクリーンマウントでテストを行いました。問題は修正されたようです。新しいコンテンツが表示されるまで30秒待ちます
numberxiii

チェックする新しいクライアント(vm)を作成しました。コンテンツに問題はありません!
numberxiii

1
@ johnshen64なぜあなたは懸命に問題を解決すると思いますか?ハード/ソフトは、接続の中断に関してのみ重要であり、キャッシングとは関係ありません。
Patrick

0

NFSキャッシュを手動で更新することもできます

sudo mount /nfs-mount -o remount

...パフォーマンスを低下させるマウントオプションを追加したくない場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.