consul-基础概念
一.关于consul
consul是一个通过golang开发的开源项目。通常用于发现和配置基础架构中服务,提供以下关键功能:
1. 服务发现: consul可以提供服务(如API或mysql)管理,其他client可以使用consul发现服务的提供者。使用dns或http,应用可以轻松找到各自所依赖的服务。
2. 健康检查: consul客户端可以提供任何数量的健康检查,或者与相关服务关联(如web服务返回200的状态,本地资源使用率(内存90%?)高等),运维同学可以通过相关信息来监视集群运行3. 状态,服务发现组件使用监听等指标判断节点可用性,将流量从不健康等节点中切走。
4. key-value存储: 应用程序可以使用consul等key/value存储功能,用于动态配置,功能标签,协调,master选举等功能。通过http api 进行操作。
5. 多数据中心: consul支持多个数据中心。意味着不同网络中心(两个server要联通),不需要额外单独。且一个数据中心的网络连接问题或故障不会影响其他数据中心的可用性。
consul 基础架构:
consul是一个分布式,高可用的系统。
每个节点都需要运行一个agent,agent有两种模式,分别为server和client,每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。
agent(client) : 负责监控检查节点上都服务及节点自身,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化相关信息。
server: 和client交互,进行数据持久化(数据存储/复制)。
server-leader: server会自己内部选举出一个leader,负责信息同步(同步注册的信息给其他server),健康检测(各节点)。
每个数据中心都运行consul服务集群, 当发生跨数据中心服务发现或配置请求时,本地consul服务器将请求转发给远程数据中心并返回结果。
在consul 方案中,每个提供服务的node上都要部署和运行consul的agent,所有印象consul agent节点的集合构成consul cluster。 consul agent有两种运行模式: server和client,以server模式运行的consul agent用于维护consul集群的状态。对于一个数据中心的consul cluster,官方建议有3 or 5个运行在server mode的agent(主要考虑其单点的故障问题,及整体性能Bootstrap a Consul datacenter (VM) | Consul | HashiCorp Developer)。client mode只负责将请求转发给server agent, cluster节点数量不限。
一个cluster的节点容错性如下:
服务器
法定人数
失败容忍
1
1
0
2
2
0
3
2
1
4
3
1
5
3
2
可以发现,我们设置3 or 5台是比较合理的。