Zookeeper

Zookeeper的功能简介

Zookeeper是Hadoop生态圈的一个组件,是一个开源的分布式协调服务框架,提供了分布式程序的强一致性。
分布式应用程序可用基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调\通知、集群管理、
Master选举、配置维护、分布式同步、分布式锁、分布式队列。

Zookeeper的选举机制

1,选举机制
由于没有指定谁是leader,谁是follower,zookeeper集群内部需要通过选举产生一个leader,其他为followe。
(选举是通过3888端口进行的,由于没有leader,在进行选举的时候,每一个节点都会投票给自己)
1.1当所有节点同时启动的时候
假设zookeeper集群中有三个节点,如果这三个节点同时启动。
每一个节点都会投票给自己,于是就会产生每个节点都是1票的情况,无法选举产生leader。
此时,比较节点之间的权重,权重低的节点必须将票投给权重高的节点。此时,三号权重的节点当选为leader
1.2单节点启动
假设zookeeper集群中有5个节点,依次启动,顺序为1,2,3,4,5
-1号节点启动,给自己投1票,发现此时没有其他节点参与选举,此时这个节点会处于LOOKING状态
-2号节点启动,给自己投一票,此时发现只有两个节点,没有过半,,此时两个节点都会处于LOOKING状态
-3号节点启动,给自己投一票,现在节点数是奇数数量,满足过半的要求,比较权重值。
3号节点的权重最高,此时1号和2号必须将票投给3号。此时,3号节点得到3票,已经过半(集群中只有5个节点),此时3号节点将当选为leader
-4号节点启动,发现集群中已经有leader了,自动的变成follower
-5号节点启动,发现集群中已经有leader了,自动的变成follower

节点读写服务分工

1,Zookeeper中的Leader服务器节点为客户端提供读和写服务
2,Follower都能够提供读服务,但是不能够提供写服务。

数据节点

Zookeeper的结构其实是一个树形结构,leader相当于其中的根节点,其他的节点相当于follow节点,每个节点都保留自己的内容。
Zookeeper的节点分为两类:持久节点和临时节点 
-持久节点:
	一旦在树形结构上创建了,除非主动对树节点进行移除操作,否则,节点将一直保存在Zookeeper上
-临时节点:
	临时节点的声明周期跟客户端会话绑定,一旦客户端会话失效,那么客户端创造的所有的临时节点都会被移除掉。

状态信息

每个节点除了存储数据内容之外,还存储了节点本身的一些状态信息,用get命令可以同时获得某个节点内容和状态信息。

Zookeeper应用的典型场景

1,数据发布和订阅

数据发布与订阅,即所谓的配置中心,发布者将数据发布到Zookeeper节点上,供订阅者订阅。
Zookeeper中的每一个Znode中的数据都是一致的,集群中各个机器共享,配置一致。
发布与订阅模式一般有两种设计模式,分别是推Push和拉Pull模式。
-推模式:服务端主动将数据更新发送到所有订阅的客户端
-拉模式:客户端主动发起请求获取到最新的数据,通过客户端都采用定时轮询拉取的方式

Zookeeper采用的是推和拉相结合的方式:
客户端向注册自己需要关注的节点。一旦客户端的数据发生变更,服务端向客户端发送Watchert事件通知。
客户端收到这个消息,主动到服务端获取到最新的数据。

2,命名服务

在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等消息。
被命名的实体通常可以是集群中的机器、提供的服务、远程对象———这些我们统称为名字
其中较为常见的是一些分布式服务框架(如RPC)中的地址列表
通过在Zookeeper里顺序创建节点,能够很容易的创建一个全局唯一的路径,这个路径就可以作为一个名字。
Zookeeper的命名服务就是生成全局唯一的ID

分布式协调服务/通知

Zookeeper中特有的Wathcer注册与异步通知机制,能够很好的实现分布式环境下不同机器,甚至是不同系统之间的通知与协调,
从而实现对数据变更的实时处理。
不同的客户端如果机器节点发生了变化,那么所有订阅的客户端都能接收到相应的Watcher通知,并作出相应的处理。
Zookeeper的分布式协调/服务,是一种通用的分布式系统机器间的通信方式。

Master选举

Master选举是Zookeeper最典型的应用场景了,比如
-HDFS中Active Namenode选举
-Yarn中Active ResourceManager的选举
-HBase中的Active HMaster的选举
利用Zookeeper的强一致性,能够很好的保证在分布式高并发情况下节点的创建一定能保证全局一致性。
Zookeeper会保证客户端无法创建一个已经存在的数据单元节点。
如果有多个客户端请求创建同一个临时节点,一定只有一个客户端请求能够创建成功。
利用这个特性就可以实现Master的动态选举。
引用自https://blog.youkuaiyun.com/WeiJiFeng_/article/details/79775738?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值