12

NFS クライアントで古いデータを処理する適切な方法を見つけようとしています。次のシナリオを検討してください。

  • 2 台のサーバーが同じ NFS 共有ストレージをファイル数とともにマウントします
  • 1 台のサーバー上のクライアント アプリケーションが一部のファイルを削除する
  • 2 台のサーバー上のクライアント アプリケーションが削除されたファイルにアクセスしようとすると、次のエラーで失敗します: 古い NFS ファイル ハンドル (何もおかしくない、エラーが予想されます)

(また、パフォーマンス上の理由から、両方のサーバーでキャッシュ マウント オプションがかなり高いことを知っておくと役立つ場合があります)。

私が理解しようとしているのは次のとおりです。

  • ファイルが存在することを確認する信頼できる方法はありますか? 上記のシナリオでは、ファイルの lstat は成功を返し、アプリケーションはファイルを移動しようとした後にのみ失敗します。
  • クライアント上のディレクトリの内容をサーバーと手動で同期するにはどうすればよいですか?
  • NFS の場合に信頼性の高いファイル管理コードを作成する方法に関する一般的なアドバイスはありますか?

ありがとう。

4

3 に答える 3

18
  • ファイルが存在することを確認する信頼できる方法はありますか? 上記のシナリオでは、ファイルの lstat は成功を返し、アプリケーションはファイルを移動しようとした後にのみ失敗します。

これが通常の NFS の動作です。

  • クライアントのディレクトリの内容をサーバーと手動で同期するにはどうすればよいですか?

NFS は通常の POSIX 準拠のファイル システムのふりをするため、これを手動で行うことは不可能です。

NFS クライアント側のキャッシュの影響を何らかの方法で軽減するために、close()/open() のコードを作成しようとしました。私の場合、他のサーバー上のファイルに書き込まれた情報を読み取る必要がありました。しかし、再開のトリックでさえ、ほとんど効果がありませんでした。また、アプリケーション全体の速度が低下するため、書き込み側に fdatasync() を追加することはできません。

これまでの NFS に関する私の経験では、できることは何もないということです。重要なコード パスでは、ESTALE を返すファイル操作を再試行するように単純にコーディングしました。

  • NFS の場合に信頼性の高いファイル管理コードを作成する方法に関する一般的なアドバイスはありますか?

必要に応じて改造してください。ただし、顧客が信頼性を求める場合は、NFS を使用しないでください。

たとえば、私の会社は、顧客が信頼性を求めている場合、適切な分散ファイル システムの使用を宣伝しています (意図的にブランドを省略しています)。当社のコア ソフトウェアは NFS での実行が保証されておらず、そのような構成はサポートされていません。しかし、私たちの場合、データが FS に書き込まれるとすぐに他のすべてのノードでアクセスできるようになるという保証が本当に必要です。

NFS のコヒーレンシは実現できますが、パフォーマンスが犠牲になるため、NFS はほとんど使用できなくなります。(マウント オプションを確認してください。) NFS は、それがサーバー ファイル システムであるという事実を隠すために狂ったようにキャッシュします。すべての操作を一貫させるために、NFS クライアントはローカル キャッシュをバイパスして、小さな操作ごとに NFS サーバーに同期的にアクセスする必要があります。そして、それは決して高速ではありません。

しかし、ここでは Linux について話しているので、ソフトウェアの顧客に、利用可能なクラスター ファイル システムを評価するようアドバイスすることができます。たとえば、RedHat はGFSを正式にサポートするようになりました。CodaFS を使用している人について聞いたことがありますが、確かな情報はありません。

于 2010-07-08T17:08:53.443 に答える
5

ls -lファイルを含むディレクトリでの実行に成功しました。

于 2014-11-20T20:19:21.803 に答える
4

「noac」マウントオプションを試すことができます

man nfs から:

クライアントがファイル属性をキャッシュしないようにするだけでなく、noac オプションを使用すると、アプリケーションの書き込みが強制的に同期化されるため、ファイルに対するローカルの変更がサーバー上ですぐに表示されます。こうすることで、他のクライアントがファイルの属性をチェックするときに、最近の書き込みをすばやく検出できます。

noac オプションを使用すると、同じファイルにアクセスする NFS クライアント間でキャッシュの一貫性が向上しますが、パフォーマンスが大幅に低下します。そのため、代わりにファイル ロックを適切に使用することをお勧めします。

2 つのマウントを使用できます。1 つは同期が必要な重要で高速に変化するデータ用で、もう 1 つはその他のデータ用です。

また、NFS ロックとその制限について調べてください。

一般的なアドバイスとして:

複数のホストから同時に読み取られるファイルを切り捨てる 1 つの方法は、コンテンツを一時ファイルに書き込み、renameそのファイルを最終的な場所に書き込むことです。

同じファイルシステムでは、この操作はアトミックである必要があります。

于 2010-07-08T15:34:16.660 に答える