zoukankan      html  css  js  c++  java
  • zookeeper实现主-从结构的一般原理

    输入图片说明

    以下文字只是时序图的解释说明,重点是看懂时序图。

    为了避免主节点/从节点和zk的节点概念看着乱,以下就用Master/Slave称呼了。

    1 选Master

    系统启动后,所有slave都会尝试在zk树上创建/master节点,创建成功的节点成为Master角色。 然而Master可能会崩溃,所以其他slave要继续监视/master节点。当Master挂掉后,slave重新选举出新的Master(这里的选举就是抢占)。这就要求服务节点挂掉后,/master节点随之删除,以便能让其他slave接到通知,所以master为必须为临时节点

    2 Master的准备工作

    创建三个父节点/works 、/tasks、 /assign 。(也可以由一个引导程序建) 这三个父节点都是永久节点,且不包含任何数据,作为目录节点存在。其子节点分别用于存储可用的slave、任务信息、向从节点分配任务。 创建完成后,Master要监视/works和/tasks两个节点,以便能感知到由哪些slave当前可用,当前有新任务需要分配。

    3 Slave的准备工作

    slave向zk注册自己的信息,让zk通知Master“我上线了,有新任务分配给我!” 同样,Master也需要及时知道有哪些slave挂了,所以slave在/works目录下创建的必须是临时节点。 然后,slave还需要在/assign目录下创建一个节点/work1,并监视这个节点等待任务分配。

    create -e /assign/work1 "work1_ip"
    ls /assign/work1 true 
    

    4 客户端提交任务

    客户端在/assign下创建一个节点,包含任务信息,即发布一个任务。 并监视该节点,获取任务完成情况

    create -s /task/task- "cmd"
    ls  /task/task-000 true
    

    5 Master分配任务

    任务发布后,监视了/assign的Master就会收到新任务通知。 然后Master查看/works下的可用slave,从中选一个分配给任务(在slave的目录下新增一个任务节点)

    create -e /assign/work1/task-000
    
    

    6 Slave开始干活

    slave收到新任务分配通知后,就开始执行任务。

    ls /assign/work/task-000  //查看任务信息
    

    然后完成后,添加执行状态,通知客户端。

    create /tasks/task-000/status "done"
    

    7 客户验收结果

    客户端查看任务节点信息,查看任务状态

    get /tasks/task-000
    

    以上! 只是描述了用zk实现主从结构的一般原理。

    画图挺累的,转载请说明出处。要原图邮箱吧。
    

    内容整理自《O'REILLY Zookeeper》一书

  • 相关阅读:
    $$Ctrl+shift+M分数罗马字母小写
    设置字体大小加粗斜体下划线
    无序列表有序列表
    数学公式插入
    文本居中、代码插入、图片插入
    VM 使用问题 | 安装失败->>注册表
    VM小技巧——虚拟机解决vm窗口太小的办法
    OneNet平台实践
    linux 打包 | autoconf 使用方法
    C 总结 | 复习注意点
  • 原文地址:https://www.cnblogs.com/lukeguo/p/8824757.html
Copyright © 2011-2022 走看看