基于zookeeper的分布式配置中心(一)

  最近在学习zookeeper,发现zk真的是一个优秀的中间件。在分布式环境下,可以高效解决数据管理问题。在学习的过程中,要深入zk的工作原理,并根据其特性做一些简单的分布式环境下数据管理工具。本文首先对zk的工作原理和相关概念做一下介绍,然后带大家做一个简单的分布式配置中心

zookeeper介绍

  zookeeper是一个分布式协调框架,主要是解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理、分布式锁等。

zookeeper使用 查看节点

  # ls /path

创建节点

  #create /path data

修改节点

  #set /path data

删除节点

  #delete /path

获取节点数据

  #get /path

zookeeper C/S连接状态

  1)KeeperState.Expired:客户端和服务器在ticktime的时间周期内,是要发送心跳通知的。这是租约协议的一个实现。客户端发送request,告诉服务器其上一个租约时间,服务器收到这个请求后,告诉客户端其下一个租约时间是哪个时间点。当客户端时间戳达到最后一个租约时间,而没有收到服务器发来的任何新租约时间,即认为自己下线(此后客户端会废弃这次连接,并试图重新建立连接)。这个过期状态就是Expired状态

  2)KeeperState.Disconnected:就像上面那个状态所述,当客户端断开一个连接(可能是租约期满,也可能是客户端主动断开)这是客户端和服务器的连接就是Disconnected状态

  3)KeeperState.SyncConnected:一旦客户端和服务器的某一个节点建立连接(注意,虽然集群有多个节点,但是客户端一次连接到一个节点就行了),并完成一次version、zxid的同步,这时的客户端和服务器的连接状态就是SyncConnected

  4)KeeperState.AuthFailed:ookeeper客户端进行连接认证失败时,发生该状态

zookeeper工作原理

  文件系统 + 监听机制

文件系统特点

  同一个目录下文件名称不能重复,同样zookeeper也是这样的,zookeeper中统一叫作znode。znode节点可以包含子znode,也可以同时包含数据。znode只适合存储非常小的数据,不能超过1M,最好都小于1K。

znode节点类型

  临时节点(EPHEMERAL):客户端关闭zk连接后清除

  永久节点(persistent):持久化节点,除非客户端主动删除

  有编号节点(Persistent_sequential):自动增加顺序编号的znode持久化节点

  临时有编号(Ephemral_ sequential):临时自动编号设置,znode节点编号会自动增加,但是会客户端连接断开而消失。分布式锁用的是这个类型的节点。

  注:EPHEMERAL 临时类型的节点不能有子节点,对于zk来说,有几个节点数据就会存储几份。

监听机制

  客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节 点增加删除)时,zookeeper会通知客户端。

  

基于zookeeper的分布式配置中心(一)

  1、客户端启动时向zookeeper服务器注册信息

  2、客户端启动同时注册一系列的Watcher类型的监听器到本地的WatchManager中

  3、zookeeper服务器中节点发生变化后,触发watcher事件后通知给客户端,客户端线程从WatcherManager中取出对应的Watcher对象来执行回调逻辑。

zookeeper监听的事件类型

  EventType.NodeCreated:当znode节点被创建时,该事件被触发。

  EventType.NodeChildrenChanged:当znode节点的直接子节点被创建、被删除、子节点数据发生变更时,该事件被触发。

  EventType.NodeDataChanged:当znode节点的数据发生变更时,该事件被触发。

  EventType.NodeDeleted:当znode节点被删除时,该事件被触发。

  EventType.None:当zookeeper客户端的连接状态发生变更时,即KeeperState.Expired、KeeperState.Disconnected、KeeperState.SyncConnected、KeeperState.AuthFailed状态切换时,描述的事件类型为EventType.None。

zookeeper下server工作状态

  LOOKING:当前server不知道leader是谁,正在选举

  LEADING:当前server即为选举出来的leader

  FOLLOWING:leader已经选举出来,当前server是follower

 ZAB协议

  ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。
  ZAB 协议作用:解决分布式数据管理一致性。
  ZAB 协议定义:ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 消息广播 协议。
  基于该协议,Zookeeper 实现了一种 主备模式 的系统架构来保持集群中各个副本之间数据一致性。

消息广播

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgwjx.html