Zookeeper

每一个专业的技术总可以在生活中找到相应的实例,就比如说zookeeper,攘其外必先安其内就很好的解释了zookeeper,Hadoop集群的组件中的很多在学习的时候都会觉得每一个都不稳定,都会出现这样那样的问题,会常常听到的一个词语就是高可用,在zookeeper的官方定义的时候在集群出现故障到解决故障正常执行的间隔时间小于200ms,在我们看来就是整个集群一直可用的错觉

我们以HDFS为例子先解释一下zookeeper,在开机时,两个namenode只有一个处于存活状态,每一个namenode伴随着有一个zkfc存在,zkfc一边连接namenode,另一边是zookeeper集群,当开机后,zkfc会争先去zookeeper中创建一个节点,谁先创建就可以启动并创建一个节点进行监控、注册等,节点的变化会产生一个事件,当一个namenode出现异常挂掉之后会产生一个事件,事件会向节点去注册,然后节点会回调存活的namenode并启动,挂掉的namenode处于等待状态,所以说zookeeper就是一个协调服务

Zookeeper的构成

领导者(leader)

进行投票的发起和决议,更新系统状态

学习者

(leaener)

跟随者

(follower)

接受客户端的请求并返回结果,选举过程中参与投票

观察者

(observer)

接收客户端的连接,将写请求转发给leader节点,不参与投票,只同步leader的状态

客户端(Client)

请求发起方

Leader主要有三个功能:

1 .恢复数据;

2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型;

3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。

Observer的目的是为了扩展系统,提高读取速度

Follower主要有四个功能:

1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);

2 .接收Leader消息并进行处理;

3 .接收Client的请求,如果为写请求,发送给Leader进行投票;

4 .返回Client结果。

Zookeeper 的特性:

单一视图 为客户展现同一个视图,即使因为挂机或者其他原因造成版本低等现象,但是当重新连接之后数据版本等信息会进行更新,最终达到一致性的特点

可靠性 如果消息被一台服务器接受,那么它将被所有的服务器接收

实时性 不能保证两个客户端同时得到刚更新的数据

独立性 各个Client之间互不干预

原子性 更新只能成功或者失败,没有中间状态

顺序性 所有Server,同一消息发布顺序一致

Zookeeper的基本运行流程:

Client将一条请求写入到zookeeper集群中

Follower将请求转发给leader,然后leader将请求转发给集群中的节点,投票表决

因为zookeeper集群的原子性,所以会有两个过程,首先投票表决是否可以进行这个请求操作,如果过半的节点同意进行这个请求,那么,进行下一步,将请求发送到各个节点上进行处理,这也就保证了只会有成功和失败两种状态,不会出现中间状态

当过半的节点(不同意的节点可能因为挂机或者其他原因失去联系)同意并且执行完毕之后,zookeeper会恢复所有的节点之间的通信,这个时候会将数据进行同步处理,达到整个集群中的数据的一致性

Zookeeper的核心是原子广播,(但client发送请求将hello写入到集群中时,节点会投票选择是否同意这个请求,当同意之后,leader会将hello更新到所有的节点上),保证了各个server之间的同步,实现协议是zab协议

Zab协议包括

恢复模式:leader挂掉了,需要重新选举leader或者当服务刚刚启动还没有产生leader的时候

广播模式:产生leader之后,集群处于主从结构之后的模式

而对于为产生leader之前的恢复模式,他在选举leader的时候有一套他自己的算法机制

Zookeeper内部选举算法:

当客户端提交请求之后 或者当集群刚启动的时候,zookeeper会进行投票的行为,投票选举出来在大家之中最适合成为领导者的那个节点,让他领导其余的节点,投票不是一轮既可以完成的,因为总有得票数相同的节点出现,素以需要进行多轮投票,直到选出那唯一的一个,,在每一轮投票结束之后会将投票信息发送到所有的节点上,这些信息包括:服务器ID,数据ID,逻辑时钟,选举状态(LOOKING,竞选状态。 FOLLOWING,随从状态,同步leader状态,参与投票。OBSERVING,观察状态,同步leader状态,不参与投票。LEADING,领导者状态)在每一轮的投票中不断的更新这些数据,最后可以得到一个的票数最多的节点,他就是众望所归的leader

具体的投票执行流程:

(1) 变更状态。Leader挂后,余下的非Observer服务器都会讲自己的服务器状态变更为LOOKING,然后开始进入Leader选举过程。

  (2) 每个Server会发出一个投票。在运行期间,每个服务器上的ZXID可能不同,此时假定Server1的ZXID为3,Server3的ZXID为2;在第一轮投票中,Server1和Server3都会投自己,产生投票(1, 123),(3, 122),然后各自将投票发送给集群中所有机器。

  (3) 接收来自各个服务器的投票。与启动时过程相同。

  (4) 处理投票。与启动时过程相同,此时,Server1将会成为Leader。

  (5) 统计投票。与启动时过程相同。

  (6) 改变服务器的状态。与启动时过程相同

