5.5. テスト 3: プライマリーノードを 3 番目のサイトにフェイルオーバーする
テストの内容 | プライマリーを 3 番目のサイトにフェイルオーバーします。 セカンダリーが 3 番目のサイトに再登録される。 |
テストの前提条件 |
|
テストの手順 |
回復できるように、クラスターを
|
テストの開始 |
SAP HANA commandon remotehost3: |
テストのモニタリング |
3 番目のサイトで |
期待される結果 |
|
初期状態に戻す方法 |
詳細な説明:
データベースの確認 を使用してデータベースが実行されているかどうかを 確認 し、レプリケーションのステータスを確認します。
clusternode2:rh2adm> hdbnsutil -sr_state | egrep -e "^mode:|primary masters"
出力の例を以下に示します。
mode: syncmem primary masters: clusternode1
この場合、プライマリーデータベースは clusternode1 です。clusternode1 でこのコマンドを実行すると、以下が得られます。
mode: primary
このプライマリーノードで、システムレプリケーションのステータスを表示することもできます。以下のようになります。
clusternode1:rh2adm> cdpy clusternode1:rh2adm> python systemReplicationStatus.py |Database |Host |Port |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary |Replication |Replication |Replication |Secondary | | | | | | | | |Host |Port |Site ID |Site Name |Active Status |Mode |Status |Status Details |Fully Synced | |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |-------------- |------------ | |SYSTEMDB |clusternode1 |30201 |nameserver | 1 | 1 |DC1 |remotehost3 | 30201 | 3 |DC3 |YES |SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30207 |xsengine | 2 | 1 |DC1 |remotehost3 | 30207 | 3 |DC3 |YES |SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30203 |indexserver | 3 | 1 |DC1 |remotehost3 | 30203 | 3 |DC3 |YES |SYNCMEM |ACTIVE | | True | |SYSTEMDB |clusternode1 |30201 |nameserver | 1 | 1 |DC1 |clusternode2 | 30201 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30207 |xsengine | 2 | 1 |DC1 |clusternode2 | 30207 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30203 |indexserver | 3 | 1 |DC1 |clusternode2 | 30203 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | status system replication site "3": ACTIVE status system replication site "2": ACTIVE overall system replication status: ACTIVE Local System Replication State ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mode: PRIMARY site id: 1 site name: DC1
- これで適切な環境が完成し、別のウィンドウで 3 つのノードすべてでのシステムレプリケーションステータスの監視を開始できます。
3 台のモニターは、テストを開始する前に起動する必要があります。テストが実行されると、出力は変わります。したがって、テストが完了していない限り、そのまま実行します。
古いプライマリーノードで、clusternode1 はテスト中に別のウィンドウで実行されていました。
clusternode1:rh2adm> watch -n 5 'python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?`
clusternode1 の出力は以下のようになります。
Every 5.0s: python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicati... clusternode1: Tue XXX XX HH:MM:SS 2023 |Database |Host |Port |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary | Replication |Replication |Replication |Secondary | | | | | | | | |Host |Port |Site ID |Site Name |Active Status | Mode |Status |Status Details |Fully Synced | |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- | ----------- |----------- |-------------- |------------ | |SYSTEMDB |clusternode1 |30201 |nameserver | 1 | 1 |DC1 |remotehost3 | 30201 | 3 |DC3 |YES | ASYNC |ACTIVE | | True | |RH2 |clusternode1 |30207 |xsengine | 2 | 1 |DC1 |remotehost3 | 30207 | 3 |DC3 |YES | ASYNC |ACTIVE | | True | |RH2 |clusternode1 |30203 |indexserver | 3 | 1 |DC1 |remotehost3 | 30203 | 3 |DC3 |YES | ASYNC |ACTIVE | | True | |SYSTEMDB |clusternode1 |30201 |nameserver | 1 | 1 |DC1 |clusternode2 | 30201 | 2 |DC2 |YES | SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30207 |xsengine | 2 | 1 |DC1 |clusternode2 | 30207 | 2 |DC2 |YES | SYNCMEM |ACTIVE | | True | |RH2 |clusternode1 |30203 |indexserver | 3 | 1 |DC1 |clusternode2 | 30203 | 2 |DC2 |YES | SYNCMEM |ACTIVE | | True | status system replication site "3": ACTIVE status system replication site "2": ACTIVE overall system replication status: ACTIVE Local System Replication State ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mode: PRIMARY site id: 1 site name: DC1 Status 15
remotehost3 で、同じコマンドを実行します。
remotehost3:rh2adm> watch -n 5 'python /usr/sap/$SAPSYSTEMNAME/HDB${TINSTANCE}/exe/python_support/systemReplicationStatus.py ; echo Status $?'
応答は以下のようになります。
this system is either not running or not primary system replication site
テストがフェイルオーバーを開始した後、出力は変更されます。出力は、テストが開始される前のプライマリーノードの例と似ています。
2 番目のノードの起動時に、以下が行われます。
clusternode2:rh2adm> watch -n 10 'hdbnsutil -sr_state | grep masters'
これにより、現在のマスター clusternode1 が表示され、フェイルオーバーの開始直後に切り替えられます。
-
すべてが正しく設定されていることを確認するには、
global.ini
も確認してください。 -
DC1、DC2、DC3 の
global.ini
を確認します。
3 つのすべてのノードで、global.ini
に以下を含める必要があります。
[persistent] log_mode=normal [system_replication] register_secondaries_on_takeover=true
以下のように global.ini を編集できます。
clusternode1:rh2adm>vim /usr/sap/$SAPSYSTEMNAME/SYS/global/hdb/custom/config/global.ini
[オプション] クラスターを
maintenance-mode
にします。[root@clusternode1]# pcs property set maintenance-mode=true
テスト中に、
maintenance-mode
を設定せずにフェイルオーバーが機能することがわかります。最初のテストはなしで実行できます。リカバリーはする必要がありますが、紹介したいだけなので、使用と無しに動作します。プライマリーに関するオプションにはアクセスできません。テストを開始します。DC3 にフェイルオーバーします。remotehost3 では、次を実行してください。
remotehost3:rh2adm> hdbnsutil -sr_takeover done.
テストが開始されましたが、以前に開始されたモニターの出力を確認してください。
clusternode1 では、システムレプリケーションステータスで remotehost3 および clusternode2 (DC2)との関係が失われます。
Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $? clusternode1: Mon Sep 4 11:52:16 2023 |Database |Host |Port |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary |Replication |Replication |Replic ation |Secondary | | | | | | | | |Host |Port |Site ID |Site Name |Active Status |Mode |Status |Status Details |Fully Synced | |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------ ---------------------- |------------ | |SYSTEMDB |clusternode1 |30201 |nameserver | 1 | 1 |DC1 |clusternode2 | 30201 | 2 |DC2 |YES |SYNCMEM |ERROR |Commun ication channel closed | False | |RH2 |clusternode1 |30207 |xsengine | 2 | 1 |DC1 |clusternode2 | 30207 | 2 |DC2 |YES |SYNCMEM |ERROR |Commun ication channel closed | False | |RH2 |clusternode1 |30203 |indexserver | 3 | 1 |DC1 |clusternode2 | 30203 | 2 |DC2 |YES |SYNCMEM |ERROR |Commun ication channel closed | False | status system replication site "2": ERROR overall system replication status: ERROR Local System Replication State ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mode: PRIMARY site id: 1 site name: DC1 Status 11
クラスターはこの動作を認識しません。システムレプリケーションのステータスの戻りコードを確認すると、Returncode 11 はエラーを示し、何らかの問題があることを示します。アクセスがあれば、今すぐ maintenance-mode
に入るとよいでしょう。
remotehost3 が新しいプライマリーになり、clusternode2 (DC2)が自動的に remotehost3 で新しいプライマリーとして登録されます。
remotehost3 のシステムレプリケーション状態の出力例。
Every 5.0s: python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py ; echo Status $? remotehost3: Mon Sep 4 13:55:29 2023 |Database |Host |Port |Service Name |Volume ID |Site ID |Site Name |Secondary |Secondary |Secondary |Secondary |Secondary |Replication |Replication |Replic ation |Secondary | | | | | | | | |Host |Port |Site ID |Site Name |Active Status |Mode |Status |Status Details |Fully Synced | |-------- |------ |----- |------------ |--------- |------- |--------- |--------- |--------- |--------- |--------- |------------- |----------- |----------- |------ -------- |------------ | |SYSTEMDB |remotehost3 |30201 |nameserver | 1 | 3 |DC3 |clusternode2 | 30201 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | |RH2 |remotehost3 |30207 |xsengine | 2 | 3 |DC3 |clusternode2 | 30207 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | |RH2 |remotehost3 |30203 |indexserver | 3 | 3 |DC3 |clusternode2 | 30203 | 2 |DC2 |YES |SYNCMEM |ACTIVE | | True | status system replication site "2": ACTIVE overall system replication status: ACTIVE Local System Replication State ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mode: PRIMARY site id: 3 site name: DC3 Status 15
戻りコード 15 では、すべて問題ありませんが、clusternode1 がありません。これは手動で再登録する必要があります。以前のプライマリー clusternode1 はリストされていないため、レプリケーションの関係は失われます。
-
maintenance-mode
を設定します。
クラスターの 1 つのノードでクラスターに maintenance-mode
を設定する前にまだ行っていない場合は、以下のコマンドを使用します。
[root@clusternode1]# pcs property set maintenance-mode=true
maintenance-mode
がアクティブであるかどうかを確認するには、以下のコマンドを実行します。
[root@clusternode1]# pcs resource * Clone Set: SAPHanaTopology_RH2_02-clone [SAPHanaTopology_RH2_02] (unmanaged): * SAPHanaTopology_RH2_02 (ocf::heartbeat:SAPHanaTopology): Started clusternode2 (unmanaged) * SAPHanaTopology_RH2_02 (ocf::heartbeat:SAPHanaTopology): Started clusternode1 (unmanaged) * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged): * SAPHana_RH2_02 (ocf::heartbeat:SAPHana): Slave clusternode2 (unmanaged) * SAPHana_RH2_02 (ocf::heartbeat:SAPHana): Master clusternode1 (unmanaged) * vip_RH2_02_MASTER (ocf::heartbeat:IPaddr2): Started clusternode1 (unmanaged)
リソースは管理対象外で表示されます。これは、クラスターが maintenance-mode=true
であることを示しています。仮想 IP アドレスは、clusternode1 で引き続き起動されます。別のノードでこの IP を使用する場合は、maintanence-mode=true
を設定する前に vip_RH2_02_MASTER を無効にしてください。
[root@clusternode1]# pcs resource disable vip_RH2_02_MASTER
clusternode1 を再登録すると、clusternode1 で sr_state を確認すると、DC2 にのみ関係が表示されます。
clusternode1:rh2adm> hdbnsutil -sr_state System Replication State ~~~~~~~~~~~~~~~~~~~~~~~~ online: true mode: primary operation mode: primary site id: 1 site name: DC1 is source system: true is secondary/consumer system: false has secondaries/consumers attached: true is a takeover active: false is primary suspended: false Host Mappings: ~~~~~~~~~~~~~~ clusternode1 -> [DC2] clusternode2 clusternode1 -> [DC1] clusternode1 Site Mappings: ~~~~~~~~~~~~~~ DC1 (primary/primary) |---DC2 (syncmem/logreplay) Tier of DC1: 1 Tier of DC2: 2 Replication mode of DC1: primary Replication mode of DC2: syncmem Operation mode of DC1: primary Operation mode of DC2: logreplay Mapping: DC1 -> DC2 done.
ただし、DC2 を確認すると、プライマリーデータベースサーバーは DC3 になります。そのため、DC1 からの情報は正しくありません。
clusternode2:rh2adm> hdbnsutil -sr_state
DC1 でシステムレプリケーションのステータスを確認すると、戻りコードは不明な 12 になります。したがって、DC1 を再登録する必要があります。
このコマンドを使用して、以前のプライマリー clusternode1 を remotehost3 の新しいセカンダリーとして登録できます。
clusternode1:rh2adm> hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=${TINSTANCE} --replicationMode=async --name=DC1 --remoteName=DC3 --operationMode=logreplay --online
登録が完了すると、3 つのサイトがすべてレプリケートされ、ステータス (戻りコード) が 15 に変わります。これが失敗した場合は、DC1 および DC3 でのレプリケーション関係を手動で削除する必要があります。セカンダリーの登録 に記載されている手順に従ってください。たとえば、以下を使用して、既存の関係を一覧表示します。
hdbnsutil -sr_state
既存の関係を削除するには、次を使用できます。
clusternode1:rh2adm> hdbnsutil -sr_unregister --name=DC2
通常、これは必須ではありません。
テスト 4 は、テスト 3 の後に実行することを想定したものです。回復手順は、テスト 4 を実行することです。