(二) Zookeeper

Zookeeper

@author Zenos

行百里者半九十

简介

Zookeeper是一个开源的分布式协调服务框架,主要用于分布式应用程序进行协调和管理。

特点

  • 全局数据一致性

    集群中每个服务器保存一份相同的数据副本(主要记录集群的配置信息、元数据、状态信息等)。

  • 消息可靠性

    消息一旦被任何一台服务器接受,那么整个集群就能接受。

  • 顺序性

    在单个服务器上的数据顺序一定,则在所有服务器上的顺序也保持一致。

  • 原子性

    数据更新具有原子性的特点。

  • 实时性

    Zookeeper每隔一段时间间隔便会更新一次集群的信息。

ZAB

ZooKeeper 在解决分布式数据一致性问题时使用的一致性协议叫做 ZAB(ZooKeeper Automic Broadcast),原子广播协议

成员介绍

  • Leader

    事务请求(写请求)的唯一调度者和处理者,能发起投票(是否进行写请求)。Leader节点通常由选举产生。(选举发生在集群初始化时以及Leader节点宕机时)

  • Follower

    能够接收客户端的请求(读请求),写请求需要转发给Leader。在选举过程中参与投票,有选举权和被选举权。

  • Observer

    没有选举权和被选举权的Follower。

同步更新数据流程

Zookeeper利用消息广播机制,将Leader的写请求广播出去,让其他节点是否同意更新,超过半数则执行,否则不执行。为了确保数据的一致性,Leader使用队列的方式通知其他节点(防止由于网络原因导致后续发来的消息提前接收导致数据不一致),这样也就确保了数据的顺序性。
img

崩溃恢复

当集群中有节点宕机的时候如何确保数据一致性(恢复)

  • 超过半数节点宕机

    此时集群已经无法正常工作,通常使用以下步骤来恢复Zookeeper集群:

    1. 修复宕机节点

      尽快修复宕机的节点,确保它们能够重新加入集群。这可能包括硬件故障的修复、网络问题的解决等。

    2. 手动恢复数据

      如果宕机的节点上存在持久化的数据快照和事务日志,可以使用这些数据来手动恢复宕机节点。宕机节点可以加载最近的快照,并重新播放事务日志,以恢复其状态。

    3. 重新启动集群

      一旦宕机节点修复并成功加入集群,可以重新启动整个 ZooKeeper 集群。这样,集群就能够重新进行选举,选出新的 Leader,并继续提供服务。

  • 不超过半数节点宕机

    • 非Leader

      只要宕机的节点没有超过半数,Leader节点会维护队列,所以不需要担心后面的数据丢失。

    • Leader

      此时需要重新选举Leader,此时需要按照按照情况处理之前未成功处理的请求(确保已经被提交的提案最终能够被所有的Follower提交或是抛弃之前未超过半数的知情提案)。

Leader节点选举

Leader选举会在集群启动的时候Leader节点宕机的时候。选举Leader节点的选举需要半数以上的节点同意,由于需要保证Leader的选举得到半数以上的支持,所以Zookeeper的集群的节点数量常常设置为奇数。

数据模型


Zookeeper的数据模型是一个分层次的树状结构,类似于文件系统的目录结构,每个节点(Znode)存储一小段数据和一些元数据。

Znode特点

  • 是Zookeeper的最小数据存储单元,所有操作具有原子性
  • 一般用来管理调度数据(配置文件、状态信息等),通常每个Znode的数据大小不超过1M
  • Znode通过路径引用,路径是绝对的,也就是每个节点具有全局唯一的路径标识

Znode节点类型

  • 临时节点

    其生命周期依赖于他们的会话(Zookeeper客户端与服务端通过TCP长连接维持会话机制)。一旦会话结束,临时节点将自动被删除。且临时节点不允许拥有子节点的特点。

  • 永久节点

    其生命周期不依赖于会话,一旦创建,便只有在客户端执行删除操作后才会被删除。

Watcher机制

Watcher是事件监听器,是Zookeeper非常重要的一个特性。客户端向服务端注册指定的watcher,当监听的事件返回通知时,客户端会接收通知并执行相应的回调方法

在Hadoop集群中的运用

在Hadoop生态系统中,被广泛用于Hadoop集群的协调和管理。主要起到以下的作用:

  • 命名服务

    Zookeeper每个节点的全路径是唯一的,通过使用全路径命名,用于注册和发现例如NameNode、DataNode、ResourceManager等这些组件的位置信息,方便节点之间的查找和通信。

  • 分布式锁

    Zookeeper通过多个客户端同时创建一个临时节点,创建成功说明得到了锁,其他客户端如果尝试创建相同路径的节点,则会得到一个节点已存在的通知。当锁被释放,便可调用回调函数重新获取锁。利用分布式锁机制,能确保在集群中只有一个节点(NameNode)可以执行并发控制和这类的关键操作,从而保证数据的一致性和可靠性。

  • 配置管理

    Zookeeper提供的Watcher机制,允许客户端对节点进行监听。当Hadoop集群的配置发生变更时(Hadoop集群的配置信息通常存储在一个集中的配置文件中),Zookeeper通过实时监测配置变化,然后将变更通知给相应的组件,使得他们能够动态地更新配置信息。

附录

参考文章链接:

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值