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. C语言学习之第一个程序

    #include<stdio.h> int main() { printf("This is my first program!\n"); ; } 基本格式大致如下: ...

  2. June 13th 2017 Week 24th Tuesday

    There are no regrets in life, just lessons. 人生中没有后悔,只有教训. Some people can learn from their past mist ...

  3. GCO团队合作

    队名:GCO 队员:   B20150304116谢冰媛 (组长) B20150304401王粲 B20150304115钟玺琛            B20150304226梁天海          ...

  4. 初见git和github

    一.我的github helloworld程序的地址:https://github.com/wyf1213/wyf-project1 二.git/github的相关介绍资料 1.github是什么   ...

  5. 使用Cloud application Studio在C4C UI里创建下拉列表(dropdown list)

    在Cloud Application Studio里新建一个Code List Data Type: 维护Value和描述信息,以及在ABSL里使用的constant值. 保存之后,上述维护的信息会存 ...

  6. Fiori里花瓣的动画效果实现原理

    Fiori里的busy dialog有两种表现形式,一种是下图里的花朵形状,由5个不断旋转的花瓣组成.另一种是下图的3/4个圆环不断旋转的效果. 关于前者的效果,可以看我制作的这个视频.这个视频是手动 ...

  7. IOS 摇一摇的方法

    ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 判断摇一摇的步骤:实现3个摇一摇监听方法 ● ...

  8. Android(java)学习笔记39:Android 修改字体

    首先如果android内部自带的字体不是我们需要的字体,那我们就需要字体文件导入到android开发工程中,下午我们详细讲述: 1.我们首先分析知道,我想要TextView控件中文字的字体是:华文楷体 ...

  9. Android——Intent,Bundle

    Intent——切换activity intent.setClass(first.this,second.class); startActivity(intent); Bundle——切换时数据传递 ...

  10. E. XOR and Favorite Number

    题意:很多询问,求每个询问下,有多少个区间,异或=k. 分析:异或也有前缀和.[L,R] = pre[R] ^ pre[L-1]: 莫队算法:是莫涛队长发明的,一种改良版的暴力离线算法. 首先将问题重 ...