什么是Zookeeper

Zookeepr的定位:
Zookeeper是一个分布式协调服务框架,,为分布式系统提供高效稳健的分布式协调服务,我们要如何理解zookeeper的定位呢?我们知道,各个分布式系统都有自己独特的商标,zookeeper的如下图,这是一个理解zookeep的小方法,之后会详细解释zookeeper的基础概念。

它可以解决分布式环境常见的问题:

Zookeeper基础概念:


1.Zookeeper有一个根节点 /
2.每一个节点叫做znode
3.每个znode节点都可以有自己的子节点
4.Zookeeper的所有操作,都是基于节点路径来操作的
5.多个znode节点共同形成一个znode树(整个Zookeeper存储的目录结构)
6.每个Znode节点都可以存储数据,但是不超过1M
7.znode的节点路径是唯一的,基于这个特性,可以做集群的统一命名服务,用路径来标识一台服务器
8.znode是维系于内存中的,即znode节点的数据也是存在内存中,目的是供用户快速查询。
9.不能利用Zookeeper存储海量数据,一是Zookeeper的使用场景是做分布式协调服务,二是基于内存存储,多台zk节点存储的是同一数据。
10.Zookeeper也提供了持久化机制,持久化的目录:zoo.cfg中的dataDir来决定
11.Zookeeper会为每个事务分配一个全局递增事务id
cZxid:创建节点的事务id
mZxid:修改节点的事务id
pZxid:此节点的子节点最新的事务id

12.Zookeeper有四种类型:
a.create /park01 创建普通节点
b.create -e /park01 创建临时节点 创建临时节点的客户端宕机(下线),它所创建的临时节点被删除,基于此特性,zookeeper可以管理集群中节点的服务状态。
c.create -s /park01 创建顺序节点
d.create -e -s /park01 创建临时顺序节点

Zookeeper选举机制

zookeeper的选举机制有两个阶段:
1.数据恢复阶段:每台zk服务器启动时,会从本地数据目录中,找到自己所拥有的最大事务id,即找到自己所拥有的最新事务。最大事务id:Zxid

2.选举阶段:每台zk服务器都会提交选举协议,推荐自己当leader。
选举协议(数据包)有以下内容:
a.自己拥有的最大事务id(Zxid)
b.自己的选举id(myid写的数字)
c.逻辑时钟值,作用是确保每台zk服务器在同一轮选举中
d.当前zk服务器的状态:
Looking 处于选举状态
Follower 处于追随者状态
Leader 处于领导者状态
Observer 处于观察者状态

3.zk主机竞选Leader的PK原则:
a.先比较Zxid,谁大谁当Leader,因为Zxid越大,事务越新。
b.如果Zxid比较不出来,就要比较选举id,谁大谁当leader。
注意:pk最基本的原则是要满足过半性。

Zookeeper的选举机制可以确保崩溃恢复,当leader挂掉后,如果集群数量满足过半性,就会从剩下的Follower选出新leader。

过半性的体现:
选举时要满足过半同意
zk服务集群要满足过半存活
搭建zk集群时最好使用奇数个主机

称为Leader的主机能做什么?

1.原子广播:确保所有的节点数据一致。即客户端节点无论从哪一台zk服务器读数据,数据都是一致的。
2.如果客户端发起的是事务请求,follower会将事务请求转交给leader,然后leader做原子广播确保数据一致性。

前面我们说道做原子广播是为了保持数据一致性,但它究竟是怎么做到数据一致的呢?我们来看两个关于保证数据一致性的算法。

保证数据一致性的算法

2PC算法:

2PC,是Two-Phase-Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议被认为是一种一致性协议,用来保证分布式系统数据的一致性。目前,绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便完成所有分布式事务参与者的协调,统一决定事务的提交或回滚,从而能够有效保障分布式数据一致性,因此二阶段提交协议被广泛应用于许多分布式系统中。


2PC的优点:原理简单,实现方便。
2PC的缺点:同步阻塞,单点问题,脑裂,太过保守。
如果一个集群管理中,出现两个leader或多个leader,称为脑裂现象。

什么叫同步阻塞?
在二阶段提交的执行过程中,所有参加该事物操作的逻辑都处于阻塞状态,也就是说各个参与者在等待其他参与者响应的过程中,将无法执行其他任何操作。

什么叫单点问题?
在上图中,协调者可能挂掉,而且没有崩溃恢复机制。那么整个二阶段提交流程无法运转。

