OSS編~オーケストレーションツール Consul 02 サービス検出編~

前回は『 OSS編~オーケストレーションツール Consul 01 インストール編~ 』と題して、オーケストレーションのConsulでインストールから起動までを試してみました。

今回は『OSS編~オーケストレーションツール Consul 02 サービス検出編~』と題して、オーケストレーションのConsulでサービス検出を試してみたいと思います。

サービス検出

1.サービスの登録

先ずは設定ファイルの置き場を作成して定義ファイル(80ポートをチェックしているフリ)を作成します。

1# mkdir /etc/consul.d23# echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' > /etc/consul.d/web.json

2.エージェント起動

ConsulのServerエージェントを起動します。

「agent: Synced service ‘web」とサービスの検出が行われているのがわかります。

1$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -config-dir /etc/consul.d2==> WARNING: BootstrapExpect Mode is specified as 1; this is the same as Bootstrap mode.3==> WARNING: Bootstrap mode enabled! Do not enable unless necessary4==> WARNING: It is highly recommended to set GOMAXPROCS higher than 15==> Starting Consul agent...6==> Starting Consul agent RPC...7==> Consul agent running!8         Node name: 'vagrant-ubuntu-trusty-64'9        Datacenter: 'dc1'10            Server: true (bootstrap: true)11       Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)12      Cluster Addr: 10.0.2.15 (LAN: 8301, WAN: 8302)13    Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false14             Atlas: <disabled>1516==> Log data will now stream in as it occurs:1718    2015/03/11 17:37:29 [INFO] serf: EventMemberJoin: vagrant-ubuntu-trusty-64 10.0.2.1519    2015/03/11 17:37:29 [INFO] serf: EventMemberJoin: vagrant-ubuntu-trusty-64.dc1 10.0.2.1520    2015/03/11 17:37:29 [INFO] raft: Node at 10.0.2.15:8300 [Follower] entering Follower state21    2015/03/11 17:37:29 [INFO] consul: adding server vagrant-ubuntu-trusty-64 (Addr: 10.0.2.15:8300) (DC: dc1)22    2015/03/11 17:37:29 [INFO] consul: adding server vagrant-ubuntu-trusty-64.dc1 (Addr: 10.0.2.15:8300) (DC: dc1)23    2015/03/11 17:37:29 [ERR] agent: failed to sync remote state: No cluster leader24    2015/03/11 17:37:30 [WARN] raft: Heartbeat timeout reached, starting election25    2015/03/11 17:37:30 [INFO] raft: Node at 10.0.2.15:8300 [Candidate] entering Candidate state26    2015/03/11 17:37:30 [INFO] raft: Election won. Tally: 127    2015/03/11 17:37:30 [INFO] raft: Node at 10.0.2.15:8300 [Leader] entering Leader state28    2015/03/11 17:37:30 [INFO] consul: cluster leadership acquired29    2015/03/11 17:37:30 [INFO] consul: New leader elected: vagrant-ubuntu-trusty-6430    2015/03/11 17:37:30 [INFO] raft: Disabling EnableSingleNode (bootstrap)31    2015/03/11 17:37:31 [INFO] agent: Synced service 'web'

3.クエリーでの確認

DNSとHTTPのAPIで確認してみます。

DNSでは「NAME.service.consul」のような形になります。

1$ dig @127.0.0.1 -p 8600 web.service.consul23; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1 -p 8600 web.service.consul4; (1 server found)5;; global options: +cmd6;; Got answer:7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 217868;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 09;; WARNING: recursion requested but not available1011;; QUESTION SECTION:12;web.service.consul.            IN      A1314;; ANSWER SECTION:15web.service.consul.     0       IN      A       10.0.2.151617;; Query time: 4 msec18;; SERVER: 127.0.0.1#8600(127.0.0.1)19;; WHEN: Wed Mar 11 17:42:01 JST 201520;; MSG SIZE  rcvd: 70

SRVオプションを利用する事でノードのレコードを取得出来ます。

1$ dig @127.0.0.1 -p 8600 web.service.consul SRV23; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1 -p 8600 web.service.consul SRV4; (1 server found)5;; global options: +cmd6;; Got answer:7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 641048;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 19;; WARNING: recursion requested but not available1011;; QUESTION SECTION:12;web.service.consul.            IN      SRV1314;; ANSWER SECTION:15web.service.consul.     0       IN      SRV     1 1 80 vagrant-ubuntu-trusty-64.node.dc1.consul.1617;; ADDITIONAL SECTION:18vagrant-ubuntu-trusty-64.node.dc1.consul. 0 IN A 10.0.2.151920;; Query time: 10 msec21;; SERVER: 127.0.0.1#8600(127.0.0.1)22;; WHEN: Wed Mar 11 17:44:42 JST 201523;; MSG SIZE  rcvd: 170

次の形にする事でタグによるフィルターも可能です。

「TAG.NAME.service.consul」

1$ dig @127.0.0.1 -p 8600 rails.web.service.consul23; <<>> DiG 9.9.5-3-Ubuntu <<>> @127.0.0.1 -p 8600 rails.web.service.consul4; (1 server found)5;; global options: +cmd6;; Got answer:7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 393558;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 09;; WARNING: recursion requested but not available1011;; QUESTION SECTION:12;rails.web.service.consul.      IN      A1314;; ANSWER SECTION:15rails.web.service.consul. 0     IN      A       10.0.2.151617;; Query time: 4 msec18;; SERVER: 127.0.0.1#8600(127.0.0.1)19;; WHEN: Wed Mar 11 17:47:57 JST 201520;; MSG SIZE  rcvd: 82

最後にHTTP APIでも試してみます。

1$ curl http://localhost:8500/v1/catalog/service/web2[{"Node":"vagrant-ubuntu-trusty-64","Address":"10.0.2.15","ServiceID":"web","ServiceName":"web","ServiceTags":["rails"],"ServiceAddress":"","ServicePort":80}]

いかがでしたでしょうか?

次回もお楽しみに!!!

この記事を書いた人

aws-recipe-user