Db2(V11.5)でHADRを構成する!

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の構成を行いました。障害時やメンテナンス時における待機系への切り替えや、災害対策の構成に利用することができます。