5.5. テスト 3: プライマリーノードを 3 番目のサイトにフェイルオーバーする
| テストの内容 | プライマリーを 3 番目のサイトにフェイルオーバーします..3 番目のサイトがプライマリーになる。 セカンダリーが 3 番目のサイトに再登録される。 |
| テストの前提条件 |
|
| テストの手順 |
回復できるようにクラスターを
|
| テストの開始 |
remotehost3:rh2adm> で SAP HANA コマンドを実行します: |
| テストのモニタリング |
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 15remotehost3 で同じコマンドを実行します。
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 is 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クラスターは、この動作をまだ把握していません。システムレプリケーションステータスの戻りコードを確認すると、戻りコード 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 clusternode2node2 (unmanaged) * SAPHanaTopology_RH2_02 (ocf::heartbeat:SAPHanaTopology): Started clusternode1node1 (unmanaged) * Clone Set: SAPHana_RH2_02-clone [SAPHana_RH2_02] (promotable, unmanaged): * SAPHana_RH2_02 (ocf::heartbeat:SAPHana): Slave clusternode2node2 (unmanaged) * SAPHana_RH2_02 (ocf::heartbeat:SAPHana): Master clusternode1node1 (unmanaged) * vip_RH2_02_MASTER (ocf::heartbeat:IPaddr2): Started clusternode1node1 (unmanaged)リソースは unmanaged を表示しています。これは、クラスターが
maintenance-mode=trueであることを示します。仮想 IP アドレスは引き続き clusternode1 で開始されます。この IP を別のノードで使用する場合は、maintanence-mode=true を設定する前にvip_RH2_02_MASTERを無効にしてください。[root@clusternode1]# pcs resource disable vip_RH2_02_MASTERclusternode1 を再登録します。
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_stateDC1 でシステムレプリケーションステータスを確認すると、リターンコードは 12 ですが、これは不明です。したがって、DC1 を再登録する必要があります。
このコマンドを使用すると、以前のプライマリー clusternode1 を remotehost3 の新しいセカンダリーとして登録できます。
clusternode1:rh2adm> hdbnsutil -sr_register --remoteHost=remotehost3 --remoteInstance=${TINSTANCE} --replicationMode=asyncsyncmem --name=DC1 --remoteName=DC3 --operationMode=logreplay --online登録が完了すると、remotehost3 上で 3 つのサイトすべてが複製され、ステータス (戻りコード) が 15 に変わります。
これが失敗した場合は、DC1 と DC3 のレプリケーション関係を手動で削除する必要があります。セカンダリーの登録 に記載されている手順に従ってください。
たとえば、次のように既存の関係をリストします。
clusternode1:rh2adm> hdbnsutil -sr_state既存の関係を削除するには、次を使用できます。
clusternode1:rh2adm> hdbnsutil -sr_unregister --name=DC2`通常、これは必要ないかもしれません。テスト 4 は、テスト 3 の後に実行することを想定したものです。回復手順は、テスト 4 を実行することです。