Zookeeper理论知识

前言
:开发和维护开源服务器

概念

:Apache ZooKeeper致力于开发和维护实现高度可靠的分布式协调的开源服务器。

	目的:开发和维护开源服务器		
	干什么:做分布式协调
	特点:高度的可靠性

诞生过程

:ZooKeeper诞生于Yahoo,后转入Apache孵化,最终孵化成Apache的顶级项目,是Hadoop和Hbase的重要组件。

作用

:ZooKeeper是开源的分布式的协调服务框架,是Apache Hadoop的子件,适用于绝大部分分布式集群的管理(ZooKeeper是一种集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。所有这些类型的服务都以分布式应用程序的某种形式使用)

分布式引发的问题

	死锁:至少有一个线程占用了资源,但是不占用CPU
	活锁:所有线程都没有把持资源,但是线程却是在不断地调度占用CPU
	需要引入一个管理节点
	为了防止入口的单点问题,需要引入管理节点集群	
	需要确定一套选举算法
	主节点和从节点之间要保持数据的一致

特点

	本身是一个树状结构 --- Znode树
	每一个节点称之为znode节点
	根节点是 /
	zookeeper 的所有操作都必须以根节点为基准进行计算 /
	每一个znode节点都必须存储数据
	任意一个持久节点都可以有子节点
	任意一个节点的路径都是唯一的
	Znode树是维系在内存中 --- 目的是为了快速查询
	Zookeeper 不适合存储海量数据
	(维系在内存中,如果存储大量数据会消耗内存,
			不是一个存储框架而是一个服务协调框架)
	ZooKeeper会为每一次事务(除了读取以外的所有操作都是事务)
			分配一个全局的事务id ---Zid

节点类型

  	持久节点
  	临时节点(在客户端退出之后就自动删除)
  	持久顺序节点
  	临时顺序节点

命令

	create /子节点名字 "文本信息":在根节点下创建子节点并且为其赋值内容
	set /子节点名字 "新的文本信息" :更新子节点的内容为新的文本信息
	get /子节点名字:获取子节点的信息
	ls /:查看根节点下所有的子节点
	delete /子节点名称:删除子节点(要求这个节点中没有子节点)
	rmr /子节点名称:删除子节点(报括他的子节点)
	quit  :退出客户端
	create -e /子节点名称:在根目录下创建临时节点
	create -s /子节点名称:在根目录下创建持久顺序节点
	create -e -s /子节点名称 :在根目录下创建临时顺序节点

节点信息

	cZxid:全局分配的创建的事务id
	ctime:创建时间	
	mZxid:修改的事务id(记录自己本身修改)
	mtime:修改时间
	pZxid:子节点的变化的事务id(记录子节点的创建和删除)
	cversion:记录字节点变化次数
	dataVersion:数据版本
	aclVersion:记录当前节点的acl的变化次数
	ephemeralOwner:如果当前节点不是临时节点,那么这个属性的值为0
			(如果是临时节点,这个属性的值记录的是当前临时节点的session id)
	dataLength:数据长度(实际上是字节个数)
	numChildren 子节点个数	

节点状态

    Looking:选举状态
    follower:追随者
    leader:领导者
    observe:观察者

选举机制

	第一阶段:数据恢复阶段(会从数据目录中(dataDir)中恢复数据)
	第二阶段:选举阶段
	 1.所有的节点都会推荐自己当leader并且发动自己的选举信息(
						 最大事务id(pZxid) 编号(myid),逻辑时钟值)
	 2.选举原则:先比较最大事务id,谁的事务id大谁就胜出,如果
	                     最大事务id一样,则比较myid,谁的myid大谁就胜出
	 3. 选举出的leader的胜出要满足过半性(即要比至少一般的节点大)
	 4. 如果在集群中新加入一个节点,节点的事务id比leader的事务id大
	 					(新的id不会成为leader,只要选定了一个leader,
	 					  那么后续节点的事务id和myid无论是多少,
	 					  一律都是follower)
	 5.如果leader宕机,集群中会自动选举一个新的leader;
	 6.如果超过一般的服务器宕机,那么此时Zookeeper不再对外提供服务(过半性)
		
		{	01 02 03 --》02成为leader
		 	01 03 02 --》03成为leader	}

ZAB协议

	Zookeeper的投票是ZAB协议,ZAB是2PC协议的基础上来进行的延伸
	2PC:将节点分为了协调者和参与者,当来一个请求的时候,协调者是
	    将请求者分发给每一个参与者,如果所有的参与者决定执行这个请
	    求,那么协调者就真正提交操作,有参与者执行,参与者在执行完
	    成之后返回Ack表示执行成功,如果协调者将请求分发给每一个参与
	    者之后,有一个或者多个参与者不同意执行或者是没有返回消息,那
	    么将这个操作回滚,不执行(一票否决)
	    
	    在Zookeeper中,接收一个请求之后,leader会将请求分发给每一个
	    节点,由所有的节点投票确定是否执行这个请求(如果有一半的节点同意
	    执行这个请求,那么这个时候leader才会决定这个操作)

过半性

	1.选举leader的要满足过半性
	2.请求操作也要满足过半性
	3.过半集群才能对外提供服务,防止脑裂,一般将集群点设置为奇数
					(脑裂:集群中产生2个及以上的leader)

观察者

	执行操作,但是不参与选举和投票
	(21个节点 (14个观察者,6个follower,1个leader)
	    12个观察者宕机,依然对外提供服务
	    4个follower宕机,不对外提供服务
	    观察者不参与投票,所以就不影响集群的运行)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值