share facebook facebook2 twitter menu hatena pocket slack

2015.03.03 TUE

今さらジローだけど Consul 0.5 をざっくり試す

川原 洋平

WRITTEN BY川原 洋平

ども、 Kawacorp の cloudpackかっぱ (@inokara) です。

はじめに

Consul 0.5 がリリースされたようなのでリリース内容を見ながら気になるところは試しながらチェックしていくので随時追記していく予定です。

参考(謝辞)

@zembutsu さん、ありがとうございます!

ヘルプで見るオプション比較

0.5

[root@be9b37845581 bin]# consul --help
usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    agent          Runs a Consul agent
    event          Fire a new event
    exec           Executes a command on Consul nodes
    force-leave    Forces a member of the cluster to enter the "left" state
    info           Provides debugging information for operators
    join           Tell Consul agent to join cluster
    keygen         Generates a new encryption key
    keyring        Manages gossip layer encryption keys
    leave          Gracefully leaves the Consul cluster and shuts down
    lock           Execute a command holding a lock
    maint          Controls node or service maintenance mode
    members        Lists the members of a Consul cluster
    monitor        Stream logs from a Consul agent
    reload         Triggers the agent to reload configuration files
    version        Prints the Consul version
    watch          Watch for changes in Consul

0.4

[root@be9b37845581 bin]# ./consul-0.4 --help
usage: consul [--version] [--help] <command> [<args>]

Available commands are:
    agent          Runs a Consul agent
    event          Fire a new event
    exec           Executes a command on Consul nodes
    force-leave    Forces a member of the cluster to enter the "left" state
    info           Provides debugging information for operators
    join           Tell Consul agent to join cluster
    keygen         Generates a new encryption key
    leave          Gracefully leaves the Consul cluster and shuts down
    members        Lists the members of a Consul cluster
    monitor        Stream logs from a Consul agent
    reload         Triggers the agent to reload configuration files
    version        Prints the Consul version
    watch          Watch for changes in Consul

0.5 から keyringlockmaint オプションが追加になったようですな。

keyring とは

うっかり KVS の Key と関連しているのかと思ったら勘違い。Consul の暗号化サポートしており、暗号化で利用する鍵の管理で利用する(ようです)。自分自身は Consul で暗号化は利用したことが無いのでこのオプションがサポートされたことによるメリットについては不明…。

lock とは

Consul クラスタ内で稼働させておくサービス(Consul で管理するサービス)の数を固定するオプション。例えば 3 台のノードで構成される Consul クラスタにおいて hoge というサービスを 2 ノードで起動しておきたい場合に利用するようです。

あとで試したいと思います。

maint とは

maint オプションは Consul クラスタからノードを一時的に切り離したい時に利用出来そう。

試してみた

個人的に気になる機能

HTTP ヘルスチェック

従来バージョンのヘルスチェックはチェックスクリプト(Nagios のチェックスクリプトと互換性がある)を利用したヘルスチェックのみだったようですが HTTP リクエストを利用したヘルスチェックが加わりました。従来もスクリプトを駆使すれば HTTP によるヘルスチェックは可能だったがその手間が省けることになります。

以下は Consul クラスタ内のノードで稼働している API エンドポイントに対するヘルスチェックを行う例。

従来。

{
  "check": {
    "id": "api-check",
    "name": "API live check",
    "script": "/usr/local/bin/check_http_api.sh",
    "interval": "10s"
  }
}

上記のように設定しておいて、以下のようなスクリプト( check_http_api.sh )を作る必要がありましたが…

#!/usr/bin/env bash
status=`curl -LI http://localhost:5000/health -o /dev/null -w '%{http_code}n' -s`
if [ $status = "200" ];then
  exit 0
else
  exit 2
fi

0.5 では直接いかのように HTTP のエンドポイントを指定出来るようになリました。

{
  "check": {
    "id": "check-api",
    "name": "API live check",
    "http": "http://localhost:5000/health",
    "interval": "10s",
    "timeout": "1s"
  }
}

これは便利だと思う。

Atlas との連携

Atlas とは Hashicorp が提供する VagrantPackerTerraformConsul を一元管理してアプリ開発から開発環境、本番環境へのデプロイ、運用までをトータルで行えるプラットフォームのようです。(ざっくりしすぎてすいません)

今回の 0.5 からこの Atlas を利用した上での自動クラスタリングがサポートされたようです。この機能については @takipone さんよりレポートされております(@takipone さん、ありがとうございます!)のでそちらを参考にしていただければと思いますが…一応、手元でも試してみました。

Atlas のアカウントにて token を発行して consul agent を以下のように起動します。(token の発行方法等については割愛させて頂きます。)

consul agent 
  -atlas-join 
  -atlas-token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
  -atlas=inokappa/cluster1 
  -bootstrap 
  -server 
  -data-dir /opt/consul &

コマンドを実行すると以下のように Atlas 上からクラスタにジョインしたノードの情報を確認することが出来ます。
今さらジローだけど Consul 0.5 をざっくり試す: Atlas連携の動作確認

おお。一応、consul members も。

# consul members
    2015/02/28 07:58:26 [INFO] agent.rpc: Accepted client: 127.0.0.1:56365
Node          Address          Status  Type    Build  Protocol
5535cc6b806e  172.17.0.3:8301  alive   server  0.5.0  2
be9b37845581  172.17.0.2:8301  alive   server  0.5.0  2

ということで…

ざっくりと Consul 0.5 を引き続き試していきます。

元記事はこちらです。
今さらジローだけど Consul 0.5 をざっくり試す