フェイルオーバー付きのファイルシステムを実現するために、2台のサーバーでDRDB +ハートビートを実装しています。これらのサーバーは、他のサーバーのNFSサービスを公開します
現在、DRDBは正常に機能していますが、テスト時に、あるサーバーから別のサーバーに切り替えると、他のサーバーのNFSを介してマウントされたフォルダーがハングします。
このフェイルオーバーを行うための透過的な方法はありますか? NFSに対して透過的にするか、それらのnfsマウントフォルダーを再マウントする必要がありますか?
ここでの問題は、DRBDを使用して冗長ストレージアレイを作成したが、同じ共有データで実行されている2つの分離されたNFSデーモンがあることです。 NFSはステートフルです。状態を転送できない限り、フェイルオーバー時に深刻な問題が発生します。 Solaris HAのセットアップには この問題を処理するデーモン があります。 Linuxインストールの場合、NFS状態ディレクトリ(構成可能、通常は/ var/lib/nfs)が両方のサーバーの共有ディスクにあることを確認する必要があります。
障害の検出とフェイルオーバーにはHeartbeatまたはCorosyncを使用します。通常、 Quorum で構成すると、Right Thing(tm)が実行されます。他のフェイルオーバー手法は、仮想IP(VRRPなど)を提供することに焦点を合わせすぎている可能性があり、ニーズに合わない可能性があります。クラスター設定の詳細および追加コンポーネントについては、 http://linux-ha.org を参照してください。
NFSv4、DRBD、およびPacemakerを使用して 高可用性NFSに関するこのHOWTO を読むことをお勧めします。詳細な手順と説明、および高可用性NFSサービスを提供する方法に関する重要な詳細が含まれています。現在、このようなHA-NFSセットアップをいくつか本番環境に導入しており、非常にうまく機能しています。
このようなHAセットアップの一部は、古いHeartbeatシステム(/etc/ha.d/haresources
と/etc/ha.d/ha.cf
を使用するシステム)から離れて、はるかにより機能的なものを使用することです。堅牢なペースメーカースタック。これは、古いHeartbeatからの移行であり、かなりの学習曲線ですが、最終的には、その名前に値するクラスターが実行されていることを意味します。
HOWTOは、DRBDを作成および保守し、LinuxHAスタック全体に大きく貢献しているLinbitによって作成されています。残念ながら、テクニカルガイドにアクセスするには、Webサイトでの(無料の)登録が必要ですが、よく書かれていて非常に便利です。
ファイルシステムが同じメジャー/マイナーデバイス番号にあることを確認し(両側で同じdrbd-deviceを使用する場合、これは当てはまるはずです)、NFSサービスに仮想IPを使用します。
Heartbeatでは、次の順序のリソースを使用します。
VIPを最後に置くことが重要です。そうしないと、クライアントは継続的に再試行するのではなく、NFS接続を失います。
ところで:IPをリソースとしてハートビートに入れると、フェイルオーバー時にも無償のarpが実行されるため、(通常は)それについて気にする必要はありません。
これを透過的にするために私が考えることができる最善の方法は、仮想IPと仮想MACアドレスを使用することです。また、この移行が発生する可能性があることを認識しているスイッチは、無償のARPがある場合に正しいことを行います( ARPキャッシュがクリアされるのを待ちます。これは、NFSマウントが古くなるのに十分な時間がかかる場合があります)。
[〜#〜] carp [〜#〜] のようなものがおそらくIPフェイルオーバーに行く方法です-これはすべての* BSDで利用可能であり、私が知る限りLinuxにありますカーネルも。明らかに、それが希望どおりに機能することを確認するためにいくつかのテストを行います(現在テストを行っているように思われるので、良い場所にいます)。