在Consul安装完成后,必须先运行代理。该代理能够以服务器或者客户端模式运行。每一个数据中心必须博阿含至少一个服务器,不过一个集群推荐3或5个服务器。一个单服务器的部署在失败的状况下会发生数据丢失所以不推荐使用。html
全部其余的代理运行在客户端模式。一个客户端是一个很是轻量级的进程,它注册服务,运行健康检查,以及转发查询到服务器。代理必须运行在集群中的每一个节点上。node
更多的关于启动一个数据中心的细节,请查看这篇指导。bootstrap
为了简单起见,咱们将暂时在开发者模式中启动Consul代理。这个模式能够很是容易快速地启动一个单节点的Consul环境。固然它并非用于生产环境下而且它也不会持久任何状态。安全
$ consul agent -dev ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running! 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: 172.20.20.11 (LAN: 8301, WAN: 8302) Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false Atlas: <disabled> ==> Log data will now stream in as it occurs: [INFO] raft: Node at 172.20.20.11:8300 [Follower] entering Follower state [INFO] serf: EventMemberJoin: Armons-MacBook-Air 172.20.20.11 [INFO] consul: adding LAN server Armons-MacBook-Air (Addr: 172.20.20.11:8300) (DC: dc1) [INFO] serf: EventMemberJoin: Armons-MacBook-Air.dc1 172.20.20.11 [INFO] consul: adding WAN server Armons-MacBook-Air.dc1 (Addr: 172.20.20.11:8300) (DC: dc1) [ERR] agent: failed to sync remote state: No cluster leader [WARN] raft: Heartbeat timeout reached, starting election [INFO] raft: Node at 172.20.20.11:8300 [Candidate] entering Candidate state [DEBUG] raft: Votes needed: 1 [DEBUG] raft: Vote granted. Tally: 1 [INFO] raft: Election won. Tally: 1 [INFO] raft: Node at 172.20.20.11:8300 [Leader] entering Leader state [INFO] raft: Disabling EnableSingleNode (bootstrap) [INFO] consul: cluster leadership acquired [DEBUG] raft: Node 172.20.20.11:8300 updated peer set (2): [172.20.20.11:8300] [DEBUG] consul: reset tombstone GC to index 2 [INFO] consul: New leader elected: Armons-MacBook-Air [INFO] consul: member 'Armons-MacBook-Air' joined, marking health alive [INFO] agent: Synced service 'consul'
你能够看到,Consul代理已经启动而且输出了一些日志信息。从日志信息中,你能够看到咱们代理运行在服务器模式而且声明集群的leadship。另外,本地的成员已经被标记为一个健康的集群成员。bash
OS X用户注意:Consul使用你的机器名做为默认的节点名称。若是你的机器名包涵了点,那么DNS查询该节点会不能工做,为了不这个问题,使用-node显式设置你的节点名称。服务器
若是你在另外一个终端中运行 consul members ,你能看到Consul集群全部的节点。咱们在下一部分介绍如何加入集群,可是如今你只能看到一个成员(你本身的机器):网络
$ consul members Node Address Status Type Build Protocol DC Armons-MacBook-Air 172.20.20.11:8301 alive server 0.6.1dev 2 dc1
该命令输出显示你本身的节点,运行的地址,它的健康状态,它在集群中的角色,以及一些版本信息。另外元数据能够经过 -detailed 选项来查看。app
members 命令选项的输出是基于 gossip协议 的而且其内容是最终一致。也就是说,在任什么时候候,你在本地代理看到的内容也许与当前服务器中的状态并非绝对一致的。若是须要强一致性的状态信息,使用HTTP API向Consul服务器发送请求:curl
$ curl localhost:8500/v1/catalog/nodes [{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","CreateIndex":3,"ModifyIndex":4}]
另外对于HTTP API,DNS接口也常被用来查询节点信息。注意你必须确信你的DNS可以找到Consul代理的DNS服务器,Consul代理的DNS服务器默认运行在8600端口。有关DNS实体(相似于"Armons-MacBook-Air.node.consul")将在后面有更详细的介绍。ide
$ dig @127.0.0.1 -p 8600 Armons-MacBook-Air.node.consul ... ;; QUESTION SECTION: ;Armons-MacBook-Air.node.consul. IN A ;; ANSWER SECTION: Armons-MacBook-Air.node.consul. 0 IN A 172.20.20.11
你可以使用 Ctrl-C (中断信号)来优雅地中止代理。中止代理后,你能够看到它脱离集群而且关闭的信息。
为了优雅地离开集群,Consul会通知其余的集群成员本身已经脱离了。若是你强制杀死代理的进程,那么其余的集群成员须要侦测节点是否失效。当一个成员离开,它的服务以及(checks)将从目录中移除。当一个成员失效,它的健康会简单地标记为critical,但它并不会被从目录中移除。Consul将自动尝试从新链接到失效的节点,并容许它在某些网络情况下恢复。
另外,若是一个代理以服务器模式启动,优雅地离开是很是重要的,由于这能够避免潜在的可用性问题,有关一致性协议,查看指南来获取更详细的关于如何安全的增长和移除服务器的信息。
一个简单的Consul集群已经启动了,让咱们获取一些[服务]()吧!
翻译自这里