Hashicorp製品 consulのクラスタ構成を理解する

CONSUL

クラスタ構成を理解する

前回はconsulを起動させる方法を解説しました。
今回は複数のサーバーでconsulを起動して、クラスタ構成を構築します。

 

前回の記事 Hashicorp製品 Consulの起動 を参照

サービスディスカバリーとクラスタ構成

サービスディスカバリーとは、どこのサーバーで何のサービスが稼動しているのかを検知する仕組みです。この機能を使用する事でブラウザ上にわかりやすく表示したり、検知した際に事前に準備していた処理が実行されて動的な処理をする事ができる為、とても便利です。

consulはクラスタ管理を行う事でクラスタに参加したメンバーを検知し、そのメンバーの持っている情報(ホスト名、IPアドレス)や定義ファイルを読み込ませる事で任意のサービス情報を登録し、クラスタ内のメンバーで共有します。

上記の説明でだけではいまいちピンとこないと思いますので、以下で実際に確認してみます。

consulのserver/clientモード

serverモードで起動する

consulはクラスタ構成を取ると説明しました。クラスタにはいくつものメンバーが参加する事ができますが、その中で1台以上はサーバーモードとして起動する必要があります。サーバーモードで起動するには-serverを付与します。

 

[root@server1]$ consul agent -bind=192.168.0.100 -data-dir=/tmp/cosul -server bootstrap-expect 1 -node=server1 -ui

 

-serverでサーバーモードを指定して起動します。
-bootstrap-expect 1では、サーバーの数を指定しています。

-bootstarp-expectの説明は難しいので、公式の説明を見てみます。

 

-bootstrap-expect – This flag provides the number of expected servers in the datacenter. Either this value should not be provided or the value must agree with other servers in the cluster. When provided, Consul waits until the specified number of servers are available and then bootstraps the cluster. This allows an initial leader to be elected automatically. This cannot be used in conjunction with the legacy -bootstrap flag. This flag requires -server mode.

-bootstrap-expect-このフラグは、データセンター内の予想されるサーバーの数を提供します。この値を指定しないか、クラスター内の他のサーバーと値を一致させる必要があります。指定された場合、Consulは指定された数のサーバーが使用可能になるまで待機し、クラスターをブートストラップします。これにより、最初のリーダーが自動的に選出されます。これは、従来の-bootstrapフラグと組み合わせて使用​​することはできません。このフラグには-serverモードが必要です。

※google翻訳

https://www.consul.io/docs/agent/options.html#_bootstrap_expect

 

クラスタの規模が多くなる場合に安定する設定は3か5、という事ですが、今は1で大丈夫だと思います。というか大丈夫です。

サーバーの中から選出されるリーダーがダウンした際に、別のリーダーが選出されます。1の場合は別のリーダーを選出できません。3の場合は2台がダウンするとクラスタが不安定になる、という事だと思います。

起動後に、以下のようにしてクラスタのメンバーを確認してみます。

 

[root@server1]$ consul members
Node       Address             Status  Type    Build  Protocol  DC   Segment
server1    192.168.0.100:8301  alive   server  1.6.1  2         dc1  <all>

 

現在はメンバーは自分自身だけです。ブラウザ上で確認する事もできます。
ブラウザで表示してNodesをクリックしてみるとserver1が表示されています。ちなみに、★マークがついているのがリーダーです。

clientモードで起動する

次は別のノードを用意して、そちらをクラスタに参加させて見ます。
以下のコマンドを実行します。

 

[root@web]$ consul agent -bind=192.168.0.201 -data-dir=/tmp/cosul -node=webserver start_join 192.168.0.100

 

重要なのは、-serverと-bootstrap-expect、-uiを抜いた部分とstart_joinでserver1のIPアドレスと指定している部分です。

 

[root@web]$ consul members
Node       Address             Status  Type    Build  Protocol  DC   Segment
server1    192.168.0.100:8301  alive   server  1.6.1  2         dc1  <all>
webserver  192.168.0.201:8301  alive   client  1.6.1  2         dc1  <default>

 

メンバーとしてwebserverが表示されているのがわかります。
また、これをブラウザで確認すると下のようになります。webserverが追加されているのがわかると思います。

このように、consulはサーバーモードとクライアントモードを使用してクラスタを構成し、メンバー管理やサービスの管理をする事ができます。

 

次回はサービス定義の解説になります。

タイトルとURLをコピーしました