Paxos算法:

Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一,其解决的问题就是在分布式系统中如何就某个值(决议)达成一致。在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)(也就是会发生异常的分布式系统)等情况。Paxos算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地在集群内部对某个数据的值达成一致。也可以理解成分布式系统中达成状态的一致性。

ZBA协议

1.概述:ZBA协议是分布式协调服务Zookeeper专门设计id一种支持崩溃恢复的原子广播协议,它是一种特别为Zookeeper设计的崩溃可恢复的原子消息广播算法。这个算法是一种类2PC算法,在2PC基础上做的改进
2.ZBA协议包括两种基本的模式,分别是:
消息原子广播(保证数据一致性)
崩溃恢复(解决2PC算法的单点问题)

3.协议流程(消息的原子广播)
a.有事务请求时,为此事务分配一个全局递增事务id,将事务写到本地事务log,由dataDir属性指定的目录,然后将事务广播出去。
b.Leader会为每一个follower生成一个对应的事务队列,由于是队列,满足FIFO原则,所以保证事务执行的顺序性。然后通过网络发送给follower。
c.然后follower执行发过来的事务,所谓的执行事务是指:将事务写到本地的事务log中,如果写入成功,即代表事务执行成功。
d.当follower执行成功后,向leader反馈yes信息。然后Leader接受各个follower反馈的事务执行状态,Zookeeper并没有像2PC算法等待所有的Follower的反馈,而是只要满足过半性,就发起事务的Commit。
e.当leader发出Commit请求后,Leader和Follower会做事务的提交,将服务器内存中的数据做改变,因为客户端是从zk服务器的内存中获取数据的。

Zookeeper的事务log

事务日志指zookeeper系统在正常运行过程中,针对所有的事务操作,而返回客户端“事务成功”的响应前,zookeeper会保证已经将本次更新操作的事务日志写在磁盘上。
zookeeper的事务日志为二进制文件不能通过vim等工具访问,可以通过zookeeper自带的jar包读取事务日志文件
查看事物log的命令:

java -classpath :slf4j-api-1.6.1.jar:zookeeper-3.4.6.jar
org.apache.zookeeper.server.LogFormatter ./log.000000001

这个./log.00000001是具体要查看的事务文件名,不同情况要做改变。

查看快照文件:

java -classpath :slf4j-api-1.6.1.jar:zookeeper-3.4.6.jar
org.apache.zookeeper.server.SnapshotFormatter ./snapshot.200000000

这个 ./snapshot.200000000 也是具体的文件。

Zookeeper观察者

虽然客户端直接连接到投票选举的zookeeper成员执行良好,但这个架构很难扩大到大量的客户端。问题就是我们添加了更多的投票成员,写入性能下降。这是由于这样的事实:一个写入操作要求共识协议至少是整体的一半,因此投票的成本随着投票者越多会显著增加。
我们引入一个新节点类型叫做observer(观察者),观察者不参与投票,它只监听投票的结果。除了这个简单的区别,观察者和follower一样运行,客户端可以连接他们且发送读取和写入请求。观察者像follower一样转发这些请求到Leader,而他们只是简单的等待监听投票结果。正因为如此,我们可以尽可能多的增加观察者的数量,而不影响投票的性能。
观察者还有其他优势,因为他们不投票,不是zookeeper整体的主要组件。因此他们可以故障,或者从集群中断开连接,而不影响zookeeper服务的可用性。

Zookeeper配置详解:

参数名 说明
clientPort 客户端连接server的端口,即对外服务端口,一般设置为2181
dataDir 存储快照文件snapshot的目录,默认情况下,事务日志也会存在这里
dataLogDir 事务日志输出目录
tickTime ZK中的一个时间单元,ZK中所以的时间都是以这个时间单元为基础进行整数倍配置的
initLimit Follower在启动过程中,会从leader同步最新数据,然后确定自己能够对外服务的起始状态。leader允许follower在initLimit时间内完成这个工作,如果zk集群数量很大,那么适当提高这个参数值
syncLimit 此配置表示,leader与follower之间发送消息,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower被丢弃。当集群网络环境不好,可以适当调大
minSessionTimeout和maxSessionTimeout Session超时时间限制,如果客户端设置的超时时间不在这个范围内,那么会被强制设置为最大或最小时间。
snapCount 每进行snapCount次事务日志输出后,触发一次快照,此时zk生成一个快照文件,同时创建一个新的事务日志文件,在产生新的leader时,也会产生新的快照文件。
autopurge.purgelnter和autopurge.snapRetainCount 3.4版本后,zk提供了自动清理事务文件和快照文件的功能,单位是小时
jute.maxbuffer 控制每个znode节点存入数据的大小,每个节点最大的默认数据量是1M

