ZooKeeper 分布式协调/通知

分布式协调/通知

对于一个在多台机器上部署运行的应用而言,通常需要一个协调者(Coordinator)来控制整个系统的运行流程。ZooKeeper 中特有的 Watcher 注册与异步通知机制,能够很好地实现分布式环境下不同机器。基于ZooKeeper实现分布式协调与通知功能,通常的做法是不同的客户端都对ZooKeeper上同一个数据节点进行Watcher注册,监听数据节点的变化(包括数据节点本身及其子节点),如果数据节点发生变化,那么所有订阅的客户端都能够接收到相应的 Watcher 通知,并做出相应的处理
MySQL数据复制总线:
整个系统是一个由MySQL 数据库集群、消息队列系统、任务管理监控平台以及 ZooKeeper 集群等组件共同构成的一个包含数据生产者、复制管道和数据消费者等部分的数据总线系统
ZooKeeper 分布式协调/通知_第1张图片
根据功能将数据复制组件划分为三个核心子模块:Core、Server 和 Monitor

  • Core 实现了数据复制的核心逻辑,其将数据复制封装成管道,并抽象出生产者和消费者两个概念
  • Server负责启动和停止复制任务。
  • Monitor负责监控任务的运行状态,如果在数据复制期间发生异常或出现故障会进行告警
    ZooKeeper 分布式协调/通知_第2张图片
    每个模块作为独立的进程运行在服务端,运行时的数据和配置信息均保存在 ZooKeeper上,Web控制台通过获取ZooKeeper上的数据进而得知这几个进程的数据。

任务注册
Core进程在启动的时候,首先会向任务列表节点(例如 /mysql_replicator/tasks)注册任务(创建一个子节点 任务节点:/mysql_replicator/tasks/copy_hot_item )。两个概念需要搞清楚一个是任务列表节点,一个是任务节点
主、备任务机器通过ZooKeeper互相检测运行健康状况。每台任务机器都需要在/mysql_replicator/tasks/copy_hot_item/instances 节点上将自己的主机名注册上去,是一个临时的顺序节点。在完成该子节点的创建后,每台任务机器都可以获取到自己创建的节点名以及所有子节点列表,然后通过对比判断自己是否是所有子节点中序号最小的。如果自己是序号最小的子节点,那么就将自己的运行状态设置为RUNNING,其余的任务机器则将自己设置为STANDBY。一旦标记为RUNNING的机器出现故障停止了任务执行,那么就需要在所有标记为STANDBY的客户端机器中再次按照“小序号优先”策略来选出RUNNING 机器来执行。
做法就是标记为 STANDBY 的机器都需要在/mysql_replicator/tasks/copy_hot_item/instances (子节点为所有的机器的状态)节点上注册一个“子节点列表变更”的 Watcher监听,用来订阅所有任务执行机器的变化情况——一旦RUNNING机器宕机与ZooKeeper断开连接后,对应的节点就会消失,于是其他机器也就接收到了这个变更通知,从而开始新一轮的RUNNING选举

你可能感兴趣的:(ZooKeeper)