Zookeeper
@author Zenos
行百里者半九十
简介
Zookeeper是一个开源的分布式协调服务框架,主要用于分布式应用程序进行协调和管理。
特点
-
全局数据一致性
集群中每个服务器保存一份相同的数据副本(主要记录集群的配置信息、元数据、状态信息等)。
-
消息可靠性
消息一旦被任何一台服务器接受,那么整个集群就能接受。
-
顺序性
在单个服务器上的数据顺序一定,则在所有服务器上的顺序也保持一致。
-
原子性
数据更新具有原子性的特点。
-
实时性
Zookeeper每隔一段时间间隔便会更新一次集群的信息。
ZAB
ZooKeeper 在解决分布式数据一致性问题时使用的一致性协议叫做 ZAB(ZooKeeper Automic Broadcast),原子广播协议。
成员介绍
-
Leader
事务请求(写请求)的唯一调度者和处理者,能发起投票(是否进行写请求)。Leader节点通常由选举产生。(选举发生在集群初始化时以及Leader节点宕机时)
-
Follower
能够接收客户端的请求(读请求),写请求需要转发给Leader。在选举过程中参与投票,有选举权和被选举权。
-
Observer
没有选举权和被选举权的Follower。
同步更新数据流程
Zookeeper利用消息广播机制,将Leader的写请求广播出去,让其他节点是否同意更新,超过半数则执行,否则不执行。为了确保数据的一致性,Leader使用队列的方式通知其他节点(防止由于网络原因导致后续发来的消息提前接收导致数据不一致),这样也就确保了数据的顺序性。
崩溃恢复
当集群中有节点宕机的时候如何确保数据一致性(恢复)
-
超过半数节点宕机
此时集群已经无法正常工作,通常使用以下步骤来恢复Zookeeper集群:
-
修复宕机节点
尽快修复宕机的节点,确保它们能够重新加入集群。这可能包括硬件故障的修复、网络问题的解决等。
-
手动恢复数据
如果宕机的节点上存在持久化的数据快照和事务日志,可以使用这些数据来手动恢复宕机节点。宕机节点可以加载最近的快照,并重新播放事务日志,以恢复其状态。
-
重新启动集群
一旦宕机节点修复并成功加入集群,可以重新启动整个 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通过实时监测配置变化,然后将变更通知给相应的组件,使得他们能够动态地更新配置信息。
附录
参考文章链接:
- author:Jacian - 博客园 (cnblogs.com) url:Zookeeper一致性协议——ZAB - Jacian - 博客园 (cnblogs.com)
- author:旷野历程 url:http://t.csdnimg.cn/q3fa6