前回は『 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.json2.エージェント起動
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: 70SRVオプションを利用する事でノードのレコードを取得出来ます。
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}]いかがでしたでしょうか?
次回もお楽しみに!!!