Dockerを使って軽くConsulを触ってみる

サーバ界隈の技術革新が激しい今日この頃ですが、名前は知っていつつもなかなか触る機会がないなんて状態ではないでしょうか。特に複数台のサーバを予め用意しなければならないソフトウェアは準備だけでも大変で、なかなか手出ししづらいかと思います。

そこで使ってみたいのがDockerです。Dockerを使うことで1台のサーバでも仮想的に複数台サーバ構成を試すことができます。今回は最近登場したConsulをDocker上で簡単に試してみたいと思います。あくまでも触れる程度なので、本格的な運用とは別でお考えください。

サーバを立てる

さくらのクラウドを使ってサーバを準備します。OSはCoreOSになります。サーバの追加を行う際にアーカイブ選択で CoreOS 367.1.0 (stable) #112600559854 を選択します。

サーバ追加画面。アーカイブからCoreOSを選びます。

CoreOSに接続

サーバが立ち上がったら ssh で接続します。

$ ssh core@server_ip_address

server_ip_address はサーバのIPに読み替えてください。

Consulを用意する

サーバに接続したらConsulを用意します。

$ docker pull progrium/consul

少し時間がかかりますが、終わったらまず1つ目のノードを立ち上げます。

$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3

2台目のノードからは、この1台目のノードに接続する形になりますので、IPアドレスを取得します。

$ JOIN_IP="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1)"

これで $JOIN_IP にIPアドレスが入ります。では続けてノードを立ち上げます。

$ docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP
$ docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP

これでサーバ同士はつながったのですが、外部からその状態を見ることはできません。ということで4台目はサーバではなくクライアントとして立ち上げます。

$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node4 progrium/consul -join $JOIN_IP

これで8400、8500番ポートを使ってConsulの状態を見られるようになりました。例えばcurlで次のように入力します。

$ curl localhost:8500/v1/catalog/nodes
[{"Node":"node4","Address":"172.17.0.9"},{"Node":"node1","Address":"172.17.0.5"},{"Node":"node2","Address":"172.17.0.6"},{"Node":"node3","Address":"172.17.0.7"}]

ノードがつながっているのが分かります。

Consulクライアントを使う

今回はDockerなのでConsulコマンドがインストールできません。ということで Mac OSX側から使ってみることにします。使うのはHomebrewです。

$ brew install caskroom/cask/brew-cask
$ brew cask install consul
$ consul members  -rpc-addr=server_ip_address:8400
Node    Address          Status  Type    Build  Protocol
node4   172.17.0.9:8301  alive   client  0.4.0  2
node3   172.17.0.7:8301  alive   server  0.4.0  2
node1   172.17.0.5:8301  alive   server  0.4.0  2
node2   172.17.0.6:8301  alive   server  0.4.0  2

このように外部からもノードの状態が見られるようになっています。

データを送ってみる

ConsulはシンプルなKVSでもあるので、

$ curl -XPUT -d 'hello, world!' http://server_ip_address:8500/v1/kv/hello/key

のようにしてデータを登録し、

$ curl -s http://server_ip_address:8500/v1/kv/hello/key | jq . 
  {
    "CreateIndex": 26,
    "ModifyIndex": 26,
    "LockIndex": 0,
    "Key": "hello/key",
    "Flags": 0,
    "Value": "aGVsbG8sIHdvcmxkIQ=="
  }
]

としてデータの取得ができるようになっています。


Consulの主な利用法としてはサービスの登録と、そのヘルスチェックにあると思いますのでこのまま使うという訳ではないと思いますが、Consulがどういった感じなのか触ってみるのであれば、こんな感じに簡単に体験できるようになっています。

Dockerの使い方として面白いですね。

progrium/docker-consul

おしらせ