DNS、サービス検知、KVS、イベント検知、Webフロントエンド・・・etc
Consulには単一バイナリながら様々な機能が含まれている。
多機能さゆえにConsulなるものが何であるかを一口で説明するのはなかなか骨が折れるのだが、 実際に手を動かしてそれらを使ってみると「系としての運用を効率化してくれるツール」としてそれらがまとめられていることが分かる。
サービス検知とそれに紐付いたDNS制御によりホストの増減に自動で対応するなんてことも考えられるし、 Consul-Templateと組み合わせてWebUIをさながらミドルウェアの集中管理画面として使用することも可能だ。
システムの中心に据えることで運用にまつわる諸々の面倒を無くしてくれる便利なツールなのだ。
Consulは本来は多数のサーバを運用するような場面で真価を発揮するツールではあるが、 単一サーバの運用においても役立つ要素はある。
単純にサービスの使用ポートと死活状態が一括で確認できるだけでもありがたいし、 先にも述べたミドルウェアの管理画面として活用するという面でも利用価値はあると思う。
(個人的には1コンテナ1機能主義に反するけど、Dockerのコンテナ内にConsulを収めて連携させるみたいな活用法もあるしね。)
そんなわけで自宅サーバ(Ubuntu 16.04)に導入してみた。
導入
何はともあれ、まずは自分の環境にあったものをダウンロードしてくる。
Download Consul - Consul by HashiCorp
(何気にArm版もあるのね。Raspberry Pieでマルチホスト環境を実験するのとかもできるな。)
wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip
解凍して配置。
unzip consul_0.6.4_linux_amd64.zip sudo mv consul /usr/local/bin/
コマンドが通ることを確認。
consul -v Consul v0.6.4 Consul Protocol: 3 (Understands back to: 1)
準備
あらゆる設定を引数で指定して実行することができるものの、 設定ファイルを読ませる形にするのが現実的だろう。
ということで設定ファイル等の置き場を作成。
mkdir /opt/consul mkdir /opt/consul/config mkdir /opt/consul/data
/opt/consul/config
以下にconfig.json
として下記の設定ファイルを作成。
自分のサーバのIPや動かしているサービスによって読み替えて欲しい。
{ "data_dir": "/opt/consul/data", #一時データの置き場を指定 "server": true, "ui": true, #WebUIを用いたいので "advertise_addr":"192.168.77.6", #サーバのIPアドレス(他のホストやブラウザから参照するとき使うアドレスを指定) "bootstrap_expect": 1, #非推奨らしいけど、今回みたいな単体で動かす場合には必要そうな雰囲気 "client_addr": "0.0.0.0", "services": [ #ホストで動いているサービスを列挙する { "name": "GitLab", "port": 8082, "check": { #サービスの死活監視 "http": "http://localhost:8082", "interval": "10s" } }, { "name": "Wekan", "port": 8081, "check": { "http": "http://localhost:8081", "interval": "10s" } } ] }
Configuration - Consul by HashiCorp
キーを"
で括らなきゃいけないとか最後の要素には,
を付けないとか、
”ちゃんとした”JSON形式であることに注意。
サービスの死活監視は例示したhttp
の他にも、自前のコマンドやNagiosプラグインで判定できるscript
やポートの確認を行うtcp
などが用意されている。
Check Definition - Consul by HashiCorp
起動してみる
先ほどの設定ファイルの格納場所を指定する形で起動する。
consul agent -config-dir=/opt/consul/config
デフォルトではWebUIはポート8500
番で起動するので、
ブラウザからサーバ(僕の場合だとhttp://192.168.77.6:8500)にアクセスするとWebUIが表示される。
サービスごとの一覧、ノード(ホスト)ごとの一覧、KVSといった形で操作画面が並ぶ。
例えばわざとWekanのプロセスを止めてみると、しばらくして一覧画面をリロードするとエラー表示となっていることが確認できる。
この辺は自動で再読み込みしてくれたら嬉しかったんだけど、残念ながらそういうのは無さそう。
Systemdに登録しておく
/etc/systemd/system
にconsul.service
とでもファイルを作り、以下の記述をする。
[Unit] Description=Consul After=network-online.target [Service] ExecStart=/usr/local/bin/consul agent -config-dir=/opt/consul/config ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure KillSignal=SIGINT [Install] WantedBy=multi-user.target
start、stop、restartなどのコマンドが通ることを確認し、起動時にスタートするように登録しておく。
sudo sytemctl start consul sudo sytemctl enable consul
Consul-Templateと絡めた話もしようかと思っていたのだが、 思いの外長くなってしまったので今回はこの辺で。
https://www.hashicorp.com/blog/introducing-consul-template.htmlwww.hashicorp.com
Consul使って色々自動化する話はまた別の機会にでも。
DevOpsを支える HashiCorpツール大全 (Think IT Books)
- 作者: 前佛雅人,クリエーションライン株式会社
- 出版社/メーカー: インプレス
- 発売日: 2015/10/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
こっちで書くほどでもない技術の小ネタやメモ用にもう一個ブログ用意してみたけど、 存外自分の中でスタンスが定まっていなくて、どういうさじ加減でやってくか迷うところ。
まだ何も書けてない。