首页 > 其他 > 详细

Zookeeper&&HA

时间:2020-12-19 21:25:42      阅读:35      评论:0      收藏:0      [点我收藏+]

zookeeper

工作机制

技术分享图片

 

 

 

特点

技术分享图片

 

 

 

1 Zookeeper:一个领导者,多个跟随者组成的集群

2 集群中只要有半数以上节点存活,Zookeeper就能正常服务

3 全局数据一致性:每个Server保存一份相同的数据副本,CLient无论连接到哪个Server,数据都是一致的。

4 更新请求顺序进行,来自同一个客户端的更新请求按其发送顺序执行

5 数据更新原子性,一次数据要么更新成功,要么失败。

6实时性,在一定范围内,Clinet能读到最新的数据。

客户端命令操作

help : 显示所有操作命令

ls path:使用ls命令来查看当前znode的子节点

-w 监听子节点得到变化

-s 附加次级信息

create: -s 创建有序

-e 创建临时

get path -w 监听节点内容变化

-s 附加次级信息

set 设置节点的具体值

stat 查看节点的具体值

delete 删除节点

deleteall 递归删除节点

Stat 结构体

技术分享图片

 

 

 

1 cZxid-创建节点的事务 zxid,每次修改Zookeeper状态都会受到一个zxid形式的时间戳,也就是Zookeeper事务ID。事务ID是Zookeeper中所有修改总的次序。每个修改都有唯一的zxid。

2 ctime 被创建的毫秒数

3 mzxid 最后更新的事物zxid

4 mtime 最后修改的毫秒数

5 pZxid 最后更新的子节点zxid

6 cversion 子节点变化号,znode子节点修改次数

7 dataversion 数据变化号

8 aclVersion 访问控制列表的变化号

9 ephemeralOwner 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0

10 dataLength znode的数据长度

11 numChildren znode子节点数量

监听原理

技术分享图片

 

 

 

选举机制

技术分享图片

 

 

 

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;

(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的ID比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING

(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;

(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;

(5)服务器5启动,同4一样当小弟。

写数据流程

技术分享图片

 

 

 

HA(High Availablity)

HDFS-HA工作机制

通过多个NameNode消除单点故障

HDFS-HA工作要点

1 元数据管理方式需要改变

内存中各自保存一份元数据

Edits日志只有Active状态的NameNode节点可以做写操作

所有的NameNode都可以读取Edits

共享的Edits放在一个共享存储中管理

2 需要一个状态管理功能模块

实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在的NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要brain spilt现象发生

3必须保证两个NameNode之间能够ssh无密码登录

4 隔离,同一时刻仅仅有一NameNode对外提供服务

HDFS-HA故障转移机制

技术分享图片

 

<!--第三步 是通过zookeeper通知另一台NameNode的zkfc-->

1 故障检测

集群中的每个NameNode在Zookeeper中维护了一个会话,如果机器崩溃,Zookeeper中的会话将终止,Zookeeper通知另一个NameNode需要触发故障转移

2 现役NameNode选择

Zookeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从Zookeeper获得特殊的排外锁一以表明它应该成为现役NameNode。

ZKFC是自动故障转移中的另一个新组件,是Zookeeper客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:

健康监测 ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。

ZooKeeper会话管理 当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。

基于ZooKeeper的选择 如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active

YARN-HA工作机制

技术分享图片

 

 

 

 



Zookeeper&&HA

原文:https://www.cnblogs.com/Stk-HaHa/p/14160835.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!