Zookeeper内部原理

目录

一、ZooKeeper的选举机制

 1.举例说明1

2. 举例说明2

二、ZooKeeper的监听原理

1、监听原理详解:

2、常见的监听

三、ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?

四、一般情况下ZK集群更推荐使用奇数台机器原因?

五、ZK的写数据流程

      六、 ZooKeeper的常用命令


一、ZooKeeper的选举机制

   集群中的每台机器都参与投票,通过交换选票得到每台机器的最终得票,
   一旦出现得票数超过机器总数一半以上数量,当前机器即为leader。


 1.举例说明1


场景:以5台机器为例,集群的机器顺时启动,当前集群中没有任何数据。
    
①. server1 启动,首先server1给自己投一票,然后看当前票数是否超过半数,结果没有超过,
   这时候leader就没选出来,当前选举状态是locking状态
②. server2 启动,首先server2先给自己投一票,因为当前集群已经有两台机器已启动,所以server1,server2会交换选票,交换后发现各自有一票,接下来比较myid 发现server2的myid值 > server2的myid值此时server2胜出,最后server2有两票。最后再看当前票数是否半,发现未过半,集群的选举状态保持locking状态。        
③. server3启动, 首先自己投自己一票,server1和server2也会投自己一票,然后交换选票发现都一样,接着比较myid 最后server3胜出,此时server3就有3票,同时server3的票数超过半数。所以server3成为leader
④. server4启动,发现当前集群已经有leader 它自己自动成为follower
⑤. server5启动,发现当前集群已经有leader 它自己自动成为follower


2. 举例说明2


场景:以5台机器为例,当前集群正在使用(有数据/没数据),leader突然宕机的情况。
           
           当集群中的leader挂掉,集群会重新选出一个leader,此时首先会比较每一台机器的czxid,
czxid最大的被选为leader。极端情况,czxid都相等的情况,那么就会直接比较myid。

(czxid:表明最后文件同步时间,越往后越大)


二、ZooKeeper的监听原理

1、监听原理详解:


1)首先要有一个main()线程
2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信( connet) ,一个负责监听( listener) 。
3)通过connect线程将注册的监听事件发送给Zookeeper。
4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
5) Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
6) listener线程内部调用了procesO0方法。

2、常见的监听

监听节点数据的变化监听子节点增减的变化
get path [watch]ls path [watch]

三、ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?

(1)部署方式单机模式、集群模式

(2)角色:Leader和Follower

(3)集群最少需要机器数:3


四、一般情况下ZK集群更推荐使用奇数台机器原因?

        在ZK集群中 奇数台 和 偶数台(接近的台数) 机器的容错能力是一样的,所以在考虑资源节省的情况,我们推荐使用奇数台方案
 


五、ZK的写数据流程


    1. 客户端会向ZK集群中的一台机器server1发送写数据的请求。
    2. server1接收到请求后,马上会通知leader 有写数据的请求来了
    3. leader拿到请求后,进行广播,让集群每一台机器都准备要写数据
    4. 集群中的所有机机器接收到leader广播后都回应一下leader
    5. leader再次进行广播 开始写数据,其他机器接收到广播后也开始写数据
    6. 数据成功写入后,回应leader,最后由leader来做整个事务提交
    7. 当数据成功写入后,有最初和客户端发生连接的 server1 回应客户端数据写入成功。

六、 ZooKeeper的常用命令

ls        create        get        delete        set        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值