etcd

1,将数据存储在集群中的高可用的K-V存储

2,允许应用实时监听存储中的K-V变化

3,能够容忍单点故障 能够应对网络分区

原理:

上图5个节点的集群

2N+1   5个节点的集群大多数是N+1  3个节点 只要有3个节点能被赋值,那么这个日志就能被提交,不会被丢失

1-7日志是成功被提交的日志,8是失败的

上图由7个节点组成的raft节点  大多数为zn+1=7  n+1=4大多数为4

1,第一任村长为f节点而且成功赋值给了其它节点,接着down机了,然后马上重启,因为leader重启了,所以重新选举

a-f看谁运气好了,每个节点都有3个编码为1的日志,任一节点都可能成为leader,

2,从图可以看出f运气比较好第二次又被选为村长了

此时f得到3编码为2的3条日志但是马上又挂掉了,接着又重启收到编码为3的5条日志又挂了

此时f节点虽然日志多 但是成功提交的和其它节点是一样的多 编码为1的  2 ,3 没有成功提交

3,编码为4的日志可以看出e为编码为4的节点,而且成功复制了2条日志给其它节点,此时e又down机了

。。。。。。。。。。。。不一一分析了。。。。。有兴趣的可以继续分析。。。。

总结:

leader在down机重启后发现 已经有了新的leader 此时会拉取到新的数据发现 该数据是大多数节点认可的,就会覆盖本地的

 

 

 

 

实战任务:

*搭建单机etcd 熟悉命令行操作

*golang调用etcd的put/get/delete/lease/watch

*使用txn事务功能 实现分布式乐观锁

原文地址:https://www.cnblogs.com/sunlong88/p/11294817.html