etcd-1-etcd概述
一 etcd简介
1.1 etcd是什么
etcd是一个分布式KV存储库,内部采用Raft协议作为一致性算法选举leader,同步key-value,其特性是:高可用,强一致。
集群一般采取大多数模型(quorum)来选举leader,即集群需要2N+1个节点,这时总能产生1个leader,多个follower。etcd也不例外,每个etcd cluster都由若干个member组成,每个member是一个独立运行的etcd实例,单机上也可以运行多个member。
在正常运行的状态下,集群中会有一个 leader,其余的 member 都是 followers。leader 向 followers 同步日志,保证数据在各个 member 都有副本。leader 还会定时向所有的 member 发送心跳报文,如果在规定的时间里 follower 没有收到心跳,就会重新进行选举。客户端所有的请求都会先发送给 leader,leader 向所有的 followers 同步日志,等收到超过半数的确认后就把该日志存储到磁盘,并返回响应客户端。
每个 etcd 服务有三大主要部分组成:
- raft 实现
- WAL 日志存储:在本地磁盘(--data-dir)上存储日志内容(wal file)和快照(snapshot)
- 数据的存储和索引
etcd调用阶段:
- 阶段1:调用者调用leader,leader会将kv数据存储在日志中,并利用实时算法raft进行复制
- 阶段2:当复制给了N+1个节点后,本地提交,返回给客户端,最后leader异步通知follower完成通知
注意:日志只要复制给了大多数就不会丢。
raft日志概念:
- replication:日志在leader生成,向follower复制,最终达到各个节点日志序列一致
- term:任期,重新选举产生的leader,其term单调递增
- log index:日志行在日志序列的下标