ETCD和RAFT总结

1. ETCD和RAFT整体架构

2. RAFT算法

Raft强一致性算法的具体实现Leader选举和数据备份

https://www.jianshu.com/p/5aed73b288f7

论文译文

https://www.infoq.cn/article/raft-paper/

2.1 选举

一个新的集群启动时,或者老的leader故障时,会选举出一个新的leader.

https://www.cnblogs.com/sunsky303/p/11451755.html

选举机制动画

http://thesecretlivesofdata.com/raft/

2.2 日志复制

leader必须接受客户端的日志条目并且将他们同步到集群的所有机器

Leader选出后接受客户端请求,Leader把请求日志作为日志条目加入到日志中,然后向其他Follower节点复制日志,但超过半数的日志复制成功,则Leader将日志应用到状态机,并向客户端返回执行结果,同时Follower也将结果提交。如果存在Follower没有成功复制日志,Leader会无限重试。

1,Leader提交log到WAL,并广播每个node

2,node收到后log到WAL,并返回

3,多数node返回后,修改状态为commit并存到DB,返回用户

4,通知其他node,commit这条log,并保存到db

2.3 安全性

保证任何节点只要在它的状态机中生效了一条日志条目,就不会在相同的key上生效另一条日志条目

3. API Server

用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求.

4. WAL

Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容.

5. KV Store

kv数据的存储引擎,v3支持不同的后端存储,当前采用boltdb。通过boltdb支持事务操作.

6. Node状态

6.1 leader

负责日志的同步管理,处理来自客户端的请求,与Follower保持这heartBeat的联系

6.2 follower

刚启动时所有节点为Follower状态,响应Leader的日志同步请求,响应Candidate的请求,把请求到Follower的事务转发给Leader

6.3 candidate

负责选举投票,Raft刚启动时由一个节点从Follower转为Candidate发起选举,选举出Leader后从Candidate转为Leader状态。

6.3.1 静态配置

这种方式比较适用于离线环境,在启动整个集群之前,你就已经预先清楚所要配置的集群大小,以及集群上各节点的地址和端口信息。那么启动时,你就可以通过配置ETCD_INITIAL_CLUSTER参数进行etcd集群的启动

ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380"

ETCD_INITIAL_CLUSTER_STATE=new

6.3.2 动态自发现配置

通过自发现的方式启动etcd集群需要事先准备一个etcd集群。

如果你本地没有可用的etcd集群,etcd官网提供了一个可以公网访问的etcd存储地址。

6.3.3 DNS发现

etcd还支持使用DNS SRV记录进行启动。所以你要在DNS服务器上进行相应的配置

你可能感兴趣的:(ETCD和RAFT总结)