Zookeeper技术内幕二
Posted 大数据DL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper技术内幕二相关的知识,希望对你有一定的参考价值。
一、选举Leader
二、会话
三、数据初始化
四、数据同步
一、选举Leader
首先选举leader时候存在的几种服务器状态 (注:选举期间所有节点都处于 looking状态)。
选举的基本术语:
这个就是为什么zookeeper集群是单数的原因
首先:follower可以参与选举
发起的选举数据格式是:(myid,zxid),他们先给自己投一票 ,然后发给其它节点机器,其它的节点机器接收到这个信息,进行pk投票,规则如下
pk下来然后把比自己大的发送给其它节点,就是等于投了一票,每个节点都统计别人投自己票数 , 如果超过一半投票,就给其它机器发送暂停投票,然后宣布自己成为 leader改变状态成leading (zab里面状态),其它follower状态就是(following),如果服务器是运行期间leader挂掉了,一开始所有的follower改状态成looking,然后进行投票。类似上面投票机制。主要是pk机制,半数以上同意。
二、会话
在zookeeper中客户端成功连接服务端就会生成一个会话。会话有几个状态:连接成功, 连接超时重试,关闭连接。当去创建一个会话的时候,服务端会生成一个sessionid,timeout,isclose并保存在服务端的 zkdatabase中,sessionid是全局唯一的来表示唯一的一个会话,如果发起一个事物还会生成自增zxid。zxid来顺序执行事物。服务器对于会话会分桶管理,根据预计下次超时时间相同的会话分桶在一块 。
相同的超时时间的会话分在一个桶里管理,也就是分区
超时判断:服务器是根据心跳来判断会话是否超时,当客户端 发起 读 写 更新 等命令时就是一个心跳 ,如果没有执行这些命令, 客户端会自己主动去发送 心跳 ,告诉服务端会话还有效 ,服务端不断去激活会话。心跳时间: timeout/3。如果会话超时,服务端标记为已经关闭,进行清理,包括临时的数据节点。重新连接的要求是在超时之内,如果客户端连接上服务端其中一台会话还是有效的。
三、数据初始化:zk是树结构, 并且保存的数据在内存中,zk 并且会记录操作日志、 内存数据,并且定时snapshot到硬盘上进行数据快照。当集群启动的时候,进行数据初始化。首先读取磁盘上快照到内存中,然后找最大zxid,加载日志内存中,对比快照中的zxid和日志中zxid。如果日志zxid较大,把内存中的数据进行日志操作, 改变其zxid成为最大zxid
四、数据同步:数据同步就是follower去leader上同步数据,因为leader一个提议只需要 n/2+1,所以还有一些机器没收到 (就是没有投票给leader的follower),这些没收到的发起一个请求去同步数据
同步分两种一种是差异同步 一种是 全量同步
了解概念:
以上是关于Zookeeper技术内幕二的主要内容,如果未能解决你的问题,请参考以下文章