Db2 HADR 構成
スタンバイ側構成
スタンバイで以下を実行していきます、内部IPの部分はホスト名でも問題ありません。
db2_hadr の部分は Part 5 で /etc/services に設定した HADR ポートのサービス名になります。
$ db2 "UPDATE DB CFG FOR HADRDB USING HADR_LOCAL_HOST <スタンバイ内部IP> HADR_LOCAL_SVC db2_hadr HADR_SYNCMODE NEARSYNC HADR_TARGET_LIST <プライマリー内部IP>:db2_hadr HADR_REMOTE_HOST <プライマリー内部IP> HADR_REMOTE_SVC db2_hadr HADR_REMOTE_INST db2inst1 LOGINDEXBUILD ON "
HADR のスタンバイとして起動します。
$ db2 "START HADR ON DB HADRDB AS STANDBY"
プライマリー側構成
ここまででスタンバイがプライマリーからのログを受け付ける状態になりました。
続けてプライマリー機の設定を行なっていきますが、スタンバイ構成時の内部IPが逆向きになるだけです。
$ db2 "UPDATE DB CFG FOR HADRDB USING HADR_LOCAL_HOST <プライマリー内部IP> HADR_LOCAL_SVC db2_hadr HADR_SYNCMODE NEARSYNC HADR_TARGET_LIST <スタンバイ内部IP>:db2_hadr HADR_REMOTE_HOST <スタンバイ内部IP> HADR_REMOTE_SVC db2_hadr HADR_REMOTE_INST db2inst1 LOGINDEXBUILD ON "
プライマリー機として起動します。
$ db2 "START HADR ON DB HADRDB AS PRIMARY"
HADR 状態確認
プライマリーで状態確認を行います。
ズラーっと色んな情報が表示されますが、HADR_ROLE、HADR_STATE、HADR_CONNECT_STATUS が以下の状態であれば問題ありません。
$ db2pd -db HADRDB -hadr HADR_ROLE = PRIMARY : HADR_STATE = PEER : HADR_CONNECT_STATUS = CONNECTED
同じようにスタンバイでも確認してみます。
$ db2pd -db HADRDB -hadr HADR_ROLE = STANDBY : HADR_STATE = PEER : HADR_CONNECT_STATUS = CONNECTED
以下のコマンドだと日本語で表示されます。
db2 “GET SNAPSHOT FOR DATABASE ON HADRDB”
HADR 状況
役割 = 1 次
状態 = ピア
同期モード = 近似同期
接続状況 = 接続済み, 2020-11-18 23:05:55.330626
欠落ハートビート = 0
ローカル・ホスト = 10.146.0.4
ローカル・サービス = db2_hadr
リモート・ホスト = 10.146.0.8
リモート・サービス = db2_hadr
リモート・インスタンス = db2inst1
タイムアウト (秒数) = 120
1 次ログ位置 (ファイル、ページ、LSN) = S0000000.LOG, 71, 0000000002B09969
スタンバイ・ログ位置 (ファイル、ページ、LSN) = S0000000.LOG, 71, 0000000002B09969
ギャップ稼働平均のログ (バイト数) = 0
TAKEOVER
ここまで HADR 構成の基本的な設定は終わりですので問題なくTKO できるか確認します。
スタンバイ機から以下のコマンドを実行します。
$ db2 "CONNECT TO HADRDB" SQL1776N このコマンドを HADR データベース上で発行することはできません。理由コード = "1"。
スタンバイDBなので接続できないというエラーが出力されます。
TAKEOVER を実行しロールを入れ替えます、スタンバイだったロールがプライマリーになるため接続可能になるはずです。TAKEOVER 前のロールを確認します。
$ db2 "GET DB CFG FOR HADRDB" | grep "HADR"
データベースのデータベース構成 HADRDB
HADR データベースの役割 = STANDBY
:
:
スタンバイ側でTAKEOVER コマンドを実行します。
$ db2 "TAKEOVER HADR ON DATABASE HADRDB"
スタンバイでDB へ接続してみます。
$ db2 "CONNECT TO HADRD"
スタンバイでTAKEOVER 後のロールを確認します。
$ db2 "GET DB CFG FOR HADRDB" | grep "HADR"
データベースのデータベース構成 HADRDB
HADR データベースの役割 = PRIMARY
プライマリーでも確認してみます。
$ db2 "GET DB CFG FOR HADRDB" | grep "HADR"
データベースのデータベース構成 HADRDB
HADR データベースの役割 = STANDBY
問題なくTAKEOVERが実行されロールが入れ替わったことが確認できました!
旧プライマリー側で同様のコマンドを実行し元に戻しておきます。
$ db2 "TAKEOVER HADR ON DATABASE HADRDB"
$ db2 "TERMINATE" $ db2 "FORCE APPLICATON ALL" $ db2 "DEACTIVATE DB HADRDB" $ db2stop force