クラスタ構成を理解する
前回はconsulを起動させる方法を解説しました。
今回は複数のサーバーで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はサーバーモードとクライアントモードを使用してクラスタを構成し、メンバー管理やサービスの管理をする事ができます。
次回はサービス定義の解説になります。