Db2(V11.5)でHADRの構成を行います。
記事の目次
使用環境
- CentOS 8.1 (Server with GUI)
- Db2 V11.5
最初に決めておくこと
HADRを構成する際には、以下を最初に決めておきます。
- HADRで使用するポート番号
- HADRの同期モード
本稿では、HADRで使用するポート番号を、インスタンスで使用するポート番号+2とします。+1は仕様上、使用できないので注意が必要です。プライマリとスタンバイでサーバが異なれば、ポート番号は同じ番号が使用できます。同期モードは、完全同期のSYNCを使用してみます。
No | Name | Value | Comments |
---|---|---|---|
01 | HADR_LOCAL_HOST | server01 | |
02 | HADR_LOCAL_SVC | 50002 | |
03 | HADR_REMOTE_HOST | server02 | |
04 | HADR_REMOTE_SVC | 50002 | |
05 | HADR_REMOTE_INST | db2inst1 | |
06 | HADR_TIMEOUT | 120 | Default |
07 | HADR_SYNCMODE | SYNC | |
08 | HADR_PEER_WINDOW | 0 | Default |
09 | LOGINDEXBUILD | ON | Default |
ファイアウォールの設定変更
HADRの通信が行えるように、OSのファイアウォールの通信許可設定を行います。テストでは、以下のように、ファイアウォールを停止してもよいでしょう。
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld
DBのオンラインバックアップの取得先ディレクトリの作成
プライマリとスタンバイ側の双方で、DBのオンラインバックアップを連携するディレクトリを作成します。
$ su - db2inst1 $ mkdir -p db2backups/tmp
DBのオンラインバックアップの取得
プライマリ側で、DBのインスタンスを開始し、DBのオンラインバックアップを取得します。
$ db2 start db manager $ db2 backup db db01 online to /home/db2inst1/db2backups/tmp compress include logs
取得したバックアップをスタンバイ側に転送します。スタンバイ側では、DBが存在する場合は、DROPしてリストアします。
$ su - db2inst1 $ mkdir -p db2backups/tmp $ exit # scp -p server01:/home/db2inst1/db2backups/tmp/DB01* /home/db2inst1/db2backups/tmp # chown db2inst1:db2iadm1 /home/db2inst1/db2backups/tmp/DB01* $ su - db2inst1 $ db2 start db manager $ db2 drop db db01 $ db2 restore db db01 from /home/db2inst1/db2backups/tmp
HADRの設定
プライマリ側のDBのHADRの設定を行います。HADRの設定以外に、「logindexbuid」の設定を「on」に設定します。以下、ホスト名とポート番号を数値で記載していますが、稼働環境ではホスト名、サービス名にします。
$ db2 "update db cfg for db01 using hadr_local_host server01" $ db2 "update db cfg for db01 using hadr_local_svc 50002" $ db2 "update db cfg for db01 using hadr_remote_host server02" $ db2 "update db cfg for db01 using hadr_remote_svc 50002" $ db2 "update db cfg for db01 using hadr_remote_inst db2inst1" $ db2 "update db cfg for db01 using hadr_syncmode SYNC" $ db2 get db cfg for db01 | grep -i hadr $ db2 update db cfg for db01 using logindexbuild on $ db2 get db cfg for db01 | grep -i logindex
スタンバイ側のDBのHADRの設定を行います。
$ db2 "update db cfg for db01 using hadr_local_host server02" $ db2 "update db cfg for db01 using hadr_local_svc 50002" $ db2 "update db cfg for db01 using hadr_remote_host server01" $ db2 "update db cfg for db01 using hadr_remote_svc 50002" $ db2 "update db cfg for db01 using hadr_remote_inst db2inst1" $ db2 "update db cfg for db01 using hadr_syncmode SYNC" $ db2 get db cfg for db01 | grep -i hadr $ db2 update db cfg for db01 using logindexbuild on $ db2 get db cfg for db01 | grep -i logindex
HADRの起動
HADRの起動は、スタンバイ側から行います。
$ db2 "start hadr on db db01 as standby" $ db2pd -hadr -db db01 ... HADR_STATE = REMOTE_CATCHUP_PENDING ...
プライマリ側を起動して、HADRで接続できたことを確認します。
$ db2 "start hadr on db db01 as primary" $ db2pd -hadr -db db01 ... HADR_STATE = PEER ...
HADRの停止と起動の運用
HADRの停止と起動の運用ですが、起動はスタンバイから、停止はプライマリから行います。
HADRの起動
スタンバイ側でHADRを起動します。
$ db2start $ db2 activate db db01 $ db2pd -hadr -db db01 ... HADR_STATE = REMOTE_CATCHUP_PENDING ...
プライマリ側でHADRを起動します。
$ db2start $ db2 activate db db01 $ db2pd -hadr -db db01 ... HADR_STATE = PEER ...
HADRの停止
プライマリ側で、HADRを停止します。不用意な更新が走り、HADRの再接続が不可にならないようにDBをDEACTIVATEしています。
$ db2 "deactivate db db01" $ db2stop
スタンバイ側でHADRを停止します。
$ db2 "deactivate db db01" $ db2stop
HADRのプライマリとスタンバイの切替え
HADRのプライマリとスタンバイの切り替えは、スタンバイ側で切り替えのコマンドを実行します。
HADRのプライマリとスタンバイの役割の切替え
HADR接続中に、プライマリとスタンバイを切り替えるコマンドです。
$ db2 takeover hadr on db db01
HADRのスタンバイの強制切離し
HADR接続中に、スタンバイを強制で切り離し、DBへの操作を可能にするコマンドです。HADRの接続を行うためには、プライマリのオンラインバックアップから開始する必要があります。
$ db2 takeover hadr on db db01 by force
おわりに
HADRの構成を行いました。障害時やメンテナンス時における待機系への切り替えや、災害対策の構成に利用することができます。
参考情報
関連記事
Db2書籍(Amazon)
即戦力のDB2管理術 ~仕組みからわかる効率的管理のノウハウ
DB2 10 エバリュエーション・ガイドブック