Pacemaker/OpenAISでNFSv4を実行しているサーバーを管理しています。 NFSはTCPを使用するように構成されています。 NFSサーバーをPacemakerクラスター内の別のノードに移行すると、メタデータが保持されていても、クライアントからの接続が「ハング」し、最終的に90秒後にタイムアウトになります。その90秒後、古いマウントポイントは「古くなった」状態になり、マウントされたファイルにアクセスできなくなります。
90秒の猶予期間は、クライアント構成ではなくサーバー構成の一部のようです。サーバーに次のメッセージが表示されます。
カーネル:NFSD:90秒の猶予期間を開始
移行後(共有のアンマウントしてから再マウント)にクライアントノードでNFSクライアントを再起動すると、問題は発生しませんが、接続とファイル転送は引き続き中断されます。
3つの質問:
NFSは、クライアントの状態の多くをサーバーに保存します。 Pacemaker/OpenAISは、この分野におけるNFSの欠点を補うことはできません。サーバーとクライアントが状態を再取得するための猶予期間があります。これはプロトコルの一部です。
とにかく、クライアントの状態を完全に移行していないようです(/ var/lib/nfsの内容など)。サーバー側で状態ごとに同期する必要があるアイデアと内容については、 this を参照してください。
NfSv3を使用すると、マウントにUDPトランスポートを指定して瞬時のフェイルオーバーを実現でき、クライアント/サーバーは賢明ではありませんが、NFSv4では少し注意が必要です。何よりもまず、TCPが唯一の利用可能なトランスポートであり、接続を足元から引き裂いて通常のように続行することはTCPの性質ではないためです。
転送時間を短縮できます。特に、共通のサーバー状態ディレクトリとFSIDの保守に関するアドバイスに従う場合。 NFSを停止する前にリスニングインターフェイスをプルして、マウントがリトラクトされていないことを確認してください(exportfs -ua
)。しかし、それは絶対に瞬時になることはありません。
また、1つのサーバーから切り替えてから、すぐに元に戻すことはできません。以前のサーバーは、以前の接続をTIME_WAIT
状態で開いたままにすることができ、最大20分間新しい接続を拒否します。
これに関する詳細の多く Heartbeat wiki page は少し古い学校ですが、それでも適切です。
物理ディスクはユニット間で共有されていますか?たとえば、a SANディスクですか?
一定のfsidでディスクをエクスポートしていますか
/ share *(rw、sync、fsid = 6667)
さもないと:
NFSファイルハンドルを同じに保つには、NFSを提供するデバイスのiノード番号、IP、マイナー番号、メジャー番号が同じである必要があります。したがって、デバイス上でlvmを使用し、lvmのマイナー/メジャーの同期を維持します。
NFSv4はステートフルプロトコルです。つまり、当事者(クライアント、サーバー)は、通信に従事している場合、常に互いについて認識している必要があります。つまり、サーバーが停止して別の場所で再起動した場合、クライアントは移動前に切断し、移動が完了したら再接続する必要があります(Pacemaker + NFSd!= love :-)
多分あなたは試してみるべきです glusterfs HA /クラスタリングのために