美文网首页程序员
zookeeper核心原理

zookeeper核心原理

作者: 上岸之路 | 来源:发表于2018-09-29 09:33 被阅读46次

一、zookeeper设计猜想

问题的引出(缺少分布式协调机制)

利用zookeeper特性,三个服务都在zookeeper上注册节点,最小的节点具有优先权,让它执行其他两个不让他执行

假如zookeeper成我们项目中的核心,那么zookeeper势必会带来高可用高性能的一些挑战

设计猜想

1.防止单点故障

    集群方案(leader,follower),还能分担请求

2.每个节点数据一致的(必须要有leader)

    leader ,master

3.leader挂了怎么办?数据如何恢复

    选举机制?数据恢复?

4.如何保证数据一致性?(分布式事务)

   2PC协议(二阶提交)

结论

1.zab来实现选举

2.为什么要做集群

3.2pc做数据一致性

二、zookeeper集群角色

改进版2pc不需要全部角色同意

所以集群中必须存在2n+1各节点保证投票正常进行

三、深入分析zab协议

支持崩溃恢复的原子广播协议,主要实现数据一致性

崩溃恢复

1.当leader失去国办的follower节点的联系

2.leader挂掉

集群就会进入崩溃恢复的阶段

对于数据恢复来说

1.已经处理的数据不能丢失

当leader收到合法数量follower的ack以后,就会向哥哥follower广播消息(commit命令),同时自己也会commit这条事务的消息。如果follower节点收到commit命令之前leader挂了,会导致部分节点收到commit消息,部分节点没有收到。那么zab协议需要保证已经处理的消息不能丢失

2.被丢弃的消息不能再次出现

当leader收到事务请求,并且还未发起投票请求之前,leader挂了。

zab的设计思想

1.zxid是最大的,保证消息是最新的(64位数据)

2.epoch的概念

每产生一个新的leader新的leader的epoch会在原来的基础上加1

现在我们把leader停掉,会选出新的leader查看epoch会再上一个leader基础上加1

事务日志的查看

消息广播

改进版本的2pc

leader收到事务请求后,会给这个消息赋予一个zxid(64位自增id)

leader将带有zxid的消息作为一个propose(提案)分发给集群中的每一个follower节点

follower节点把propose这个事务写入磁盘

写入成功后返回一个ack给leader

当leader受到合法数量(过半数)的ack后发起commit请求

广播过程投票不需要observer的参与

leader选举

fast leader

zxid最大会设置成leader(事务id)事务id最大表示数据最新

epoch(每一轮投票都会递增)

myid(服务器id,sid)

myid越大,在leader选举中权重最大

选举状态(looking)

leading

following

observing

启动时初始化

每个节点会将myid zxid epoch发布给集群中的每一个节点,每个节点收到信息后会进行投票比较这些数据

1.检查zxid如果zxid比较大就会投给这个节点

2.如果zxid一样(刚启动时)就会比较myid,myid比较大的会作为leader

3.更新epoch

两种情况下回选取leader

第一种启动时

第二种leader崩溃时

四、从源码分析leader选举实现过程

五、关于zookeeper数据存储

相关文章

网友评论

    本文标题:zookeeper核心原理

    本文链接:https://www.haomeiwen.com/subject/kmtknftx.html