OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3128|回复: 0

3、通过zkCli⼯具命令和zk 的java API两种方式创建⼀个主从模式示列

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-9-7 17:05:29 | 显示全部楼层 |阅读模式
1、示例说明:一个主从模型包含以下三个角色:
1) 主节点:负责监视新的从节点和任务及分配任务给可用的从节点:
   创建临时主节点/master其节点值为主机信息,以便zk外部的其他进程需要与他通信,添加主机信息并不是必须的,但这样做仅仅是为了说明我们可以在需要时对主节点添加数据。一个活动的主节点可能崩溃,备份主节点需要接替活动主节点的角色,为了检测到这些,需要在/master节点上设置一个监视点。
   备注:stat 命令可以得到一个znode节点的属性,并允许我们在已经存在的znode节点上设置监视点。通过在路径后面设置参数为true来添加监视点,当活动主节点崩溃是,我们观察到:NodeDeleted path:/master

2) 从节点:通过系统注册自己,以确认主节点看到他们可以执行任务,然后开始监听新任务:
   创建三个父持久节点:/workers 、/tasks、/assign 并且不包含任何数据。一旦这些节点存在了,主节点就需要监视/workers和/tasks 子节点的变化情况。通过监视这些节点,可以告诉我们哪个从节点当前有效,还告诉我们当前有任务需要分配,并向从节点分配任务。从节点通过在/workers 子节点下创建临时性的znode来进行通知,并在子节点中使用主机名来标识自己。

3) 客户端:创建新任务,并等待系统的响应;
2、使⽤zkCli⼯具在命令窗口完成上述主从模式模拟:
    步骤1:创建临时主节点、持久子节点
        ##创建临时主节点
        create -e /master "master1.example.com:2223"

        ##尽管在任何时刻最多只能有⼀个活动的主节点,其他进程将成为备份主节点。假如其他进程不知道已经有⼀个主节点被选举出来,并尝试创建⼀个/master节点。那么ZK会告诉我们⼀个/master节点已经存在
        ##但是⼀个活动的主节点可能会崩溃,备份主节点需要接替活动主节点的⾓⾊。为了检测到这些,需要在/master节点上设置⼀个监视点
        [zk: localhost:2181(CONNECTED) 8] create -e /master "master2.example.com:2234"
        Node already exists: /master
        [zk: localhost:2181(CONNECTED) 9]


        ##创建持久从节点,其节点内容均为空
        create /wokers ""
        create /tasks ""
        create /assign ""

    步骤2:对从节点/workers 和 /tasks 设置对各自子节点的监视点;在主节点上设置监视点;
        ##在主节点上调用stat命令前,我们使用ls -w 命令,先设置对应znode的子节点变化的监视
        [zk: localhost:2181(CONNECTED) 12] ls -w /workers
        []
        [zk: localhost:2181(CONNECTED) 13] ls -w /tasks
        []

        ##在主节点上设置监视点
        stat -w /master

    步骤3:从节点⾸先要通知主节点,告知从节点可以执⾏任务
        ##3.1 从节点通过在/workers 子节点下创建临时性的znode来进行通知(告知主节点我可以执行任务),并在子节点中使用主机名来标识自己
        [zk: localhost:2181(CONNECTED) 16] create -e /wokers/wokers1.example.com   "wokers1.example.com:2224 is created and ok,can execute task"
        WATCHER::Created /wokers/wokers1.example.com
        WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/wokers
        注:从输出的日志中可以看到一旦从节点在/workser下创建了一个通知子节点,主节点就会观察到通知信息
        ##3.2 从节点需要创建⼀个子节点 assing/worker1.example.com来接收任务分配,并通过ls命令对该节点设置监视点,来监视该节点的变化,以便等待新新的任务,至此,从节点就准备好了,可以接受任务分配
        create /assign/workers1.example.com  ""
        ls -w /assign/workers1.example.com

        ##至此从节点就已经准备完成,可以接收任务分配,接下来我们通过讨论客户端⾓⾊来看⼀下任务分配的问题。


    步骤4:
        ##客户端向系统中添加任务,我们按照任务添加的顺序来添加节点,其本质上是一个队列。客户端现在必须等待任务执⾏完毕。执⾏任务的从节点将任务执⾏完毕后,会创建⼀个znode来表⽰任务状态。
        ##客户端通过查看任务状态的znode是否创建来确定任务是否执⾏完毕,因此客户端需要监视状态znode的创建事件:
        [zk: localhost:2181(CONNECTED) 19] create -s /tasks/task- "cmd"
        Created /tasks/task-0000000000
        [zk: localhost:2181(CONNECTED) 20]
        WATCHER::
        WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/tasks
        注:从输出的日志中可以看到一旦从节点在/tasks 下创建了一个子节点,主节点就会观察到通知信息

        ##执行任务的从节点会在/tasks/task-0000000000节点下创建状态znode节点,所以我们需要⽤ls命令来监视/tasks/task-0000000000的⼦节点。
        [zk: localhost:2181(CONNECTED) 21] ls -w /tasks/task-0000000000
        []

        ##主节点会检查新的任务,获取可用的从节点里列表,之后分配这个任务给worker1.example.com
        ls /tasks
        ls /workers

        [zk: localhost:2181(CONNECTED) 18] create /assign/workers1.example.com/task-0000000000
        WATCHER::Created /assign/workers1.example.com/task-0000000000
        WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/assign/workers1.example.com
        注:从输出的日志可以看,从节点workers1.example.com 接收到新分配任务的通知

        ##从节点检查新任务,并确认任务是否分配给自己
        ls /assign/workers1.example.com
        [task-0000000000]

        ##一旦从节点完成任务的执行,他就会在/tasks中添加一个状态节点
        [zk: localhost:2181(CONNECTED) 20] create /tasks/task-0000000000/status "done"
        Created /tasks/task-0000000000/status
        [zk: localhost:2181(CONNECTED) 21]

        ##之后客户端会接收到通知,并检查执行结果
        get /tasks/task-0000000000
        get /tasks/task-0000000000/status

        总结:本列中我们看到任务执行成功,其状态为done,当然任务也可能非常复杂,甚至涉及另外一个分布式系统,最终不管是什么样的任务,执行任务的机制与通过zk来传递结果。本质上都是一样的。

有相同爱好的可以进来一起讨论哦:企鹅群号:1046795523


学习视频资料:http://www.makeru.com.cn/live/1392_1164.html?s=143793


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-17 15:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表