Zookeeper技术内幕二

Posted 大数据DL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper技术内幕二相关的知识,希望对你有一定的参考价值。

一、选举Leader

二、会话

三、数据初始化

四、数据同步


一、选举Leader

首先选举leader时候存在的几种服务器状态 (注:选举期间所有节点都处于  looking状态)。

选举的基本术语:

Zookeeper技术内幕二

Zookeeper技术内幕二

这个就是为什么zookeeper集群是单数的原因

首先:follower可以参与选举

发起的选举数据格式是:(myid,zxid),他们先给自己投一票 ,然后发给其它节点机器,其它的节点机器接收到这个信息,进行pk投票,规则如下

Zookeeper技术内幕二

pk下来然后把比自己大的发送给其它节点,就是等于投了一票,每个节点都统计别人投自己票数 , 如果超过一半投票,就给其它机器发送暂停投票,然后宣布自己成为 leader改变状态成leading (zab里面状态),其它follower状态就是(following),如果服务器是运行期间leader挂掉了,一开始所有的follower改状态成looking,然后进行投票。类似上面投票机制。主要是pk机制,半数以上同意。

二、会话

在zookeeper中客户端成功连接服务端就会生成一个会话。会话有几个状态:连接成功, 连接超时重试,关闭连接。当去创建一个会话的时候,服务端会生成一个sessionid,timeout,isclose并保存在服务端的 zkdatabase中,sessionid是全局唯一的来表示唯一的一个会话,如果发起一个事物还会生成自增zxid。zxid来顺序执行事物。服务器对于会话会分桶管理,根据预计下次超时时间相同的会话分桶在一块 。

Zookeeper技术内幕二

相同的超时时间的会话分在一个桶里管理,也就是分区

超时判断:服务器是根据心跳来判断会话是否超时,当客户端 发起 读 写 更新 等命令时就是一个心跳 ,如果没有执行这些命令, 客户端会自己主动去发送 心跳 ,告诉服务端会话还有效 ,服务端不断去激活会话。心跳时间: timeout/3。如果会话超时,服务端标记为已经关闭,进行清理,包括临时的数据节点。重新连接的要求是在超时之内,如果客户端连接上服务端其中一台会话还是有效的。

三、数据初始化:zk是树结构, 并且保存的数据在内存中,zk 并且会记录操作日志、 内存数据,并且定时snapshot到硬盘上进行数据快照。当集群启动的时候,进行数据初始化。首先读取磁盘上快照到内存中,然后找最大zxid,加载日志内存中,对比快照中的zxid和日志中zxid。如果日志zxid较大,把内存中的数据进行日志操作, 改变其zxid成为最大zxid

四、数据同步:数据同步就是follower去leader上同步数据,因为leader一个提议只需要 n/2+1,所以还有一些机器没收到 (就是没有投票给leader的follower),这些没收到的发起一个请求去同步数据

同步分两种一种是差异同步 一种是 全量同步

了解概念:

Zookeeper技术内幕二

Zookeeper技术内幕二

    


以上是关于Zookeeper技术内幕二的主要内容,如果未能解决你的问题,请参考以下文章

Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源代码实现

Storm技术内幕与大数据实践

Storm技术内幕与大数据实践

kafra技术内幕:消费者初始化(scala)

深入剖析全链路灰度技术内幕

Hadoop技术内幕:深入解析YARN架构设计与实现原理pdf