文档章节

Zookeeper原理介绍

星汉
 星汉
发布于 2018/04/27 13:17
字数 1717
阅读 518
收藏 0

 

Zookeeper原理介绍

一、概述

    Zookeeper是一个工具,可以实现集群中的分布式协调服务。

    所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工作。

    Zookeeper之所以能够实现分布式协调服务,靠的就是它能够保证分布式数据一致性。

    所谓的分布式数据一致性,指的就是可以在集群中保证数据传递的一致。

    Zookeeper能够提供的分布式协调服务包括:数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁、分布式队列等功能

1、Zookeeper的特点

    Zookeeper工作在集群中,对集群提供分布式协调服务,它提供的分布式协调服务具有如下的特点:

1.顺序一致性

    从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中

2.原子性

    所有事物请求的处理结果在整个集群中所有机器上的应用情况是一致的,即,要么整个集群中所有机器都成功应用了某一事务,要么都没有应用,一定不会出现集群中部分机器应用了改事务,另外一部分没有应用的情况。

3.单一视图

    无论客户端连接的是哪个zookeeper服务器,其看到的服务端数据模型都是一致的。

4.可靠性

    一旦服务端成功的应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会一直保留下来,除非有另一个事务又对其进行了改变。

5.实时性

    zookeeper并不是一种强一致性,只能保证顺序一致性和最终一致性,只能称为达到了伪实时性。

二、数据模型

    zookeeper中可以保存数据,正是利用zookeeper可以保存数据这一特点,我们的集群通过在zookeeper里存取数据来进行消息的传递。

1、数据结构

    zookeeper中保存数据的结构非常类似于文件系统。都是由节点组成的树形结构。不同的是文件系统是由文件夹和文件来组成的树,而zookeeper中是由ZNODE来组成的树。

    每一个ZNODE里都可以存放一段数据,ZNODE下还可以挂载零个或多个子ZNODE节点,从而组成一个树形结构。

2、数据模型分类

    节点有顺序节点、普通节点、临时节点和持久节点,四种交叉产生以下四种实际节点类型。

  顺序节点 普通节点
临时节点 顺序临时节点 普通临时节点
持久节点 数序持久节点 普通持久节点

    顺序节点:指定叫什么,除了前缀是指定的名字外,在名字后会会自带一个独一无二自动增长的的编号。

    普通节点:指定叫什么就叫什么。

    临时节点:一个客户端连接创建的临时节点,会在当客户端会话结束时立即自动删除。

    持久节点:创建出来后只要不删除就不会消失,无论客户端是否连接。

三、zookeeper原理

    zookeeper为了保证可靠性,不能用一台机器,而应该是一个集群。

    为了保证zookeeper集群数据能够一致,必须有一个拍板说了算的人,这就是leader,其他的是follower。某一时刻集群里只能有且仅有一个leader。leader可以执行增删改和查询操作,而follower只能进行查询操作。所有的更新操作都会被转交给leader来处理,leader批准的任务,再发送给follower去执行来保证和leader的一致性。

    由于网络是不稳定的,为了保证执行顺序的一致,所有的任务都会被赋予一个唯一的顺序的编号,一定是按照这个编号来执行任务,保证任务顺序的一致性。

    那么什么时候leader可以认为一个客户端的请求可以算是处理成功了呢?

    如果只有leader或少数机器来认可这个任务,则leader和这些少量机器如果挂掉,则选出来的新的leader并不知道之前批准过的这个任务,最终会违反数据的可靠性。所以要求leader在批准一个任务之前应该保证集群里大部分的机器应该是知道这个提案的,这样即使自己挂掉,根据过半同意选出来的leader肯定是知道这个提案的。而如果leader一定要等到所有follower都同意才执行提案也不好,因为如果有一个机器挂掉,leader就无法工作,也相当于单节点了,无法保证集群可靠性。所以,只要过半通过leader就可以认为一个提案通过。所以,leader在收到客户端提交过来的任务后,会向集群中所有的follower发送提案等待follower的投票,follower们收到这个提议后,会进行投票,同意或者不同意,leader会回收follower的投票,一旦收到过半的投票表示同意,则leader认为这个提案通过,再发送命令要求所有的follower都进行这个提案中的任务。

    因为采用过半同意机制,所以最极端的情况下集群中有过半的机器知道最新提案,而如果过半的机器挂掉,则剩下的机器可能不知道最新提案,则无法保证新选出的leader知道最新提案,所以zookeeper中,集群的及其至少要保证过半的存活才能才能正常工作。

    总结:

    zookeeper集群使用了过半选举投票机制,所以必须保证过半存活才能工作,zookeeper的集群中的机器数量最好应该是奇数个,因为需要过半存活集群才能工作,所以偶数个机器提供的集群可靠性其实和偶数-1个机器提供的集群可靠性是一样的。

    leader选举的问题:

    最开始集群启动时,会选择最先达到过半条件的机器作为leader。

    当leader挂掉后,会通过过半投票选出具有最高任务编号的机器成为新的leader。如果有相同的任务编号,那么在配置文件中,谁的serverid大谁为leader。

    未完待续…………!

    上一篇:Zookeeper集群的搭建

    下一篇:Hadoop简介

© 著作权归作者所有

星汉

星汉

粉丝 45
博文 106
码字总数 302232
作品 0
朝阳
高级程序员
私信 提问
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0
大数据教程(3.8):zookeeper的java客户端API简介及监听原理

之前章节介绍了zookeeper集群的自动化启动脚本,本节博主将带大家简单的使用zookeeper的java客户端API,从而了解其使用。 zookeeper监听器原理: zookeeper使用步骤: (1)新建maven项目em-...

em_aaron
2018/08/05
74
0
ZooKeeper 实现分布式锁

ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master 选举、分布式锁等功能。 节点 ...

BeckJin
06/16
0
0
大数据教程(3.4):zookeeper集群角色分配原理

一、zookeeper角色概念 zookeeper集群中有三种角色(zookeeper服务器节点),它们分别是:群首(leader),追随者(follower),观察者(observer)。由于观察者这种节点我们工作中基本不会接...

em_aaron
2018/07/29
99
0
[ZooKeeper]基于Java API 实践

前提 建立maven项目中 要导入zookeeper的依赖 我们同时可以打开linux中的zookeeper客户端来验证对比。输入 zkCli.sh 便可以进入zookeeper客户端 。 一、建立连接 直接建立连接后,不进行等待...

瑾兰
2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
28分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
29分钟前
3
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
30分钟前
4
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
33分钟前
4
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部