プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

ConsulやNomadのクラスタのleaderをconsul, nomadコマンドで調べる方法

会社のプロダクトでHashiCorpのConsulNomadを利用しているものがあるのですが、ConsulやNomadのクラスタの運用をする際、leaderがどのnodeなのかを調べるコマンドをいつも忘れてしまうので記録として残します。

結論から言うと、どちらも operator サブコマンドを利用します。

具体的には operator raft list-peers というサブコマンドがあるのでそれを使えば分かります。

consulコマンドの場合は以下の通りです。 IDやAddressは仮の値に変更しています。

$ consul version
Consul v1.2.3
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

$ consul operator raft list-peers
Node             ID                                    Address              State     Voter  RaftProtocol
vault-server-03  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  192.168.00.002:8300  follower  true   3
vault-server-02  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy  192.168.00.001:8300  leader    true   3
vault-server-01  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz  192.168.00.000:8300  follower  true   3

Stateの項目にleaderかfollowerか表示されます。

consulのバージョンが古めなのはご愛敬*1

nomadコマンドの場合は以下の通りです。

$ nomad version
Nomad v0.8.5 (90fbfaba6a6d9af7febc39082b95ed832d8b8bd6)

$ nomad operator raft list-peers
Node                    ID                   Address              State     Voter  RaftProtocol
vault-server-02.global  192.168.00.001:4647  192.168.00.001:4647  follower  true   2
vault-server-01.global  192.168.00.000:4647  192.168.00.000:4647  follower  true   2
vault-server-03.global  192.168.00.002:4647  192.168.00.002:4647  leader    true   2

同じくIDやAddressは仮の値に変更しています。 Consulの時と同様、Stateにleaderかfollowerか表示されます。

Nomadの場合、serverになっているホストで nomad server members を実行することでも分かります。

nomad server members
Name                    Address         Port  Status  Leader  Protocol  Build  Datacenter  Region
vault-server-01.global  192.168.00.000  4648  alive   false   2         0.8.5  dc1         global
vault-server-02.global  192.168.00.001  4648  alive   false   2         0.8.5  dc1         global
vault-server-03.global  192.168.00.002  4648  alive   true    2         0.8.5  dc1         global

HTTP APIで調べる場合は以下のものを利用すれば分かるのでは無いかと。 利用したことはないので確約できませんが。

*1:プライベートで用意している環境が古めのバージョンのものしか無かった