fluid_27’s blog

勉強した内容をアウトプットするためのブログ

Consulについてざっくりまとめ

consulについてちょっとだけ勉強したので、概要についてザックリまとめてみる。

Consulとは?

HashiCorpによって開発されたインフラ上のサービス設定とサービスディスカバリのためのツール。
オープンソースとして開発・公開されている。
クラスタのメンバー管理機能があり、Consulクライアントはサービス毎に正常か異常かを把握し、この情報に変化があれば直ちにConsulサーバに通知する。
サービスの情報はConsulサーバ上のKVS(キーバリュー・ストア)に格納され、この情報はWeb UIやDNS・HTTPの各インターフェースから参照できる。

Consul構成
Consul構成例
サービスディスカバリとは

Consulクラスタが稼働するシステム全体において、どのサーバ上でどのようなサービスが稼働しているか、そして、それらは正常か異常かどうかを確認する機能。
Consulクライアントは、主にサーバ上のデーモン(NginxやMySQL等)をサービスとして定義する。サービスの定義はエージェント起動時にJSON形式の書式で定義するか、REST APIを通して行う。

Consulは監視ツールではない

ヘルスチェックを備えているし、GUIを通してサービスの正常性の確認もできる。しかし、過去の時系列データに関する保存は行わないという点で、一般的な統合監視ツールとは決定的に異なる。あくまでもConsulは「現在の状態」しか保持しない。

ちなみにHashiCorpが開発したSerfというツールも似たようなツールとのことで比較してみる。

SerfとConsul、どう違うの?

Serfとは

メンバ管理とイベント同期のためのツール。
管理用サーバーを用意しなくても、お互いが通信してクラスタを構成できる。
任意のコマンドをクラスタに所属するサーバで一斉に実行するだけでなく、サーバの追加や削除のタイミングでもコマンドを自動的に実行できる。
Consulよりも学習コストは低いが、複雑な設定などは無理。

Serfでもできること

  • メンバー管理

 クラスタを構成する各サーバの死活や、メンバー(serfエージェントが稼働するサーバ)のホスト名、IPアドレス、タグを管理

  • 障害検出

 メンバーとの通信途絶時は障害情報を共有し、定期的に復帰を確認して疎通が回復できれば、クラスタへ自動復旧

  • イベント

 任意のタイミングで発生するイベントをクラスタ全体で瞬時に共有

Serfでは難しいこと

  • サービス監視の状態変化によりイベント実行すること。

 Serfでのイベント発生のトリガーは「Serfクラスタへの参加や離脱」、「任意のタイミングでのイベント実行」の2種類。
 (ウェブサーバーの応答やDBサーバー障害をトリガとしてイベント実行することは可能ではあるものの、面倒とのこと)

Consulなら可能なこと

1. サービスごとの状態監視
Serfと同様の機能に加え、Apache HTTP Server・NginxのようなWebサーバ、MySQLPostgreSQLのデータベース、各種デーモン等の任意のサービスに対する状態監視を行うことができる。
また、監視対象はサーバの中だけに限らない。ネットワーク機器に対するpingや、クラウド上のサービスAPIをアクセスした結果に対してもサービスとして定義できる。

2. インターフェースを通しての参照
下記3つの方法で現在のサービス情報を取得できる。

  • web UI

  GUIでConsulノードの稼働状況や、その上で動いているサービスの稼働状況を視覚的に把握できる。またKVSのデータ参照・更新も可能。

  • HTTP

  REST APIを通してKVSの情報を取得し、編集することができる。

  hostコマンドやdigコマンドでローカル環境におけるホスト名・IPアドレスの名前解決を自動的に行ったり、WebサーバやデータベースのDNSラウンドロビンに応用したりできる。

Consul, Serf比較
Consul, Serf比較

以上、ザックリとした概要をまとめました。
修正点ある場合はご指摘頂ければと思います。

参考サイト
サービス・ディスカバリのためのConsul入門 | Think IT(シンクイット)
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf/Consulで管理を自動化! ~実践的な手法を紹介~ 記事一覧 | gihyo.jp