Pacemakerにおける「DCノード」とは
はじめに

Pacemakerクラスタを扱っていると、よく目にする用語の一つに「DCノード」や「Designated Controller(DC)」があります。技術者向けのマニュアルやログの中でも頻出ですが、「DCって何?」「designatedってあまり聞かない単語だけど…」と思ったことはありませんか?
本記事では、PacemakerにおけるDCノードの役割を説明しながら、「designated」という言葉自体についても少し掘り下げてみます。
DCノードとは?
Pacemakerクラスタは、複数のノード(サーバー)が協調して動作し、高可用性を提供する仕組みですが、その中でも「DCノード(Designated Controller)」は特別な役割を担います。
DCノードの役割
・クラスタ内で唯一の「制御ノード」として自動的に選出される
・クラスタ全体の状態を把握し、フェイルオーバーやリソースの再配置を指示
・他のノードはDCノードの指示に従って動作
Pacemakerでは、クラスタ形成後に全ノードの投票によって「DCノード」が選出されます。このノードはリーダー的な役割を果たしますが、特別な設定や固定は行われず、自動的に、動的に選ばれるのが特徴です。
DCの調べ方?
PacemakerでDCはクラスターノードのうちの1つで選出されますが、現在のDCノードがどこにあるかは crm_mon
コマンドで調べることができます。crm_mon
コマンドの実行例を紹介します。
[root@node1 ~]# crm_mon -frAD1
Cluster Summary:
* Stack: corosync
* Current DC: node2 (version 2.0.5.linbit-1.0.el8-ba59be712) - partition with quorum
* Last updated: Thu Dec 15 16:18:28 2022
* Last change: Thu Dec 15 16:17:40 2022 by hacluster via crmd on node1
* 2 nodes configured
* 5 resource instances configured
Node List:
* Online: [ node1 node2 ]
Full List of Resources:
* Resource Group: rg_mariadb:
* res_ipadr (ocf::heartbeat:IPaddr2): Started node2
* res_fsmnt (ocf::heartbeat:Filesystem): Started node2
* res_mysql (ocf::heartbeat:mysql): Started node2
* Clone Set: ms_drbd_r0 [res_drbd_r0] (promotable):
* Masters: [ node2 ]
* Slaves: [ node1 ]
Current DC:という行にnode2と表示されていますので、この例ではnode1、node2の2つのノードのうち、node2が「DCノード」になっていることが判ります。
「Designated」という単語について
「designated(デジグネイテッド)」という単語は、実は日本語としてはあまり馴染みがありません。普段の生活で聞くことはまずないでしょう。
「designated」の意味
英英辞典では、以下のように定義されています:
designated: officially assigned or chosen for a specific duty or purpose (ある特定の任務や目的のために正式に任命・選出された)
「designated controller」をそのまま訳すると「選ばれた制御者」という意味になります。
日本での使用例
日常会話にはあまり出てきませんが、いくつかの分野では耳にすることがあります:
・ Designated Driver(指定運転者) :飲み会などで運転役を務める人
・ Designated Area(指定区域) :喫煙所や避難場所などの指定区域
・ Designated Survivor(指定生存者) :アメリカの政治用語で、大統領継承順位のために別場所に待機する人物(ドラマにもなっています)
このように、「designated」は「選ばれた」「指定された」という意味で使われ、どれも「ある目的のために特定された存在」を示しています。
なぜDCノードが必要なのか?
一般的にクラスタには多くのノードがありますが、全てのノードが同時に意思決定を行うと矛盾が生じる可能性があります。そこでPacemakerでは、ある1台を「DC(Designated Controller)」として選出し、クラスタのリーダーとしての役割を持たせます。
このようにして、一貫したクラスタの状態制御が実現されているのです。
DCノードは固定されるの?
いいえ、DCノードはあくまで「その時点で」選ばれたノードです。
・クラスタの再起動
・DCノードの停止やフェンシング
・ノードの参加/離脱
などのイベントがあると、新たにDCノードが再選出されます。これにより、柔軟で高可用性な制御が可能になっています。
意図的にあるノードにDCを配置することはできませんが、DCノードを再起動すると他のノードにDCは移動します。
まとめ
「Designated Controller(DC)」という用語は、一見馴染みがないかもしれませんが、「指名されたコントローラー」という意味で考えると、非常に理にかなった名称です。
Pacemakerの操作で「DC」が現れたときには、「このノードが今クラスタの司令塔を担っているんだな」と思い出してみてください。