(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Db2】TSAによるHADR自動切り替えにおけるクォーラムデバイスの役割

スポンサーリンク

はじめに

クラスタリングツールの世界にはクォーラムデバイス(quorum device)と呼ばれる概念があり、実際にDb2のクラスタリングを組む際に以下のように指定します。

Configure a quorum device for the domain called 'xx'? [1] ...
The following is a list of supported quorum device types:
 1. Network Quorum/2. Disk Quorum/3. Majority Node Set...

本記事では、同デバイスの役割と実際にそれがどのように使われるのかの動き方を解説しました。

環境情報
  • IBM Tivoli System Automation for Multiplatforms 4
  • DB2 v11.5
  • RHEL 7

クォーラムデバイスとは?

これはクラスターのプライマリーを選定する際に利用するデバイスのことで、ネットワーク通信断がプライマリーとセカンダリーの間で起きた場合に役立ちます。具体的にはスタンバイ側からプライマリーへの通信が途絶えた際に

  • プライマリー側がダウンした
  • スタンバイ側のネットワークがダウンした

の判断し、自分がプライマリーに昇格するか否かを決定するために第三の宛先を利用します。

この第三のサーバをタイブレーカーとも呼び、TSAではクラスター内のすべてのノードからアクセスできるサーバが選定対象となります。

ちなみに、「どちらもプライマリーになってしまう」という事象をスプリットブレインと呼び、この状態でデータ更新が掛かるとデータの不整合が発生するので極力避ける必要があります。

クォーラムデバイスへの疎通確認

以下のようにクラスターのHAが作成されている状態で

$ db2pd -ha
           DB2 HA Status
Instance Information:
Instance Name                  = db2inst1
Number Of Domains              = 1
Number Of RGs for instance     = 2

Domain Information:
Domain Name                    = hadr_domain
Cluster Version                = 3.2.3.2
Cluster State                  = Online
Number of nodes                = 2

Node Information:
Node Name                     State
---------------------         -------------------
server2                 Online
server1                 Online
...
Quorum Information:
Quorum Name                                  Quorum State
------------------------------------         --------------------
db2_Quorum_Network_server3:2_27_42     Online
Success                                      Offline
Fail                                         Offline
Operator                                     Offline

プライマリー側をシャットダウンすると、スタンバイとプライマリーのTCP通信が遮断されます。
そしてそれをトリガーに、ICMPによる疎通確認がスタンバイ→プライマリーに対して行われてプライマリーのダウンを認識します。

server2 server1 ICMP... Echo (ping) request id=0x6906, seq=768/3, ttl=64 (no response found!)

続いてスタンバイ側はクォーラムデバイスに対してICMPによる疎通確認を行い、正常な応答を受け取ることで自分は昇格できると判断をし

server2 server3 ICMP... Echo (ping) request id=0xa1eb, seq=1/256, ttl=64 (reply in 254)
server3 server2 ICMP... Echo (ping) reply id=0xa1eb, seq=1/256, ttl=64 (request in 253)

HADRの切り替えが行われます。

終わりに

本記事ではパケットキャプチャをしかけることで、実際にクォーラムデバイス側にICMP通信がきていることも確認ができました。スプリットブレイン対策にてタイブレーカーを利用するパターンのご参考になれば幸いです。