zoukankan      html  css  js  c++  java
  • zookeeper应用场景

     典型应用场景

      1.1 Zookeeper是一个高可用的分布式数据管理和协调框架,并且能够很好的保证分布式环境中数据的一致性。在越来越多的分布式系统(HadoopHBaseKafka)中,Zookeeper都作为核心组件使用。

      2.1 数据发布/订阅

      数据发布/订阅系统,即配置中心。需要发布者将数据发布到Zookeeper的节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。发布/订阅一般有两种设计模式:推模式和拉模式,服务端主动将数据更新发送给所有订阅的客户端称为推模式;客户端主动请求获取最新数据称为拉模式,Zookeeper采用了推拉相结合的模式,客户端向服务端注册自己需要关注的节点,一旦该节点数据发生变更,那么服务端就会向相应的客户端推送Watcher事件通知,客户端接收到此通知后,主动到服务端获取最新的数据。

      若将配置信息存放到Zookeeper上进行集中管理,在通常情况下,应用在启动时会主动到Zookeeper服务端上进行一次配置信息的获取,同时,在指定节点上注册一个Watcher监听,这样在配置信息发生变更,服务端都会实时通知所有订阅的客户端,从而达到实时获取最新配置的目的。

      2.2 负载均衡

      负载均衡是一种相当常见的计算机网络技术,用来对多个计算机、网络连接、CPU、磁盘驱动或其他资源进行分配负载,以达到优化资源使用、最大化吞吐率、最小化响应时间和避免过载的目的。

      使用Zookeeper实现动态DNS服务

      · 域名配置,首先在Zookeeper上创建一个节点来进行域名配置,如DDNS/app1/server.app1.company1.com

      · 域名解析,应用首先从域名节点中获取IP地址和端口的配置,进行自行解析。同时,应用程序还会在域名节点上注册一个数据变更Watcher监听,以便及时收到域名变更的通知。

      · 域名变更,若发生IP或端口号变更,此时需要进行域名变更操作,此时,只需要对指定的域名节点进行更新操作,Zookeeper就会向订阅的客户端发送这个事件通知,客户端之后就再次进行域名配置的获取。

      2.3 命名服务

      命名服务是分步实现系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。Zookeeper也可帮助应用系统通过资源引用的方式来实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源,在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper可以实现一套分布式全局唯一ID的分配机制。

      通过调用Zookeeper节点创建的API接口就可以创建一个顺序节点,并且在API返回值中会返回这个节点的完整名字,利用此特性,可以生成全局ID,其步骤如下

      1. 客户端根据任务类型,在指定类型的任务下通过调用接口创建一个顺序节点,如"job-"

      2. 创建完成后,会返回一个完整的节点名,如"job-00000001"

      3. 客户端拼接type类型和返回值后,就可以作为全局唯一ID了,如"type2-job-00000001"

      2.4 分布式协调/通知

      Zookeeper中特有的Watcher注册于异步通知机制,能够很好地实现分布式环境下不同机器,甚至不同系统之间的协调与通知,从而实现对数据变更的实时处理。通常的做法是不同的客户端都对Zookeeper上的同一个数据节点进行Watcher注册,监听数据节点的变化(包括节点本身和子节点),若数据节点发生变化,那么所有订阅的客户端都能够接收到相应的Watcher通知,并作出相应处理。

      MySQL数据复制总线是一个实时的数据复制框架,用于在不同的MySQL数据库实例之间进行异步数据复制和数据变化通知,整个系统由MySQL数据库集群、消息队列系统、任务管理监控平台、Zookeeper集群等组件共同构成的一个包含生产者、复制管道、数据消费等部分的数据总线系统。

      Zookeeper主要负责进行分布式协调工作,在具体的实现上,根据功能将数据复制组件划分为三个模块:Core(实现数据复制核心逻辑,将数据复制封装成管道,并抽象出生产者和消费者概念)、Server(启动和停止复制任务)、Monitor(监控任务的运行状态,若数据复制期间发生异常或出现故障则进行告警)

      每个模块作为独立的进程运行在服务端,运行时的数据和配置信息均保存在Zookeeper上。

      ① 任务创建Core进程启动时,首先向/mysql_replicator/tasks节点注册任务,如创建一个子节点/mysql_replicator/tasks/copy_hot/item,若注册过程中发现该子节点已经存在,说明已经有其他Task机器注册了该任务,因此其自身不需要再创建该节点。

      ② 任务热备份,为了应对任务故障或者复制任务所在主机故障,复制组件采用"热备份"的容灾方式,即将同一个复制任务部署在不同的主机上,主备任务机通过Zookeeper互相检测运行监控状况。无论在第一步是否创建了任务节点,每台机器都需要在/mysql_replicator/tasks/copy_hot_item/instrances节点上将自己的主机名注册上去,节点类型为临时顺序节点,在完成子节点创建后,每天任务机器都可以获取到自己创建的节点名及所有子节点列表,然后通过对比判断自己是否是所有子节点中序号最小的,若是,则将自己运行状态设置为RUNNING,其他机器设置为STANDBY,这种策略称为小序号优先策略。

      ③ 热备切换,完成运行状态的标示后,其中标记为RUNNING的客户端机器进行正常的数据复制,而标记为STANDBY的机器则进入待命状态,一旦RUNNING机器出现故障,那么所有标记为STANDBY的机器再次按照小序号优先策略来选出RUNNIG机器运行(STANDY机器需要在/mysql_replicator/tasks/copy_hot_item/instances节点上注册一个子节点列表变更监听,RUNNING机器宕机与Zookeeper断开连接后,对应的节点也会消失,于是所有客户端收到通知,进行新一轮选举)。

      ④ 记录执行状态RUNNING机器需要将运行时的上下文状态保留给STANDBY机器。

       控制台协调Server的主要工作就是进行任务控制,通过Zookeeper来对不同任务进行控制和协调,Server会将每个复制任务对应生产者的元数据及消费者的相关信息以配置的形式写入任务节点/mysql_replicator/tasks/copy_hot_item中去,以便该任务的所有任务机器都能够共享复制任务的配置。

      在上述热备份方案中,针对一个任务,都会至少分配两台任务机器来进行热备份(RUNNINGSTANDBY、即主备机器),若需要MySQL实例需要进行数据复制,那么需要消耗太多机器。此时,需要使用冷备份方案,其对所有任务进行分组。

  • 相关阅读:
    简化异步操作(上):使用CCR和AsyncEnumerator简化异步操作
    CentOS 6.3(x32)下安装Oracle 10g R2
    Linux Oracle服务启动&停止脚本与开机自启动
    简化异步操作(上):使用CCR和AsyncEnumerator简化异步操作
    日记 20130202 阴
    2020年8月16日
    2020年8月18日
    2020年8月15日
    2020年8月22日
    2020年8月19日
  • 原文地址:https://www.cnblogs.com/qiaoz/p/10383239.html
Copyright © 2011-2022 走看看