可靠的zk服务
- zk集群介绍
1.1. 可靠的zk服务
1.2. 只要集群的大多数都准备好了,就可以使用这项服务
1.3. 容错集群设置至少需要三个以上服务器
强烈建议使用奇数个服务器
1.4. 建议每个服务运行在单独的服务器 - zk集群搭建
2.1. initLimit
集群中follower(f)和leader完成初始化同步连接时,最多能容忍的心跳数(tickTime)
2.2. synLimit
followder和leader间请求和应答间最多能容忍的心跳数
2.3. 集群节点
server.id=host:port:port
id:通过在各自的dataDir目录创建一个名为myid的文件来为每台机器赋予一个服务器id。
两个端口号:第一个是用来连接到leader,第二个用来选举leader。
4
2.4. 创建myid文件
集群中唯一,1-255之间。一行只包含机器id的文本。 - zk集群监控
3.1. 四字监控命令
3.2. JMX - zk集群-zab协议
4.1. 崩溃恢复
4.1.1. leader服务器出现崩溃,就会进入崩溃恢复
4.1.2. zab协议规定,一个事务proposal在一台机器上被处理成功,那么应该
在所有机器上被处理成功
哪怕机器出现故障崩溃
4.1.3. 已在leader服务器上提交的事务,最终会在所有服务器上提交
4.1.4. 确保丢弃,只在leader服务器上提出的服务
4.2. 数据同步
4.2.1. leader选举出来后,需要和followers进行数据同步
5
当半数follows完成同步,即可开始提供服务
4.2.2. leader为followers服务器提供一个队列
并将没有被各followers同步的事务以proposal消息形式逐个发给follower,并在每个proposal消息后紧跟
着再发送一个commit消息,以表示该事务已经提交。
4.2.3. followers将所有事务同步过来,并应用到本地数据库后,leader才会把
该followers加入真正可用的列表
4.3. 丢弃事务proposal处理
4.3.1. zxid是64位的数字
4.3.2. 低32位,简单单调递增
每个事务请求,该数字+1
4.3.3. 高32位,代表leader周期纪元编号
每次选举出新的leader,会将老的zxid的高32位+1,将低32位置为0
4.4. 介绍
4.4.1. zookeeper atomic broadcast 原子广播消息协议
6
专门为zookeeper设置的数据一致性协议。
读请求可以被所有服务器处理。请求可以被所有服务器接受,但是都会转发到leader。
4.5. 协议过程说明
4.5.1. 所有事务请求转发给leader
4.5.2. leaser分配全局单调递增事务id,zxid,广播事务提议
4.5.3. follower处理提议,做出反馈
4.5.4. leader收到过反馈,广播commit
4.5.5. leader做出响应
4.6. 选举算法
4.6.1. 确保提交已被leader提交的事务proposal,同时丢弃已经被跳过的事务
4.6.2. 新leader拥有集群中最高zxid的事务proposal
以此保证新选举出的leader具有所有已经提交的提案
4.6.3. 让具有最高事务编号的服务器成为leader
即可省去leader服务器检查proposal的提交和丢弃工作这一步骤 - zk集群–leader选举
7
zk保证了cap理论的c一致性和p分区容错性,可用性有所牺牲
5.1. 机制概念
5.1.1. 服务器id,myid
5.1.2. 事务id,服务器中存放的最大zxid
5.1.3. 逻辑时钟
5.1.4. 选举状态
5.2. 选举算法
5.2.1. 自己投自己
5.2.2. 比较事务id,大投,相等比较服务器id
5.2.3. 收到票数大于集群数量半数则胜出
没有投出结果,则重新发起投票
5.3. 流程示例说明
5台服务器,1,2,3,4,5,按编号依次启动,选举流程如下:
1、服务器1启动,给自己投票,并发投票信息,由于其它机器还没启动所以收不到反馈信息,服务器1的状
态一直处于looking。
2、服务器2启动,给自己投票,同时与服务器1交换结果,由于服务器2编号大,所以服务器2胜出,但是票
数小于半数,状态依然是looking。
8
3、服务器3启动,给自己投票,同时与服务器1,2交互结果,由于服务器3编号大,胜出,服务器3的票数
大于半数,成为leader。服务器1,2成为小弟。
4、服务器4启动,由于3已经胜出,3只能做小弟。
5、服务器5启动,同服务器4的逻辑。
5.4. 简介
对选举算法的要求:
leader节点持有最高zxid
过半数节点同意
内置实现的选举算法:
LeaderElection
FastLeaderElection(默认)
AuthFastLeaderElection - zk集群-参数配置
6.1. 从官网学习
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_configuration