そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

Consulを導入する

www.consul.io

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が表示される。

f:id:blue1st:20160320215929p:plain

サービスごとの一覧、ノード(ホスト)ごとの一覧、KVSといった形で操作画面が並ぶ。

例えばわざとWekanのプロセスを止めてみると、しばらくして一覧画面をリロードするとエラー表示となっていることが確認できる。

f:id:blue1st:20160320215936p:plain

f:id:blue1st:20160320220003p:plain

この辺は自動で再読み込みしてくれたら嬉しかったんだけど、残念ながらそういうのは無さそう。

Systemdに登録しておく

/etc/systemd/systemconsul.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)

DevOpsを支える HashiCorpツール大全 (Think IT Books)

  • 作者: 前佛雅人,クリエーションライン株式会社
  • 出版社/メーカー: インプレス
  • 発売日: 2015/10/22
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る


こっちで書くほどでもない技術の小ネタやメモ用にもう一個ブログ用意してみたけど、 存外自分の中でスタンスが定まっていなくて、どういうさじ加減でやってくか迷うところ。

blue1st-tech.hateblo.jp

まだ何も書けてない。