hadoop知识整理(4)之zookeeper
一、介绍
一个分布式协调服务框架;
一个精简的文件系统,每个节点大小最好不大于1MB;
众多hadoop组件依赖于此,比如hdfs,kafka,hbase,storm等;
旨在,分布式应用中,提供一个可靠的、可拓展的、分布式的、可配置的协调机制来管理整个集群的状态;
主要角色有:leader、follower、observer。
二、简单使用配置
安装很简单。一个tar包解压即可。
启动所需的配置文件为:zk安装目录/conf/zoo.cfg(需将安装包中原zoo_sample.cfg改名为zoo.cfg)
配置文件中,需指定dataDir,这个参数可以自定义,其意义为存放zk集群环境配置信息的。
clientport为客户端连接zk端口,默认为2181
此外,分布式集群zk,需增加配置,指定集群中每一个节点的ip。
因为我用的是3.4.7版本,集群中本机ip必须指定为0.0.0.0。
此外,还需要在指定的dataDir的数据目录下,创建一个myid文件,此中只需要写本zk的id。
我这里的集群是3台zk。每台配置基本都是如此,其他都是默认配置。
启动命令:./zkServer.sh start ----->>>观察zk状态:./zkServer.sh status可以观察当前zk服务状态,启动会显示zk的角色。
启动zk客户端可以进行一些简单对于zk的操作:./zkCli.sh
三、基本运行原理
1、zk结构
1)zk有一个根节点------>>>"/";
2)每个节点都叫znode节点;
3)每个znode都会有自己的子节点;
4)每个子节点的路径都是唯一的;
5)不可用zk节点存储海量数据,第一与其使用场景不符合,第二zk对节点的存储基于内存,容易撑爆内存,且多台zk存储的属于都一致;
6)zk持久化目录就在于传说中的,配置文件中指定的dataDir目录;
7)zk回为每一个操作,除读之外的,分配一个全局递增的事务id;
8)zk可以创建临时顺序节点,基于此,主节点服务器可以对应一个临时节点,备用服务器监控此临时节点,当主节点挂了时,此备用节点也会消失,从而备用节点可以顶上,从而zk可以管理集群中节点的服务状态。
2、zk选举
zk本身是支持HA的,在集群中会存在一个leader,其他都是follower,leader和follower之间会存在心跳访问,当leader挂了之后,zk集群接下一步的操作为重新选举新的leader;
1)如果并非leader挂了的情况,而是新启动zk集群,那么zk集群会先从本地指定的dataDir中恢复本节点数据,找到本方最大的事务id,即是最新的事务,此阶段为数据恢复阶段;
2)选举过程,集群中的每台zk都会向彼此提交选举协议,希望成为leader;
选举协议中包含本节点最新的事务id,自己在集群中的id,逻辑时钟值(确保是在同一轮选举中);
这时候zk节点会多出一个状态为looking状态;
3)PK原则,先比较事务id,谁的事务id最大谁是leader;
如果zxid比较不出,那就比选举id,此时需满足过半性原则,01、02、03为02,01、03、02为03,02、03,01为03,03、02、01为03
简单总结,进行id比较,从先向后启动顺序比较,谁满足了一半同意,谁就是leader。
zk的选举机制可以保证崩溃恢复,当leader挂了之后,如果集群数量满足过半性,那么就会从剩下的follower中选出薪的leader。
3、zk分布式一致性算法
先了解分布式一致性算法有哪些:
2PC算法-------->>>二阶段提交算法:
阶段一:leader向follower询问是否可以进行事务提交操作,follower进行预执行,如果都成功,先不提交,返回成功ack给leader;
阶段二:若所有follower都是成功ack,那么leader通知所有follower进行事务提交操作,事务完成;
若有follower有返回失败ack或者超时响应,leader通知所有follower进行回滚操作,follower给leader返回回滚ack。事务失败。
优点是简单,方便实现。
缺点是同步阻塞,leader在1阶段后一致在等待,造成时间浪费;
leader会存在单点问题,事务中leader挂了的话,那么整个事务将无法继续运行。
ZK使用的是改进后Paxos算法,也是改进后的二阶段提交算法:ZAB协议:
1)进行消息原子广播,保证数据一致性;
2)崩溃恢复,解决了2PC算法的单点问题。
简单说明ZAB协议:
1)zk通过原子(消息)广播的方式进行通信;
2)zk有一个单一的leader接收并处理所有client的事务请求,然后将数据状态的更新,通过广播的方式通知到所有的follower或者Observer中;
3)每一个事务请求都有一个全局唯一的id,此id为zxid,递增;
4)通过消息的广播的方式,每个follower接收到事务请求后,处理事务后,返回ack,只要follower收到半数以上的成功ack事务即成功。
但说到这里,并未解决leader的单点问题,并且只是半数ack即确认事务成功,虽然提高了效率,但是事务一致性可疑;
所以,zk更加详细的ZAB协议应该为:
1)leader将所有的事务分配一个递增的全局事务id;
2)leader在进行原子广播事务操作时,为每一个follower单独创建一个propersal(提案)队列,队列遵循fifo的策略,将事务操作放入,然后原子广播出去;
3)follower也有一个先入先出的事务队列,收到事务操作后,将事务操作写入事务日志中,然后反馈给leader,ack,leader收到半数以上的follower的ack后,会再次发出原子广播指挥所有的follower进行事务提交操作;
这个时候,假如有的follower没有返回ack,但是收到了commit指令,那么将直接执行完事务后提交事务;
如果这个follower挂掉了,那么当他重启时会进入数据恢复阶段,与follower进行数据一致性的同步,由这一点可见过半性原则的重要性;
当leader挂了之后,进入到崩溃恢复阶段;
1)整个zk集群假如仍有半数以上活着,先进行leader的选举操作;
2)如果所有的follower事务id都是一致的,从来没有接受过之前的事务操作,那么此事务就当没执行过,飘到外星宇宙去了(因为leader极端的在一瞬间进行原子广播时,失去了所有的follower);
3)那么根据zk的选举原则,新leader的事务id一定是最新的,对于刚才的事务,要不已经提交,要不未进行提交操作,对于未进行提交操作的,新的leader复制继续完成此事务,进行事务操作;
4)zk集群进入广播模式,新来的节点进行数据恢复。当原leader恢复了之后,会废掉自己的porpersal,从而成为follower。
参考:https://www.jianshu.com/p/400a44edee88
转载于:https://www.cnblogs.com/qfxydtk/p/11227436.html
hadoop知识整理(4)之zookeeper相关推荐
- hadoop知识整理(2)之MapReduce
之前写的关于MR的文章的前半部分已丢. 所以下面重点从3个部分来谈MR: 1)Job任务执行过程,以及主要进程-ResourceManager和NodeManager作用: 2)shuffle过程: ...
- Hadoop笔记整理(三):Zookeeper
[TOC] 为了方便知识的管理,把zk归到hadoop知识中来进行整理. zookeeper基础知识 zookeeper概述 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Go ...
- 大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门到熟练操作)
系列博客 1.大数据技术之Hadoop完全分布式集群搭建+Centos7配置连通外网和主机 2.大数据技术之Hadoop编译源码 3.大数据技术之Hadoop分布式文件系统HDFS系统知识整理(从入门 ...
- Python介绍与特点(自学python知识整理)
Python介绍与特点(自学python知识整理) Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计: Python 是一种解释 ...
- *Java软件开发面试知识整理*
Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...
- Redis重点知识整理 -奔波儿东
Redis重点知识整理 -奔波儿东 一.Redis简介: 1.什么是Redis? Redis(Remote Dictionary Server)是一个用c语言写的,开源的.高性能非关系型数据库.NoS ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
- Spring AOP 知识整理
为什么80%的码农都做不了架构师?>>> AOP知识整理 面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元 ...
- Linux系统基础知识整理
一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...
最新文章
- Java项目:学生选课系统(java+javaweb+jdbc)
- Penang Industrial Zone
- c是过程化语言吗数据库,关于SQL错误的是()A、所有数据库的公共语言B、非过程化的C、统一的语言D、所有用SQL缩写的程序都...
- mysql中dml操作_MySQL的DML语言操作实例
- 【BZOJ3437】小P的牧场,斜率优化DP
- # 20155337 《Android程序设计》实验四实验报告
- python与excel-再见Excel!我开源了一款与Python深度集成的神器级IDE
- bushound的使用和UVC协议的应用开发
- 哪几种情况可以销毁session(一般有3种)
- DNS加密 防止被DNS劫持 保护网络安全
- 平安夜关于苹果的题目——1705. 吃苹果的最大数目
- 2.5数字传输系统2.6宽带接入技术
- iOS开发系列--NextPrevious On-Demand Resource Basics
- Qt开发环境下载和安装
- python中from import_Python中的import和from import
- 华为手机word插件加载失败_c#调用word的组件时失败解决方法
- 卡特兰数(c++实现)
- Windows 系统磁盘克隆
- 吴军三部曲态度(六)做人做事
- 低度酒赛道进入洗牌期,新品牌如何破局三大难题?