Hadoop==zookeeper
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的更多相关文章
- 安装hadoop+zookeeper ha
安装hadoop+zookeeper ha 前期工作配置好网络和主机名和关闭防火墙 chkconfig iptables off //关闭防火墙 1.安装好java并配置好相关变量 (/etc/pro ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...
- HA分布式集群一hadoop+zookeeper
一:HA分布式配置的优势: 1,防止由于一台namenode挂掉,集群失败的情形 2,适合工业生产的需求 二:HA安装步骤: 1,安装虚拟机 1,型号:VMware_workstation_full_ ...
- hadoop+zookeeper+hbase分布式安装
前期服务器配置 修改/etc/hosts文件,添加以下信息(如果正常IP) 119.23.163.113 master 120.79.116.198 slave1 120.79.116.23 slav ...
- hadoop+zookeeper集群高可用搭建
hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...
- Hadoop-HA 搭建高可用集群Hadoop Zookeeper
Hadoop Zookeeper 搭建(一) 一.准备工作 VMWARE虚拟机 CentOS 7 系统 虚拟机1:master 虚拟机2:node1 虚拟机3:node2 时间同步 ntpdate n ...
- hadoop +zookeeper + hbase 单节点安装
项目描述: 今天花了680元买了阿里云的一台内存1G, 带宽1M 的云主机. 想以后方便测试用,而且想把自己的博客签到自己的主机上.所以自己就搭了一个测试的环境. 可以用来进行基本的hbase 入库, ...
- hadoop生态圈安装详解(hadoop+zookeeper+hbase+pig+hive)
-------------------------------------------------------------------* 目录 * I hadoop分布式安装 * II zoo ...
- Hadoop zookeeper hbase spark phoenix (HA)搭建过程
环境介绍: 系统:centos7 软件包: apache-phoenix-4.14.0-HBase-1.4-bin.tar.gz 下载链接:http://mirror.bit.edu.cn/apac ...
随机推荐
- Android 自定义View实现SegmentControlView(自定义多样式tablayout)
偷懒一下,不做过多阐述 参考资源: Android 自定义View实现SegmentControlView : https://blog.csdn.net/a512337862/article/det ...
- C/C++函数指针,指针函数的用法,用处
先看函数指针 int func2(int x); /* 声明一个函数 */ int (*q2) (int x); /* 声明一个函数指针 */ q2=func2; /* 将func函数的首地址 ...
- Oracle Dataguard 基本原理
转载-http://blog.sina.com.cn/s/blog_7c5a82970101prcx.html 1.DATAGUARD原理 DATAGUARD是通过建立一个PRIMARY和STANDB ...
- python入门17 类和对象
类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ...
- WPF产生不重复的随机数
WPF产生不重复的随机数 在给定的区间范围(比如[50,99]),产生给定数量的随机数(不如10个),要求产生的随机数不重复首先给定变量min=50;max=99+1;//习惯与程序规定的编码不同所致 ...
- 关于c++对文件读写的封装
namespace { UINT_T GetWriteSizeForNoBuf(UINT_T fsize) { UINT_T write_buf_size = ; == ) { write_buf_s ...
- python:验证客户端链接的合法性与socketserver
一.验证客户端链接的合法性 from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_a ...
- 2018.11.15 Nginx服务器的使用
Nginx简单教程 1.什么是Nginx? Nginx(engine x)是一款轻量级的Web服务器.反向代理服务器及电子邮件(IMAP/POP3)代理服务器 什么是反向代理服务器? 反向代理方式是指 ...
- caffe卷积层实现
下图是jiayangqing在知乎上的回答,其实过程就是把image转换成矩阵,然后进行矩阵运算 卷积的实现在conv_layer层,conv_layer层继承了base_conv_layer层,ba ...
- 论文笔记:Progressive Differentiable Architecture Search:Bridging the Depth Gap between Search and Evaluation
Progressive Differentiable Architecture Search:Bridging the Depth Gap between Search and Evaluation ...