Zookeeper小结

一、什么是Zookeeper

打开Apache zookeeper的官网,一句话定义zookeeper:Apache ZooKeeper致力于开发和维护可实现高度可靠的分布式协调的开源服务器

zookeeper是个服务,服务的对象我们都称为客户端,在大数据生态里面的客户,hadoop、hbase、hive…组件都是分布式部署,这些组件们利用zookeeper的服务做了一些维持自身平衡的事情,比如集群管理、master选举、消息发布订阅、数据存储、分布式锁等等。作为整个集群的心脏的存在,zookeeper本身也是分布式,只有在分布式的基础上才能实现高度可靠。

二、客户端命令操作

命令基本语法功能描述
help显示所有操作命令
ls path使用 ls 命令来查看当前znode的子节点
ls path-w 监听子节点变化
ls path-s 附加次级信息
create普通创建
create-s 含有序列
create-e 临时(重启或者超时消失)
get path获得节点的值
get path-w 监听节点内容变化
get path-s 附加次级信息
set设置节点的具体值
stat查看节点状态
delete删除节点
deleteall递归删除节点

三、ZAB协议

Zab(Zookeeper Atomic Broadcast)是为ZooKeeper协设计的崩溃恢复原⼦⼴播协议,它保证zookeeper集群数据的⼀致性和命令的全局有序性。

  1. 半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
  2. Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。

1. 选举流程

  1. 所有节点第一票先选举自己当leader,将投票信息广播出去
  2. 各个已启动节点从队列中接受投票信息
  3. 按照规则判断是否需要更改投票信息,将更改后的投票信息再次广播(各个节点比较ZXID,投事务版本最新的,如果ZXID一致就比较/opt/module/zookeeper-3.5.7/conf/zoo.cfg中dataDir配置路径下的myid)
  4. 判断是否有超过一半的投票选举同一个节点,在此之前自己的服务状态都是Looking,如果选举结束根据投票结果设置自己的服务状态(Leader 和 Follower),否则继续进入投票流程

2.写数据流程(广播)

在这里插入图片描述

  1. Client请求向Zookeeper的Server上写数据
  2. 如果Server不是Leader,那么Server会把接收到的请求进一步转发给Leader,通过Leader来进行选举,此时Leader会给请求附一个ZXID,然后Leader会将写请求广播给各个Server,各个Server会将该写请求加入待写队列,并向Leader发送成功信息
  3. 当Leader收到半数以上Server的成功信息,说明该写操作可以执行,Leader就会向各个Server发送提交信息,各个Server收到信息后会将待写队列中的数据写入
  4. 最后Server会通知Client数据写成功,此时就认为整个写操作成功

投票未通过的情况

  • 各个server通过写请求的ZXID与本机最新的ZXID作比较,如果本机ZXID小,投票通过,如果本机ZXID大,投票未通过(好马不吃回头草)。
  • 投票未通过的server,在Leader发送写请求时,发现自己未通过却还要执行写请求,此时已经知道本机数据已经和大部分机器上的数据不一致了,就会原地“自杀”,将自己重启,重启后更新数据,得到和已经执行完写请求的机器一样的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值