Consul包含多个组件,可是做为一个总体,为你的基础设施提供服务发现和服务配置的工具.他提供如下关键特性:css
服务发现 Consul的客户端可用提供一个服务,好比 api 或者mysql ,另一些客户端可用使用Consul去发现一个指定服务的提供者.经过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(好比:webserver是否返回了200 OK 状态码)或者使用本地节点(好比:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
Key/Value存储 应用程序可用根据本身的须要使用Consul的层级的Key/Value存储.好比动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
多数据中心 Consul支持开箱即用的多数据中心.这意味着用户不须要担忧须要创建额外的抽象层让业务扩展到多个区域.
Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施. html
Consul是一个分布式高可用的系统. 这节将包含一些基础,咱们忽略掉一些细节这样你能够快速了解Consul是如何工做的.若是要了解更多细节,请参考深刻的架构描述.node
每一个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.python
Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul能够运行在一台server , 可是建议使用3到5台来避免失败状况下数据的丢失.每一个数据中心建议配置一个server集群.mysql
你基础设施中须要发现其余服务的组件能够查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .linux
每一个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求建立时.本地Consul Server转发请求到远程的数据中心并返回结果.nginx
更多介绍查看官网点击前往git
安装Consul,找到适合你系统的包下载他.Consul打包为一个’Zip’文件.前往下载github
下载后解开压缩包.拷贝Consul到你的PATH路径中,在Unix系统中~/bin
和/usr/local/bin
是一般的安装目录.根据你是想为单个用户安装仍是给整个系统安装来选择.在Windows系统中有能够安装到%PATH%
的路径中.web
完成安装后,经过打开一个新终端窗口检查consul
安装是否成功.经过执行 consul
你应该看到相似下面的输出
[root@dhcp-10-201-102-248 ~]# consul usage: consul [--version] [--help] <command> [<args>] Available commands are: agent Runs a Consul agent configtest Validate config file event Fire a new event exec Executes a command on Consul nodes force-leave Forces a member of the cluster to enter the "left" state info Provides debugging information for operators join Tell Consul agent to join cluster keygen Generates a new encryption key keyring Manages gossip layer encryption keys kv Interact with the key-value store leave Gracefully leaves the Consul cluster and shuts down lock Execute a command holding a lock maint Controls node or service maintenance mode members Lists the members of a Consul cluster monitor Stream logs from a Consul agent operator Provides cluster-level tools for Consul operators reload Triggers the agent to reload configuration files rtt Estimates network round trip time between nodes snapshot Saves, restores and inspects snapshots of Consul server state version Prints the Consul version watch Watch for changes in Consul
若是你获得一个consul not be found
的错误,你的PATH
可能没有正确设置.请返回检查你的consul的安装路径是否包含在PATH
中.
完成Consul的安装后,必须运行agent. agent能够运行为server
或client
模式.每一个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server.部署单一的server,在出现失败时会不可避免的形成数据丢失.
其余的agent运行为client模式.一个client是一个很是轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.agent必须在集群中的每一个主机上运行.
查看启动数据中心的细节请查看这里.
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=s1 -bind=10.201.102.198 -ui-dir ./consul_ui/ -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0
运行cosnul agent以server
模式,
-server
: 定义agent运行在server模式-bootstrap-expect
:在一个datacenter中指望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用-bind
:该地址用来在集群内部的通信,集群内的全部节点到地址都必须是可达的,默认是0.0.0.0-node
:节点在集群中的名称,在一个集群中必须是惟一的,默认是该节点的主机名-ui-dir
: 提供存放web ui资源的路径,该目录必须是可读的-rejoin
:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。-config-dir
:配置文件目录,里面全部以.json结尾的文件都会被加载-client
:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1因此不对外提供服务,若是你要对外提供服务改为0.0.0.0[root@dhcp-10-201-102-198 consul]# consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=s1 -bind=10.201.102.198 -ui-dir ./consul_ui/ -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0 ==> WARNING: Expect Mode enabled, expecting 3 servers ==> Starting Consul agent... ==> Starting Consul agent RPC... ==> Consul agent running! Version: 'v0.7.4' Node ID: '422ec677-74ef-8f29-2f22-01effeed6334' Node name: 's1' Datacenter: 'dc1' Server: true (bootstrap: false) Client Addr: 0.0.0.0 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400) Cluster Addr: 10.201.102.198 (LAN: 8301, WAN: 8302) Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false Atlas: <disabled> ==> Log data will now stream in as it occurs: 2017/03/17 18:03:08 [INFO] raft: Restored from snapshot 139-352267-1489707086023 2017/03/17 18:03:08 [INFO] raft: Initial configuration (index=6982): [{Suffrage:Voter ID:10.201.102.199:8300 Address:10.201.102.199:8300} {Suffrage:Voter ID:10.201.102.200:8300 Address:10.201.102.200:8300} {Suffrage:Voter ID:10.201.102.198:8300 Address:10.201.102.198:8300}] 2017/03/17 18:03:08 [INFO] raft: Node at 10.201.102.198:8300 [Follower] entering Follower state (Leader: "") 2017/03/17 18:03:08 [INFO] serf: EventMemberJoin: s1 10.201.102.198 2017/03/17 18:03:08 [INFO] serf: Attempting re-join to previously known node: s2: 10.201.102.199:8301 2017/03/17 18:03:08 [INFO] consul: Adding LAN server s1 (Addr: tcp/10.201.102.198:8300) (DC: dc1) 2017/03/17 18:03:08 [INFO] consul: Raft data found, disabling bootstrap mode 2017/03/17 18:03:08 [INFO] serf: EventMemberJoin: s2 10.201.102.199 2017/03/17 18:03:08 [INFO] serf: EventMemberJoin: s3 10.201.102.200 2017/03/17 18:03:08 [INFO] serf: Re-joined to previously known node: s2: 10.201.102.199:8301 2017/03/17 18:03:08 [INFO] consul: Adding LAN server s2 (Addr: tcp/10.201.102.199:8300) (DC: dc1) 2017/03/17 18:03:08 [INFO] consul: Adding LAN server s3 (Addr: tcp/10.201.102.200:8300) (DC: dc1) 2017/03/17 18:03:08 [INFO] serf: EventMemberJoin: s1.dc1 10.201.102.198 2017/03/17 18:03:08 [INFO] consul: Adding WAN server s1.dc1 (Addr: tcp/10.201.102.198:8300) (DC: dc1) 2017/