zookeeper

zookeeper翻译成中文就是动物园管理员

非常形象,hadoop的图标是个大象,hive是个蜜蜂,pig是个猪

zookeeper就是管理这些动物的管理员,负责统筹这些框架

起到一个非常重要的作用

工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在Zookeeper上注册的那些观察 者做出相应的反应。

特点

1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。

5)数据更新原子性,一次数据更新要么成功,要么失败。

6)实时性,在一定时间范围内,Client能读到最新数据。

数据储存方式就是一棵树,每个节点就是一个ZNode,每个ZNode内部可以存储1mb的数据,数据存储量比较少,可以看出zookeeper并不是一个存储型的框架,其中每个节点都可以通过路径达到唯一标识,这一点非常重要。

可应用于的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下
线、软负载均衡等。

选举机制

我们都知道zookeeper是可以组集群的,既然是集群,肯定要有一个领导者,也就是统筹的那台机器,那么zookeeper是如何决定哪一台集群的呢

这时候分为两种情况

在讲选举规则的时候我们需要了解zookeeper内部的各种编号

SID:服务器ID。用来唯一标识一台 ZooKeeper集群中的机器,每台机器不能重复,和myid一致。

ZXID:事务ID。ZXID是一个事务ID,用来 标识一次服务器状态的变更。在某一时刻, 集群中的每台机器的ZXID值不一定完全一 致,这和ZooKeeper服务器对于客户端“更 新请求”的处理逻辑有关。

Epoch:每个Leader任期的代号。没有 Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加,就是每选举一次epoch就会增加。这个值从0开始递增,每次选举对应一个值,也就是说: 如果在同一次选举中,那么这个值应该是一致的 逻辑时钟值越大,说明这一次选举leader的进程更新

第一次启动集群选举机制

就举例有5台集群的情况,机器1 zid1 机器2 zid2 机器3 zid3 机器4 zid4 机器5 zid5

首先启动第一台机器,机器1给自己投了一票,目前集群存活集群只有一台,未超过半数,未选出Leader,保持LOOKING状态

启动第二台机器,两台机器各位自己投一票,但机器1发现自己的zid小于机器2,于是机器1改给机器2投票,机器2两票,依然没有超过半数,所以保持LOOKING状态

启动第三台机器,两台机器都会投给zid比自己大的机器3,机器3得票3超过半数,成功当选leader机器1和机器2更改状态为FOLLOWING,机器3状态为LEADING

启动第四台机器,因为机器1和机器2已经是FOLLOWING状态不会更改选票继续投给3,所以机器4选票会继续投给3,机器4更改状态为FOLLOWING

第五台同四

所以在第一次选举的情况下,leader会给集群集群zid超过半数的第一台,也就是一旦选出leader就不会更改。

非第一次启动集群选举机制

什么时候会发生非第一选举

在集群运行期间某一台集群发生下列情况的时候就会触法非第一选举

• 服务器初始化启动。

• 服务器运行期间Leader挂了。

选举规则如下

①EPOCH大的直接胜出

②EPOCH相同,事务id大的胜出

③事务id相同,服务器id大的胜出

举例就略了整体没有难度,就按照上述标准来判断即可。

整个选举机制非常复杂,其中zxid的在某一时刻会不同,注意只是在某一时刻,会同步的哦,因为事务zxid是递增的,zxid大那么就说明当时这台机的数据最新,那么选举它同步不会丢失数据。


以上就是zookeeper的一些运行细节,止于表层总结,如果有误还请评论指出

图片介绍来源于尚硅谷,加以总结

如有侵权,联系删

zookeeper的基本介绍及选举机制相关推荐

  1. Zookeeper的介绍和选举机制

    1.什么是zookeeper 英文文献来自官网,中文用google翻译 ZooKeeper is a centralized service for maintaining configuration ...

  2. 循序渐进大数据组件之--【Zookeeper 03】进阶(选举机制以及ZBA协议)

    目录 一.选举机制 1.概述 2.选举信息包含: 3.比较原则: 二.ZAB协议 2.1.原子广播

  3. 分布式开发必须了解的Zookeeper的Leader选举机制(源码解析)

    分布式开发必须知道的Zookeeper知识及其的Leader选举机制(ZAB原子广播协议)   ZooKeeper是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括 ...

  4. zookeeper的Leader选举机制详解

    转载自:https://www.toutiao.com/i6701570306445672963/?tt_from=copy_link&utm_campaign=client_share&am ...

  5. Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)

    Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...

  6. zookeeper leader选举机制

    最近看了下zookeeper的源码,先整理下leader选举机制 先看几个关键数据结构和函数 服务可能处于的状态,从名字应该很好理解 public enum ServerState {LOOKING, ...

  7. Zookeeper的选举机制详解

    本文来说下Zookeeper的选举机制 文章目录 概述 人类选举的基本原理 Zookeeper选举的基本原理 什么场景下 Zookeeper 需要选举 启动时期的 Leader 选举 运行时期的Lea ...

  8. ZooKeeper学习总结(4)——Zookeeper选举机制总结

    Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等.我们可以简单把 Zookeeper 理解为 ...

  9. 终于搞懂了,用大白话给你解释Zookeeper的选举机制,包教会

     号外号外!<死磕 Java 并发编程>系列连载中,大家可以关注一波: 「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁 「死磕 Java 并发编程04」 ...

最新文章

  1. vb获得mysql的值,VB.NET调用MySQL存储过程并获得返回值的方法
  2. 【PHP】微信官方代码Log调试输出类,面向对象设计模式!来看看,你会有收益!...
  3. Windows Phone 7中用好Silverlig“.NET研究”ht开发利器
  4. 记一次小型生产事故 | BeyondComper跨编码方式复制文件内容
  5. 在ubuntu上如何将多张图片或PDF合到一个PDF上
  6. linux list 添加失败,linux运维实战案例之Argument list too long错误与解决方法
  7. python缩进注意事项_python注意事项
  8. viewController详解
  9. Android AutoCompleteTextView自动提示文本框
  10. golang return要返回的参数太多_Golang中的Defer必掌握的7知识点
  11. VSCode - Beautify 插件配置
  12. logistic回归 简介_从零实现机器学习算法(四)Logistic回归
  13. java基本运算方法总结(ing)
  14. [转载]SELinux安全系统基础
  15. SignalR主动通知订阅者示例
  16. css权重机制,CSS权重及其计算
  17. 面试必背 Java 多线程面试题
  18. Java之XML转Json
  19. 高级会计职称计算机考什么,会计高级职称考哪些科目
  20. vue 打包出现的问题解决

热门文章

  1. SQL SERVER存储过程AS和GO的含义
  2. csb反编译_云服务软件
  3. 如何快速爬取B站全站视频信息
  4. 中国工商银行成都市区营业网点分布一览表
  5. PHP根据经纬度获取日出日落时间信息
  6. 三坐标检测之测量同心度时要注意的问题
  7. 天天基金股票数据爬取
  8. Hdu 1174 爆头 计算几何问题
  9. Android编程的写法规范
  10. 链式存储结构的直接插入排序