SAP HANAのスプリットブレインの発生とLifeKeeperでの回避方法

    ※この記事は翻訳されたものです。本記事の原文はこちら

    スプリットブレイン。このブログの読者のほとんどは、コンピューティングの文脈でこの言葉を聞いたことがあると思います。しかし、この言葉を初めて聞いたときに、脳が2つあって、両方が同時に同じようにコントロールされているイメージを思い浮かべて混乱する気持ちもわかるのではないでしょうか。

    フェールオーバークラスターのスプリットブレインとは?

    フェールオーバークラスターのスプリットブレインでは、どちらのノードも他方のノードと通信できなくなり、スタンバイサーバーはアクティブノードに障害が発生したと見なして、自身をアクティブサーバーに昇格させます。これにより、両方のノードが「アクティブ」になり、それぞれが他方のノードに障害が発生したと見なします。その結果、両方のノードのデータが変更されるため、データの整合性と一貫性が損なわれます。これがスプリットブレインと呼ばれる現象です。

    スプリットブレインシナリオには2種類あり、それを回避するための適切な手順が実行されない場合、SAP HANAリソース階層で発生する可能性があります。

    • HANAリソースのスプリットブレイン:複数のクラスターノードでHANAリソースがアクティブ(ISP)になっています。この状態は通常、一時的なネットワーク障害がクラスターノード間のコミュニケーションパスに影響を与えていることが原因です。
    • SAP HANAシステムレプリケーションのスプリットブレイン:HANAリソースは、プライマリーノードではアクティブ(ISP)、バックアップノードではスタンバイ(OSU)ですが、データベースは両方のノードでプライマリーレプリケーションサイトとして実行および登録されています。この問題は通常、フェールオーバー時に以前のプライマリーノードでデータベースを停止できなかった場合、データベースのAutostartが有効になっている場合、またはクラスタリングソフトウェア環境外のセカンダリーレプリケーションサイトでデータベース管理者が「hdbnsutil -sr_takeover」を手動で実行した場合に発生します。

    スプリットブレインの問題を回避する

    サイオステクノロジー社の高可用性ソリューションである「LifeKeeper・DataKeeper」が導入された環境において、各タイプのスプリットブレインシナリオを回避または解決するための推奨事項を以下に示します。

    スプリットブレインシナリオでは以下のようなメッセージがログに出力され、問題が解決されるまでquickCheckの間隔(デフォルトでは2分)ごとに、開いているすべてのコンソールに表示されます。

    EMERG:hana:quickCheck:HANA-SPS_HDB00:136363:WARNING: A temporary communication failure has occurred between servers hana2-1 and hana2-2. Manual intervention is required in order to minimize the risk of data loss. To resolve this situation, please take one of the following resource hierarchies out of service: HANA-SPS_HDB00 on hana2-1 or HANA-SPS_HDB00 on hana2-2. The server that the resource hierarchy is taken out of service on will become the secondary SAP HANA System Replication site.

    推奨の解決方法は以下の通りです。

    1. 各クラスターノードでデータベースを調査し、どのインスタンスに最新のデータまたは関連データが含まれているかを確認します。この確認は、データに精通している適任なデータベース管理者が行う必要があります。
    2. 保持する必要があるデータを含むノードのHANAリソースはLifeKeeperでアクティブ(ISP)のままであり、セカンダリーレプリケーションサイトとして再登録されるノードのHANAリソース階層は、LifeKeeperで完全にOut of Serviceになります。階層のサービスを停止するノード上のHANAリソース階層の各リーフリソースを右クリックし、 [Out of Service …] をクリックします。
    3. SAP HANAリソース階層のサービスがOut of Serviceになると、LifeKeeperは次のquickCheck間隔(デフォルトでは2分)の間にセカンダリーノードをセカンダリーレプリケーションサイトとして再登録します。レプリケーションが再開されると、アクティブノードに存在しないスタンバイノードのデータは失われます。スタンバイノードがセカンダリーレプリケーションサイトとして再登録されると、SAP HANA階層は高い可用性が保たれた状態に戻ります。

    SAP HANAシステムレプリケーションのスプリットブレインの解決

    このスプリットブレインシナリオでは、次のようなメッセージがログに出力され、問題が解決されるまで、quickCheckの間隔(デフォルトでは2分)ごとに、開いているすべてのコンソールに表示されます。

    EMERG:hana:quickCheck:HANA-SPS_HDB00:136364:WARNING: SAP HANA database HDB00 is running and registered as primary master on both hana2-1 and hana2-2. Manual intervention is required in order to minimize the risk of data loss. To resolve this situation, please stop database instance HDB00 on hana2-2 by running the command ‘su – spsadm -c “sapcontrol -nr 00 -function Stop”’ on that server. Once stopped, it will become the secondary SAP HANA System Replication site.

    推奨の解決方法は以下の通りです。

    1. 各クラスターノードでデータベースを調査して、スタンバイノードにアクティブノードには存在しない重要なデータが存在するかどうかを確認します。スプリットブレイン状態の間に重要なデータがスタンバイノードのデータベースにコミットされた場合、データをアクティブノードに手動でコピーする必要があります。これは、データに精通している適任なデータベース管理者が行う必要があります。
    2. 不足しているデータがスタンバイノード上のデータベースからアクティブノードにコピーされたら、LifeKeeper警告メッセージに示されているコマンドを実行して、スタンバイノード上のデータベースを停止します。

    su – <sid>adm -c “sapcontrol -nr <Inst#> -function Stop”

    <sid> はHANAインストール時の小文字のSAPシステムIDで、 <Inst#> はHDBインスタンスのインスタンス番号です(例:インスタンスHDB00のインスタンス番号は00)。

    1. データベースが正常に停止したら、LifeKeeperは次のquickCheck間隔(デフォルトでは2分)の間にスタンバイノードをセカンダリーレプリケーションサイトとして再登録します。レプリケーションが再開されると、アクティブノードに存在しないスタンバイノードのデータは失われます。スタンバイノードがセカンダリーレプリケーションサイトとして再登録されると、SAP HANA階層は高い可用性が保たれた状態に戻ります。

    一般的なスプリットブレインのシナリオを認識し、それを軽減するための手順を実行することで、時間を節約し、データの整合性を守ることができます。

    SNSでもご購読できます。