Consul简介

Consul

整体架构

10,000 foot view

consul-arch-420ce04a

  • Agent

Agent是在consul集群上一直运行的后台进程,通过 “consul agent” 启动,可以以两种方式运行:客户端,服务器。上图的每个长方形就是一个Agent。

  • Client

表示Agentl的客户端模式(紫色方块)。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

  • Server

SERVER表示consul的服务器模式(红色方块)。表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

  • Server-Leader

它和其它SERVER不一样的一点是(红色方块,带LEADER字样的),它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

  • DateCenter

    在consul中,datacenter被定义为:私有,低延迟,高带宽。所以不会跨公网的情况。

server 和client

还是看下上面的图, 图中有2个数据中心。consul是支持

**多数据中心**

的。每个DataCenter 包含多个 server 和client, 但是server 可能只有 3到5个,多了的话可能会变慢。因为server间要保持一致性。client没有这样的限制,他们可以成千上万。

LAN Gossip Pool

数据中心中所有的节点,都在一个 gossip protocol中,有2个目的:

1 新增的节点可以被自动发现。

2 失效节点的检测是分布式的。(这里可以看下gossip的实现)

server-leader 的特殊职责

leader负责处理所有请求和事务。非leader的sercer收到rpc请求的时候,会把它转给leader。

WAN gossip pool

所有DataCenter的server同时也是WAN gossip pool的一部分。与LAN Gossip Pool不同的是: 对公网的高延迟做了优化。

带来的好处:DataCenter之间可以互相发现,新增一个DateCenter会很简单,join进来就可以。

同时支持了跨DC的RPC调用,在 failure detection,connection cache,multiplexing等技术的应用,跨DC的调用也不是很慢。

问题: 跨DC调用是可以的,但是数据可能是按DC分片的,怎么解决?

答: There are some special situations where a limited subset of data can be replicated, such as with Consul’s built-in ACL replication capability, or external tools like consul-replicate.

一致性

Raft in Consul

只有server节点参与Raft。

Raft 主要被分成了领导人选举日志复制安全三个模块

  • 领导选举:一个新的领导人需要被选举出来,当现存的领导人宕机的时候
  • 日志复制:领导人必须从客户端接收日志然后复制到集群中的其他节点,并且强制要求其他节点的日志保持和自己相同。
  • 安全性:在 Raft 中安全性的关键是在图 3 中展示的状态机安全:如果有任何的服务器节点已经应用了一个确定的日志条目到它的状态机中,那么其他服务器节点不能在同一个日志索引位置应用一个不同的指令。

任期在 Raft 算法中充当逻辑时钟的作用

两种类型的 RPCs。

  • 请求投票(RequestVote) RPCs 由候选人在选举期间发起 ,
  • 然后附加条目(AppendEntries)RPCs 由领导人发起,用来复制日志和提供一种心跳机制

领导者周期性的向所有跟随者发送心跳包来维持自己的权威

###复制状态机

复制状态机通常都是基于复制日志实现的,如图 1。每一个服务器存储一个包含一系列指令的日志,并且按照日志的顺序进行执行。每一个日志都按照相同的顺序包含相同的指令,所以每一个服务器都执行相同的指令序列。因为每个状态机都是确定的,每一次执行操作都产生相同的状态和同样的序列。

保证复制日志相同就是一致性算法的工作了。

https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md