Hadoop==zookeeper的更多相关文章

  1. 安装hadoop+zookeeper ha

    安装hadoop+zookeeper ha 前期工作配置好网络和主机名和关闭防火墙 chkconfig iptables off //关闭防火墙 1.安装好java并配置好相关变量 (/etc/pro ...

  2. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  3. HA分布式集群一hadoop+zookeeper

    一:HA分布式配置的优势: 1,防止由于一台namenode挂掉,集群失败的情形 2,适合工业生产的需求 二:HA安装步骤: 1,安装虚拟机 1,型号:VMware_workstation_full_ ...

  4. hadoop+zookeeper+hbase分布式安装

    前期服务器配置 修改/etc/hosts文件,添加以下信息(如果正常IP) 119.23.163.113 master 120.79.116.198 slave1 120.79.116.23 slav ...

  5. hadoop+zookeeper集群高可用搭建

                                                                  hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...

  6. Hadoop-HA 搭建高可用集群Hadoop Zookeeper

    Hadoop Zookeeper 搭建(一) 一.准备工作 VMWARE虚拟机 CentOS 7 系统 虚拟机1:master 虚拟机2:node1 虚拟机3:node2 时间同步 ntpdate n ...

  7. hadoop +zookeeper + hbase 单节点安装

    项目描述: 今天花了680元买了阿里云的一台内存1G, 带宽1M 的云主机. 想以后方便测试用,而且想把自己的博客签到自己的主机上.所以自己就搭了一个测试的环境. 可以用来进行基本的hbase 入库, ...

  8. hadoop生态圈安装详解(hadoop+zookeeper+hbase+pig+hive)

    -------------------------------------------------------------------* 目录 * I   hadoop分布式安装   * II zoo ...

  9. Hadoop zookeeper hbase spark phoenix (HA)搭建过程

    环境介绍: 系统:centos7 软件包: apache-phoenix-4.14.0-HBase-1.4-bin.tar.gz  下载链接:http://mirror.bit.edu.cn/apac ...

随机推荐

  1. CompletionService的poll方法

    1.poll():马上返回完成的任务,若没有,则返回null 2.poll(long timeout, TimeUnit unit): 等待timeout时间,如果大于最短任务完成时间,则获取任务结果 ...

  2. mysql 5.7版本如何修改密码

    这是官方截图,mysql5.7安装后,会有一个默认密码,保存在mysql.log里面,找的他,并更改 官方文档地址 https://dev.mysql.com/doc/refman/5.7/en/li ...

  3. 三、python webservice

    #!/usr/bin/python # -*- coding: utf-8 -*- import logging import suds url="http://172.17.2.199:8 ...

  4. May 23rd 2017 Week 21st Tuesday

    Winners are not those who never fail but those who never quit. 成功者不是从不失败,而是从不放弃. Nothing is impossib ...

  5. Android(java)学习笔记4:线程的控制

    1. 线程休眠: Java中线程休眠指让正在运行的线程暂停执行一段时间,进入阻塞状态,通过调用Thread类的静态方法sleep得以实现. 当线程调用sleep进入阻塞状态后,在其休眠的时间内,该线程 ...

  6. Django:Django中的ORM

    一.Django项目使用MySQL数据库 1,在Django项目的settings.py,文件中,配置数据库连接信息: DATABASES = { "default": { &qu ...

  7. Docker 常用指令

    1.检查内核版本,必须是3.10及以上uname ‐r2.安装dockeryum install docker3.输入y确认安装4.启动docker[root@localhost ~]# system ...

  8. 火狐 SSL 收到了一个弱临时 Diffie-Hellman 密钥

    火狐 SSL 收到了一个弱临时 Diffie-Hellman 密钥   最近在用FireFox 调试时使用Https,连接 https网址 时发生错误. 在服务器密钥交换握手信息中 SSL 收到了一个 ...

  9. 课时57.HTML被废弃的标签(掌握)

    1.为什么HTML中有一部分标签会被废弃? 因为当前HTML中的标签只有一个作用,就是用来添加语义,而早期的HTML标签中有一部分标签是没有语义的 有一部分标签是用来修改样式的 所以这部分标签就被淘汰 ...

  10. Java基础——XML复习

    XML                 SGML : 标准通用置标语言    Standard Generailzed    Markup Language XML                   ...