简介

服务注册与发现作为微服务的关键组件,为微服务提供服务注册、服务发现及健康检查的功能。
Consul因为功能齐全,容易使用而广受开发者欢迎。

功能

  1. 服务注册与发现

  2. 健康检查

  3. KV存储

  4. 多数据中心

快速上手

安装

安装非常简单,Consul提供了二进制文件,下载后解压就可以用了。
下载地址:Linux | Mac OS X

root@598361668db6:/data# unzip consul_1.0.2_linux_amd64.zip
root@598361668db6:/data# ls
consul

启动

root@598361668db6:/data# ./consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
           Version: 'v1.0.2'
           Node ID: 'ccb504cc-f173-8464-96a7-6d13ba85246a'
           Node name: '598361668db6'
           Datacenter: 'dc1' (Segment: '')
           Server: true (Bootstrap: false)
           Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, DNS: 8600)
           Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
           Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false

启动很简单,只需要一行命令。
-dev 代表我们以开发模式启动。
开发模式启动之后,默认会在8500端口启动管理界面,我们打开浏览器(http://localhost:8500),一睹Consul的芳容。

如果在Docker容器中启动,会出现无妨访问网页的情况。启动命令改为:./consul agent -dev -bind 0.0.0.0 -client 0.0.0.0,可以避免这个问题。

微服务专题:服务注册与发现之一Consul快速上手_第1张图片
从界面中我们可以看到 服务、节点、KV存储、ACL(访问控制)和数据中心,所有功能都很直观,大家可以点一点,熟悉一下。

查看节点

Consul提供了三种查看节点的方式:API、命令行和DNS。
命令行方式:

root@598361668db6:/data# consul members
Node          Address         Status  Type    Build  Protocol  DC   Segment
598361668db6  127.0.0.1:8301  alive   server  1.0.2  2         dc1  

API方式:

root@598361668db6:/data# curl localhost:8500/v1/catalog/nodes
[
    {
        "ID": "838da409-35cd-a752-7f35-70efe35b7a43",
        "Node": "598361668db6",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "Meta": {
            "consul-network-segment": ""
        },
        "CreateIndex": 5,
        "ModifyIndex": 6
    }
]

DNS方式
consul默认会以hostname.node.consul添加一条A记录。

root@598361668db6:/data# hostname
598361668db6
root@598361668db6:/data# dig @127.0.0.1 -p 8600 598361668db6.node.consul

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @127.0.0.1 -p 8600 598361668db6.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41631
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;598361668db6.node.consul.  IN  A

;; ANSWER SECTION:
598361668db6.node.consul. 0 IN  A   127.0.0.1

;; Query time: 1 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Wed Dec 20 10:09:13 UTC 2017
;; MSG SIZE  rcvd: 69