web-dev-qa-db-ja.com

NFS v4、HA移行、およびクライアントの古いハンドル

Pacemaker/OpenAISでNFSv4を実行しているサーバーを管理しています。 NFSはTCPを使用するように構成されています。 NFSサーバーをPacemakerクラスター内の別のノードに移行すると、メタデータが保持されていても、クライアントからの接続が「ハング」し、最終的に90秒後にタイムアウトになります。その90秒後、古いマウントポイントは「古くなった」状態になり、マウントされたファイルにアクセスできなくなります。

90秒の猶予期間は、クライアント構成ではなくサーバー構成の一部のようです。サーバーに次のメッセージが表示されます。

カーネル:NFSD:90秒の猶予期間を開始

移行後(共有のアンマウントしてから再マウント)にクライアントノードでNFSクライアントを再起動すると、問題は発生しませんが、接続とファイル転送は引き続き中断されます。

3つの質問:

  1. 90秒の猶予期間とは何ですか?何のためにあるの?
  2. NFSサーバーを別のノードに移行した後、ファイルを再起動せずにクライアントでファイルが古くなるのを防ぐにはどうすればよいですか?
  3. 大きなファイルのアップロードをドロップせずにNFSサーバーを移行することは実際に可能ですか?
3
Karl Katzke

NFSは、クライアントの状態の多くをサーバーに保存します。 Pacemaker/OpenAISは、この分野におけるNFSの欠点を補うことはできません。サーバーとクライアントが状態を再取得するための猶予期間があります。これはプロトコルの一部です。

とにかく、クライアントの状態を完全に移行していないようです(/ var/lib/nfsの内容など)。サーバー側で状態ごとに同期する必要があるアイデアと内容については、 this を参照してください。

5
Allen

NfSv3を使用すると、マウントにUDPトランスポートを指定して瞬時のフェイルオーバーを実現でき、クライアント/サーバーは賢明ではありませんが、NFSv4では少し注意が必要です。何よりもまず、TCPが唯一の利用可能なトランスポートであり、接続を足元から引き裂いて通常のように続行することはTCPの性質ではないためです。

転送時間を短縮できます。特に、共通のサーバー状態ディレクトリとFSIDの保守に関するアドバイスに従う場合。 NFSを停止する前にリスニングインターフェイスをプルして、マウントがリトラクトされていないことを確認してください(exportfs -ua)。しかし、それは絶対に瞬時になることはありません。

また、1つのサーバーから切り替えてから、すぐに元に戻すことはできません。以前のサーバーは、以前の接続をTIME_WAIT状態で開いたままにすることができ、最大20分間新しい接続を拒否します。

これに関する詳細の多く Heartbeat wiki page は少し古い学校ですが、それでも適切です。

3
Dan Carley

物理ディスクはユニット間で共有されていますか?たとえば、a SANディスクですか?

一定のfsidでディスクをエクスポートしていますか

/ share *(rw、sync、fsid = 6667)

さもないと:

NFSファイルハンドルを同じに保つには、NFSを提供するデバイスのiノード番号、IP、マイナー番号、メジャー番号が同じである必要があります。したがって、デバイス上でlvmを使用し、lvmのマイナー/メジャーの同期を維持します。

1
James

NFSv4はステートフルプロトコルです。つまり、当事者(クライアント、サーバー)は、通信に従事している場合、常に互いについて認識している必要があります。つまり、サーバーが停止して別の場所で再起動した場合、クライアントは移動前に切断し、移動が完了したら再接続する必要があります(Pacemaker + NFSd!= love :-)

多分あなたは試してみるべきです glusterfs HA /クラスタリングのために

0
cipy