美文网首页
Zookeerper相关

Zookeerper相关

作者: 夏与清风 | 来源:发表于2019-08-08 16:05 被阅读0次
1、Zookeeper定义

Zookeeper是一种分布式协调服务。所谓分布式协调服务就是在分布式系统中共享配置、协调锁资源,提供命名服务。

2、Zookeeper的数据结构

Zookeeper的数据模型和数据结构当中的树类似,很像文件系统的目录。Zookeeper的数据存储也是基于节点,这种节点叫做Znode。Znode的引用方式是路径引用,类似于文件路径:/动物/人

这种层级结构使每个Znode对应唯一路径。Znode里面包含了数据、子节点引用、访问权限等。每个节点的数据最大不能超过1MB。 image.png
  • data:Znode存储的数据信息。
  • ACL:Znode的访问权限,即哪些人/IP可以访问本节点。
  • stat:包含Znode的各种元数据,如事务ID、版本号、时间戳等。
  • child:当前节点的子节点引用,类似于二叉树的左孩子右孩子。
3、Zookeeper的基本操作和事件通知

常见的API:
create 创建节点
delete 删除节点
exists 判断节点是否存在
getData 获取一个节点的数据
getChildren 获取节点下的所有节点
Zookeeper客户端在请求读操作的时候,可以选择是否设置Watch。Watch理解成是注册在特定Znode上的触发器。当这个Znode发生改变,即调用了create、delete、setData方法时,会触发Znode上注册的对应事件,请求Watch的客户端会接收到异步通知。
具体交互过程:
1、客户端调用getData方法,watch参数是true。服务端接到请求,返回节点数据。并且在对应的哈希表里插入被Watch的Znode路径,以及Watcher数组。
2、当被Watch的Znode已删除,服务端会查找哈希表,根据key找到该Znode对应的所有Watcher,异步通知客户端,并且删除哈希表中对应的Key-Value。

4、集群角色
  • Leader:负责写服务
  • Follower:直接为客户端提供服务,参与投票,同时与Leader进行数据交换(同步)
  • Observer:为客户端提供服务,但不参与投票,同时与Leader进行数据交换(同步)
    客户端的一个事务请求,需要半数服务器投票通过后才能通知leader commit;leader会发起一个提案,要求follower投票。
5、Zookeeper集群

为了防止单机故障,Zookeeper可以维护一个集群。Zookeeper Service集群时一主多从结构。
更新数据时,先更新到主节点(节点指服务器,而不是Znode),再同步到从节点。
读取数据时,直接读取任意从节点。

6、ZAB协议

为保证主从节点的数据一致性,Zookeeper采用了ZAB协议,这种协议非常类似于一致性算法Paxos和Raft。
ZAB即Zookeeper Atomic Broadcast,有效解决了Zookeeper集群崩溃恢复以及主从同步数据的问题。
Zab协议既不是强一致性,也不是弱一致性,而是处于两者之间的单调一致性。它依靠事务ID和版本号,保证了数据的更新和读取是有序的。
ZAB协议所的三种节点状态:
1)Looking:选举状态
2)Following:Follower节点(从节点)所处的状态
3)Leading:Leader节点(主节点)所处状态

7、选举算法

三种算法:leaderElection/AuthFastLeaderElection/FastLeaderElection

FastLeaderElection算法流程: image.png
8、ZAB崩溃恢复的三个阶段

1)Leader election
3)Discovery
4)Synchronization

9、Broadcast

Zookeeper常规情况下更新数据的时候,由Leader广播到所有Follower。其过程如下:
1)客户端发出写入数据请求给任意Follower
2)Follower把写入数据请求转发给Leader
3)Leader采用二阶段提交方式,先发送Propose广播给Follower。
4)Follower接到Propose消息,写入日志成功后,返回ACK消息给Leader
5)Leader接到半数以上ACK消息,返回成功给客户端,并且广播Commit请求给Follower。

10、应用场景
  • 分布式锁
    利用Zookeeper的临时有序节点,可以轻松实现分布式锁。
  • 服务注册与发现
    利用Znode和Watcher(Watch的客户端)可以实现分布式服务的注册与发现。dubbo框架就是用它来充当注册中心的。
  • 共享配置和状态信息
    Redis的分布式解决方案Codis,就利用了Zookeeper来存放数据路由表和codis-proxy节点的元信息。同时codis-config发起的命令都会通过ZooKeeper同步到各个存活的codis-proxy。此外Kafka、HBase、Hadoop也都依靠Zookeeper同步节点信息,实现高可用。

原文链接:https://blog.csdn.net/qq_26545305/article/details/87946879

相关文章

  • Zookeerper相关

    1、Zookeeper定义 Zookeeper是一种分布式协调服务。所谓分布式协调服务就是在分布式系统中共享配置、...

  • spark streaming + kafka +python(

    一、环境部署 hadoop集群2.7.1zookeerper集群kafka集群:kafka_2.11-0.10.0...

  • Zookeeper选举机制

    前言 Zookeeper为了保证各节点的协同工作,在工作时需要一个Leader角色,而Zookeerper默认采用...

  • Pearson相关、Spearman相关、Kendall相关

    1、三大相关系数 1.1 Pearson相关系数 要理解Pearson相关系数,首先要理解协方差(Covarian...

  • 2018前端面试总结,看完弄懂,工资少说加3K

    HTML相关 CSS相关 JAVASCRIPT相关 DOM相关 HTTP相关 VUE相关 算法相关 网络安全相关 ...

  • AS相关

    手动创建一个模块 手动创建一个模块,可以先写build.gradle文件,指明编译规则。 在项目的setting....

  • 相关

    错误地,我以为一切都相关 如同流云,河川,雨露 山之南,水之北, 旧日的,现在的 随手捡起的记忆 却不想也开了花,...

  • 相关

    vc 提取物 波色因

  • 相关

    打破"事不关己"这种避障吧 你与这个世界的任何事物都是息息相关的

  • this相关

    1.prototype2.extend3.this的定位 一、prototype 是为jquery的prototy...

网友评论

      本文标题:Zookeerper相关

      本文链接:https://www.haomeiwen.com/subject/xlmxjctx.html