分布式协调服务——Zookeeper入门相关推荐

  1. 【架构】分布式协调服务-zookeeper

    前言      小编最近接触分布式的学习,对于分布式协调服务zookeeper有了一定的了解,现在简单地总结一下这块的知识.奉上一张导图: 分布式环境 一.特点 分布性.并发性.无序性 分布性:部署两 ...

  2. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  3. 详解分布式协调服务 ZooKeeper

    这篇文章主要会介绍 Zookeeper 的实现原理以及常见的应用 在 2006 年,Google 发表了一篇名为 The Chubby lock service for loosely-coupled ...

  4. ZooKeeper分布式应用程序的分布式协调服务:概述,入门,发布版本

    ZooKeeper概述适用于客户端开发人员,管理员和贡献者的技术概述文档 概述 -ZooKeeper的鸟瞰图,包括设计概念和体系结构 入门 -教程风格的指南,供开发人员安装,运行和编程到ZooKeep ...

  5. ZooKeeper:分布式应用程序的分布式协调服务

    ZooKeeper--动物园管理员 ZooKeeper:分布式应用程序的分布式协调服务 设计目标 数据模型和分层命名空间 节点和短暂节点 有条件的更新和手表 担保 简单的API 履行 用途 性能 可靠 ...

  6. 大数据技术:Zookeeper分布式协调服务

    1 Zookeeper概念简介 Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务 A.  zookeeper是为别的分布式程序进行服务的 B. zookeeper本身就是 ...

  7. zookeeper中展示所有节点_分布式协调服务之Zookeeper

    ??理论篇 一.基础概念 ZooKeeper是开源分布式协调服务,提供高可用.高性能.稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理. ...

  8. Zookeepr分布式协调服务之基础铺垫(大数据工程师工作笔记)

    01 Zookeeper 架构原理 1. 定义 ZooKeeper 在很多大企业里,已经证明了非常的稳定. ZooKeeper 是一种分布式应用所设计的高可用.高性能且一致的开源协调服务.它首先提供了 ...

  9. 分布式协调组件ZooKeeper的技术理论剖析-综合组件环境实战

    本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客.QQ邮箱地址:1120746959@q ...

最新文章

  1. 每天一道LeetCode-----计算小于n的素数个数
  2. JAVA面试常考系列三
  3. 十大笔记本品牌型号命名规则【三星、苹果、明基】
  4. 验证码——ImageIO.write的坑
  5. java.util.ArrayList#add探索
  6. Fultter之Element和Widget对应关系解析
  7. 回文数 详解(C++)
  8. 低代码平台表单引擎技术方案选型
  9. html5怎么把图片置顶,html/css如何让图片上下居中(居中垂直)?
  10. 生信分析电脑推荐_生信工程师的个人计算机配置推荐
  11. 首个单季度盈利,ARPU增速却持续下滑,拼多多已埋下未来隐忧
  12. 几道经典的面试题53
  13. 【设计指南】避免PCB板翘,合格的工程师都会这样设计!
  14. 【绘制】HTML5 Canvas绘画画板小项目:可编辑控制的贝塞尔曲线(可控制锚点和控制点的位置)
  15. 忍者必须死代码 免费
  16. SwiftUI 音乐和网络大全之网络音乐播放App支持iTunes搜索与播放(教程含源码)
  17. 0pyqt获取textEdit控件的文本
  18. python中一个等于号和两个等于号_Python中is与双等于号“==”的区别
  19. 【量化投资】量化投资技术基础 ---- Python 急速入门
  20. VS2019中字符串函数的使用

热门文章

  1. 粗同步 符号同步 matlab,OFDM系统在衰落信道中帧同步算法研究(毕业论文)
  2. css单元格固定宽度大小,超过部分使用省略号表示
  3. 玩客云刷linuxARMBIAN当服务器过程记录
  4. python抓取网页表格数据
  5. live2d_Live2D解锁丨SR羁绊复刻,生日定制服装上架!
  6. 2018年第一周APP黑马榜单
  7. CAN通信----电路图
  8. 【python】把Excel中的数据在页面中可视化
  9. Nginx-RTMP功能调研
  10. 秋水仙碱与牛血清白蛋白 (BSA)偶联物(相关实验)