Serf/Consulで管理を自動化! ~実践的な手法を紹介~

第4回 Consulのサービス検出と様々なインターフェース

この記事を読むのに必要な時間:およそ 3.5 分

キーバリューストレージ(以下KVS)

KVSはConsulサーバが持っている機能の1つです。KVSは「キー」「バリュー」という一対の組み合わせを持つデータベースの役割を持っています。

KVSにはConsul内部でシステムが自動的に使用する領域と,ユーザが自由に利用できる領域があります。システム領域には,Consulエージェントから送られてきたサービス検出の情報や,ヘルスチェック情報に加え,Consulサーバの管理情報が含まれています。

Web UI・DNS・HTTPの各インターフェース

Consulメンバーやサービス状態は,複数のインターフェースを通して参照・変更できます。

Web UI

ブラウザを通し,人の目でデータセンター(ネットワーク)毎にConsulノードの稼働状況や,その上で動いているサービスの稼働状況を視覚的に把握できます。各サービスのヘルスチェックの詳細だけでなく,KVSのデータ参照・更新も行えます。

DNSインターフェース

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

HTTPインターフェース

REST APIを通してKVSの情報を取得し,編集することができます。Web UI自身,実際はREST APIを通して様々な情報を取得しています。

マルチデータセンター対応

複数のネットワークを跨がってConsulサーバ同士のクラスタを形成します。これは,ローカルのConsulサーバ・クライアント間で通信するものとは別に,リモート上の異なるConsulクラスタと通信ができるようにします。

この機能によって,リモートからConsulクラスタのメンバー情報を参照するだけでなく,サービス状況についても確認できます。

周辺ツールとの連携

ConsulはAPIを持っていますので,(周辺ツール)[http://www.consul.io/downloads_tools.html]と連携してConsulの機能を拡張できます。

HashiCorpが提供しているオフィシャルツールは3つです。

Envconsul

ConsulのKVSを通して環境変数の取得・設定を行うツール。KVSのデータ変更をトリガに,任意のコマンド実行も可能。

Consul Replicate

ConsulのKVSを複数のデータセンターでも利用できるように複製するツール。

Consul Template

サービスの状態変更時,既定のテンプレートを元に動的に設定ファイルを作成し,必要に応じて任意のコマンド実行による再起動が行えるツール。

その他,各種の開発言語に対応したライブラリや,Consul-Alertsのようにコミュニティ有志によるツールもあります。

Consulはクライアント・サーバ型の構成

Consulは「consul」というバイナリファイル1つで実行できるものです。起動時にサーバモードとして動作するか,あるいはクライアントとして動作するかを選びます。また,Serfと異なり,Consulはクライアント・サーバ型の構成です。

図3 Consulの構成

図3 Consulの構成

Consulサーバ

Consulサーバの役割は主にデータの保全です。Consulクライアントからクライアント上の様々なデータを取得し,それを自身のKVSに保管します。データは保管しておくだけでなく,Consulサーバには,次の役割があります。

  • Consulノードの情報を記録する
  • KVSにデータを格納する
  • 複数のインターフェースからKVSの情報を返す
  • 他のネットワーク上のConsulサーバと通信する

ConsulクライアントはSerfのように複数ですが,Consulサーバも複数のクラスタを構成します。Consulサーバはマスタとスレーブに分かれており,通常はマスタが全ての情報を管理します。もしマスタに障害があれば,残ったスレーブのうちのどれか1台がマスタに昇格します。

このような冗長性を確保するために3台以上での構成が推奨されています(Raftプロトコルを用いた通信を行い,相互監視するため⁠⁠。なお,Consulの機能確認や動作検証が目的であれば,1台からでも動作します。

Consulノード

Consulノードは,Consulサーバの手足のような役割を持ちます。コマンドラインのクライアントとして,サーバに対して命令を出し,情報を取得します。

また,自分自身の死活監視や,自身のサーバ上などで稼働するリソースを確認します。実際にサービスの検出や,死活状況の確認を行うのはノードです。各々のノードで逐次状況の監視を行い,変化があれば,直ちにサーバ側に伝えます。

著者プロフィール

前佛雅人(ぜんぶつまさひと)

クリエーションライン株式会社 Technology Evangelist

ホスティングサービスで運用保守サポートに携わった後,現職へ。サポート業務や新技術検証・開発業務を行う。趣味で監視や自動化に関するOSS検証や翻訳を行うのが好き。辛口の日本酒が大好き。

Twitter:@zembutsu