Consul是一个支持多数据中心,分布式高可用,服务发现和配置共享,支持健康检查和允许存储键值对的一个服务管理软件‘’ 每个consul 都运行一个consul Agent,agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群. Consul采用一致性Raft算法保证服务高可用,成员管理和消息广播采用gossip协议
Consul主要用来做分布式应用的微服务架构中服务注册及发现功能的软件工具,微服务中提供很多不同的服务,客户端访问需要取得服务的网络位置,consul就提供了一个数据中心,将各种微服务注册到其中,屏蔽后端发现服务网络位置的复杂逻辑,通过服务名称地址,提供给客户端相应的服务,进行调用和使用服务
一个consul agent 就是一个独立程序,一个长时间运行的守护进程,运行在consul集群中的每个节点上,启动一个consul agent 只是启动一个单独的node,agent有两种模式,:server和client,如上图: Client:表示consul的client模式,就是客户端模式,在这这模式下,所有注册到当前节点的服务会被转发到Server,本身不持久化这些信息,他是一个非常轻量级的进程,用与注册服务,运行健康检查和转发 Server:表示consul的server模式,功能和client一样,但是他会把所有的信息持久化本地 Server-leader:loader server需要负责同步注册的信息给其他server,同时负责个节点的健康检测
a) 启动server $ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=192.168.110.169 -ui -rejoin -join 192.168.110.155
-server : 定义agent运行在server模式 -bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用 -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0 -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名 -ui: 启动web界面 -rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。 -config-dir::配置文件目录,里面所有以.json结尾的文件都会被加载 -client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0,指定客户端能访问的ip,类似于ip白名单。0.0.0.0表示不限制 -join 192.168.110.121 : 启动时加入这个集群 -dataacenter:表示数据中心名称 更多说明查看 consul agent –help 访问webui端口号为8500 b)启动client: $ consul agent -data-dir /tmp/consul -node=n3 -bind=192.168.110.157 -config-dir /etc/consul.d -rejoin -join 192.168.110.155
注册服务有两种方式,可以通过定义文件或者调用http api来注册一个服务
定义文件注册服务: { “service”: { #服务 “name”: “web”, #名称 “tags”: [“master”], #标记 “address”: “127.0.0.1”, #ip “port”: 10000, #端口 “checks”: [ { “http”: “http://localhost:10000/health”, “interval”: “10s” #检查时间 } ] } }http方式: curl -X PUT -d ‘{“id”: “jetty”,“name”: “jetty”,“address”: " "127.0.0.1,“port”: 8080,“tags”: [“dev”],“checks”: [{“http”: " “http://localhost:10000/health”,“interval”: “5s”}]}’ http://192.168.1.100:8500/v1/agent/service/register官方网文档: 更多详细介绍和使用,查看https://www.consul.io/docs