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」が現れたときには、「このノードが今クラスタの司令塔を担っているんだな」と思い出してみてください。