フェイルオーバーが発生して、サービスを提供するノードが切り替わったとき、
サービスの内容が変わってしまっては意味がありません。
各ノードのサーバー内で、それぞれデータを保持している場合は、
アクティブノードのデータを常にスタンバイノードのデータと同期しておく必要があります。
これを怠っていると、いざフェイルオーバーが発生した際に全く役に立たないものになります。
常に同期するという作業を省略するために、データを外部に設置して両ノードで共有するという方法もあります。
こちらの場合は、仮に両ノードでシステムが動いてしまった場合、
データの整合性を保つことが非常に困難になり、サービス自体が破綻してしまうことになります。
まずはこれらの問題をどのように解消していくかが問題になってきます。
さて、後者の方法において最も注意しなければならないのが、スプリットブレインです。
スプリットブレインとは、1つのサービスの提供において、複数のノードが競合してしまう状態のことです。
とくにデータを外部のストレージに置いている場合、複数のノードが同時にそれをマウントして上書きしてしまうと、
ファイルシステムが崩壊し、データが一気に失われてしまう可能性があります。
せっかく信頼性を高めるためのクラスタリングであるのに、このような事態が発生しては意味がありません。
そうした事態を避けるために、フェイルオーバー型の構成にあたっては、
どのような条件でフェイルオーバーを発生させるかを検討することが極めて重要です。
その条件判断のために、フェイルオーバー型では相手のノードの動きをどのように監視するかがポイントとなります。
一般的にはハートビートといって、相手のノードの生存をTCP/IP通信で確認する方法があります。
しかし、実際にユーザにサービスが提供される過程には、単にサーバー間でのやりとりができるかどうか、
といったポイント以外に、クライアントのネットワークへ通信ができるかどうか、
ストレージに読み書きができるか、といったさまざまなポイントを検討する必要があります。