はじめに
プライマリー機とスタンバイ機の間でHADR(High Availability Disaster Recovery)機能を利用しているIBM Db2環境で、プライマリー側の更新がスタンバイ側に取り込まれていることを実機で確認しました。
環境情報
- DB2 v11.5
- RHEL 7
事前準備
SAMPLEデータベースにてHADR構成を組み、プライマリー側/スタンバイ側それぞれでHADR_STATEが"PEER"となっていることを確認。
$ db2pd -db sample -hadr Database Member 0 -- Database SAMPLE -- Active -- ... HADR_ROLE = PRIMARY REPLAY_TYPE = PHYSICAL HADR_SYNCMODE = NEARSYNC STANDBY_ID = 1 LOG_STREAM_ID = 0 HADR_STATE = PEER ...
$ db2pd -db sample -hadr Database Member 0 -- Database SAMPLE -- Standby --... HADR_ROLE = STANDBY REPLAY_TYPE = PHYSICAL HADR_SYNCMODE = NEARSYNC STANDBY_ID = 0 LOG_STREAM_ID = 0 HADR_STATE = PEER ...
正副の手動切替
ハートビートは以下のようにプライマリー側からスタンバイ側に向けてパケット送付され、この間隔は"HEARTBEAT_INTERVAL(seconds)"に指定された秒数となっています。
50000 → 48458 [PSH, ACK] Seq=1 Ack=1 Win=1432 Len=4096 TSval=146880460 TSecr=146869805
48458 → 50000 [ACK] Seq=1 Ack=4097 Win=6741 Len=0 TSval=146891592 TSecr=146880460
48458 → 50000 [PSH, ACK] Seq=1 Ack=4097 Win=6741 Len=264 TSval=146899705 TSecr=146880460
50000 → 48458 [ACK] Seq=4097 Ack=265 Win=1430 Len=0 TSval=146888574 TSecr=146899705
ここでPrimary側でテーブルにInsertを行った上でStandby側にて以下を実行すると
$ db2 "TAKEOVER HADR ON DATABASE sample" DB20000I The TAKEOVER HADR ON DATABASE command completed successfully.
HADR_ROLEが切り替わり、元々Standby側であったサーバ側でDBのConnectが可能となります。
その状態でテーブルの中を見ると
$ db2 describe table XXX
確かにプライマリー側で更新した行が確認できました。
終わりに
HADRの簡単な動作検証でしたが、HADRの状態は以下コマンドでも確認が可能です。
$ db2 GET SNAPSHOT FOR DB ON sample
また、正副を切り替えてもハートビートの向き先に代わりがなかったこともパケットキャプチャから確認ができました。
以上、ご参考になれば幸いです。