SAP HANA データベースの Takeover with Handshake
“Takeover with handshake” は、SAP HANA 2.0 SPS04 以降に追加された機能で、新しいデータベースホスト上でSAP HANA システムレプリケーションの引き継ぎを行う前にプライマリーデータベースを (完全に停止するのではなく)一時停止することで、スイッチオーバー時のプライマリーデータベースのダウンタイムを抑えます。
“Takeover with handshake” が開始されると、SAP HANA Recovery Kit は以下の処理を実行します。:
- データベースインスタンスを、旧プライマリーノードで起動したたままにする。
- 新しいプライマリーノード(旧セカンダリーノード)でSAP HANA システムレプリケーションの “Takeover with handshake” を実行する 。新しいプリマリーシステムレプリケーションサイトを登録する前に、旧プライマリーノードのデータベースを一時停止のステータスにする。
- 新しいセカンダリーノード (旧プライマリーノード) の一時停止されたデータベースを停止し、セカンダリーシステムレプリケーションサイトとして再登録する。
- データベースインスタンスを新しいセカンダリーノードで起動する。
Takeover with Handshake の実行
要件
Takeover with handshake を実行する前に、以下の要件を満たしている必要があります。:
- 各サーバーに SAP HANA 2.0 SPS04 以降がインストールされている。
- クラスター内のサーバーで保護対象の SAP HANA データベースが In Service になっている。
- SAP HANA システムレプリケーションが同期中になっている。
LifeKeeper GUI でTakeover with Handshake を実行する
LifeKeeper GUI でTakeover with Handshake を実行するためには, スタンバイサーバーのリソース上で右クリックし、 “In Service – Takeover with Handshake…” を選択します。
Takeover with handshake の機能が説明された確認用ダイアログが表示されます。:
Perform Takeover をクリックしてTakeover with handshake を開始します。この処理が完了すると 各ノードの SAP HANA リソースのステータスが Standby – Suspended と Active へと切り替わります。
SAP HANA リソースがターゲットサーバーで In Service になったら、‘remoteregisterdb’ のイベントがバックグラウンドで自動的に実行され、セカンダリーデータベースインスタンスを停止、登録、再起動します。SAP HANA リソースを In Service にする間に、このセカンダリーデータベースの再起動のプロセスをフォアグラウンドで行いたい場合は、 /etc/default/LifeKeeper で、 HANA_REGISTER_SECONDARY_DURING_RESTORE=true と設定してください。
‘remoteregisterdb’ のイベントが正常にセカンダリーデータベースインスタンスを再起動できたら、リソースステータスが Standby – HDB Running へ切り替わります。LifeKeeper がその後発生するquickCheck サイクル中にHRS 監視プロセスを開始し、HSR が In sync であることを判断したあと、リソースステータスは、 Standby – In Sync に切り替わります。この時点でSAP HANA データベースは高可用性を提供します。
コマンドラインで Takeover with Handshake を実行する
以下のどちらかのコマンドを実行することによりTakeover with handshake をコマンドラインで実行することも可能です。:
- /opt/LifeKeeper/bin/hana_takeover_with_handshake -t <HANA Tag> -s <Target Server> [-b]
- lkcli resource config hana —tag <HANA Tag> —takeover_with_handshake <Target Server>
1番目のコマンドの -b パラメーターは、ターゲットサーバーでどの SAP HANA リソース階層を In Service にするかをコントロールします。-b オプションがない場合は、階層全体 (全ての親リソースと共有された依存関係をもつリソース)が In Service になります。 -b オプションを付けると、指定された SAP HANA リソースとその依存関係が In Service になります。
フェイルバックの動作を制御する
デフォルトでは SAP HANA リソースが、Takeover with handshake の実行中に In Service にならない場合はターゲットサーバーで Out of Service – Failed (OSF) の状態のままになり手動で In Service に戻すことが要求されます。このシナリオにおいて LifeKeeper は自動フェイルバックを行って、旧ホスト上でSAP HANA リソース階層を In Service に戻す設定をすることもできます。 自動フェイルバックは以下の設定を行うことで有効になります。/etc/default/LifeKeeper で HANA_HANDSHAKE_TAKEOVER_FAILBACK=true を設定してください。
一時停止したプライマリーデータベースを再開する
保護対象の SAP HANA データベースが、現在リソースが In Service になっているノードで一時停止される (例えば管理者が、LifeKeeper の外部で Takeover with handshake を手動で実施するためなどの理由で)と、 下記のようにリソースのステータスが、 Active – Suspended および Standby – Primary になります。
このステータスになっている間、すべての SAP HANA リソースの監視は一時停止され、下記のようなメッセージが記録され、問題が解決されるまでSAP HANA リソースが現在 In Service になっているシステムですべてのオープンになっているターミナルに対してブロードキャストされます。:
EMERG:hana:quickCheck:HANA-SHC_HDB00:136377:SAP HANA database HDB00 corresponding to resource HANA-SHC_HDB00 is currently suspended on server sap-rhel81-1 due to actions performed outside of LifeKeeper. Please take the SAP HANA resource out of service on server sap-rhel81-1 and bring it in-service on the server where the database should be registered as primary master. Bringing resource HANA-SHC_HDB00 back in-service on sap-rhel81-1 will resume the suspended database. Resource monitoring for HANA-SHC_HDB00 will be suspended until the issue is resolved.
必要に応じて以下のコマンドを一時停止されているサーバー上で実行することでデータベースを手動で再開することが可能です。:
su - <sid>adm -c “hdbnsutil -sr_resumeSuspendedPrimary”
sudo -iu <sid>adm hdbnsutil -sr_resumeSuspendedPrimary
このコマンドを使用してデータベースを再開した後、プライマリーとして登録されるスタンバイサーバーで以下のコマンドを実行して手動で停止する必要があります。:
su - <sid>adm -c “sapcontrol -nr <InstNum> -function StopWait 600 5”
sudo -iu <sid>adm sapcontrol -nr <InstNum> -function StopWait 600 5
スタンバイサーバーを新しいプライマリーサーバーにする場合は、SAP HANA リソースをSAP HANA リソースのステータスが Standby – Primary になっているサーバーへ切り替えることで解決できます。
このトピックへフィードバック