官网地址

关键特性

服务发现 Service Discovery

Consul 的客户端能提供一个服务器(server),其他客户端可以使用这个服务来找到一个指定服务的提供者。通过HTTP或DNS的方式,应用(application)可以轻易的找到他们依赖的服务.

健康检测 Health Checking

consul 客户端可以支持任意数量的健康检测,无论是和一个指定服务关联的还是和一个本地节点关联的。这些信息能被一个operator用来监控cluster的健康,同时服务发现组件也会用这些信息来对不健康节点进行分流。

键值对存储 KV Store

应用可以使用Consul的层次键值存储(hierarchical key/value store),比如动态配置, 特性编辑等。Consul提供了HTTP 接口能非常容易的使用。

多数据中心 Multi Datacenter

Consul 可以很好的支持多数据中心。这意味着用户不用担心创建额外的抽象层来生成多个 regions。 This means users of Consul do not have to worry about building additional layers of abstraction to grow to multiple regions

基本结构

Consul 是一个分布式的高可用系统。每一个为consul提供服务的节点(node)都会运行一个consul agent。agent的主要作用是用于对node和node上的服务进行健康检测。对于服务发现或设置和获取KV值,agent不是必须的。

agent会与一个或多个Consul server进行交互。 Server是数据存储和复制(replicated)的地方。服务器自己会选择一个作为leader。虽然只有一个server Consul 也可以运行,但是推荐3-5个服务器来避免异常导致的数据损失。 建议为每个数据中心设置一组服务器(a cluster of servers)。

如果你的基础设置的组件需要发现其他的服务或者节点,你的组件可以查询任意的server或agent。 agent 会自动的将请求发送到server上去。

每个数据中心都会有一组server。当有一个服务发现或配置请求是跨数据中心的时候,本地的server会发送请求道远程数据中心并且返回请求。

# 安装

运行agent

agent 可以以server模式或client模式运行。agent是一个很轻量的进程。他可以注册服务,运行健康检测和发送查询到server。

启动agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
-$ consul agent -dev
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
           Version: 'v0.7.0'
         Node name: 'Armons-MacBook-Air'
        Datacenter: 'dc1'
            Server: true (bootstrap: false)
       Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
      Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
    Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false
             Atlas: <disabled>

==> Log data will now stream in as it occurs:

    2016/09/15 10:21:10 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:127.0.0.1:8300 Address:127.0.0.1:8300}]
    2016/09/15 10:21:10 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
    2016/09/15 10:21:10 [INFO] serf: EventMemberJoin: Armons-MacBook-Air 127.0.0.1
    2016/09/15 10:21:10 [INFO] serf: EventMemberJoin: Armons-MacBook-Air.dc1 127.0.0.1
    2016/09/15 10:21:10 [INFO] consul: Adding LAN server Armons-MacBook-Air (Addr: tcp/127.0.0.1:8300) (DC: dc1)
    2016/09/15 10:21:10 [INFO] consul: Adding WAN server Armons-MacBook-Air.dc1 (Addr: tcp/127.0.0.1:8300) (DC: dc1)
    2016/09/15 10:21:13 [DEBUG] http: Request GET /v1/agent/services (180.708µs) from=127.0.0.1:52369
    2016/09/15 10:21:13 [DEBUG] http: Request GET /v1/agent/services (15.548µs) from=127.0.0.1:52369
    2016/09/15 10:21:17 [WARN] raft: Heartbeat timeout from "" reached, starting election
    2016/09/15 10:21:17 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
    2016/09/15 10:21:17 [DEBUG] raft: Votes needed: 1
    2016/09/15 10:21:17 [DEBUG] raft: Vote granted from 127.0.0.1:8300 in term 2. Tally: 1
    2016/09/15 10:21:17 [INFO] raft: Election won. Tally: 1
    2016/09/15 10:21:17 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
    2016/09/15 10:21:17 [INFO] consul: cluster leadership acquired
    2016/09/15 10:21:17 [DEBUG] consul: reset tombstone GC to index 3
    2016/09/15 10:21:17 [INFO] consul: New leader elected: Armons-MacBook-Air
    2016/09/15 10:21:17 [INFO] consul: member 'Armons-MacBook-Air' joined, marking health alive
    2016/09/15 10:21:17 [INFO] agent: Synced service 'consul'

如上所示,agent启动并输出了日志。从日志可以看出agent是以server模式运行的,并且声明为了cluster中的leader。 另外,当前member被标记为健康的。