码迷,mamicode.com
首页 > 其他好文 > 详细

zk master-slaver机制

时间:2015-10-14 14:02:05      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

1、基本概念

>>zookeeper handler (zk句柄)有点类似文件句柄,打开一个文件就保持了一个文件句柄!同样的道理: 建立一个到zk server的session就会有一个zk handler(可以用任何编程语言)。

>> move session:client 可以 connect到 任意而且只能是一个server,但是如果超时(好久没有从server上hearded了)这个session可以迁移到其他server上,叫做 moving session

>> 一个client可以有多个session

2、master-worker 例子

2.1、Master: watch for new workers and tasks,and assign tasks to workers;//其实这里做了3件事,而且是有顺序的:先warch for availabe worker 然后 watch for tasks 然后 assign

>>一个系统只有一个process可以成为master,一个进程为了成为master 必须创建一个 ephemeral的znode call /master

1 create -e /master "host:port" //-e表示znode模式为 ephemeral  这里的数据 host:port 目的是让别人可以在zk之外访问他 ephemeral表示如果session失效 znode删除
2 ls /                                          //list the root of zk tree
3 get /master                            //get metadata

//watch 伴随着znode,如果znode发生变化 就会有事件
//stat 作用两个1 get the attributes of a znode;2 才存在的znode上设置watch
4 stat /master true // 参数 为 紧跟在path后的true表示sets the watch

然后master需要创建一些parent 的 znode,然后master需要watch哪个worker是可用的?那些task要分配?然后做分配

//是persistent znode不包含数据,作用就是告诉哪个worker是可用的?何时有task可以分配?然后分配给workers

create /worker ""   
create /tasks ""
create /assigns ""
ls /

//Master 需要watch for changes in the childer of /workers and /tasks,参数true表示为znode创建了watch
ls /worker true
ls /tasks true

 

 

 

2.2、worker: 将自己注册到系统,对master表明自己可用,这样话 master就可以watch for new tasks

 

//worker第一步就是通知master 它存在了可以执行taskle
//a、在/workers 创建一个ephemeral znode
create -e /worker/worker1 "host:port"
//因为master在关注 /workers所以一旦在worker1这个znode创建了,master就会观察到了 通知
WATCHER::
WatchedEvent state:SyncConneted type:NodeChildreChanged paht:/workders

//b、然后创建一个parent znode /assign/worker1 to receive assignments,and watch it for new tasks by ls true
create -e /assign/worker1
ls /assign/worker1 true
到此 worker准备接受assign了

 

2.3、client: create new tasks 然后等待系统反应

这里简化下任务就是client要求执行cmd命令

 

1、首先 to add a task
zkcli>create -s /tasks/task-  "cmd"   //mode是sequential,用户就会等待task被执行了
Created /tasks/task-0000000
2、执行这个task的worker执行完毕这个task后会 create a status znode for the task注意创建目录是在 /tasks/task-00000000,所以如过client看到这个status znode创建就知道task执行完了,所以他一直watch for the creation of the status znode.....
ls /tasks/task-0000000 true
3、master看到一个new task就会 get availabe workers ,然后assign
ls /tasks
ls /workers
create /assign/worker1/task-000000 ""

 

1、首先 to add a task
create -s /tasks/task-  "cmd"   //mode是sequential,用户就会等待task被执行了

 

zk master-slaver机制

标签:

原文地址:http://www.cnblogs.com/amazement/p/4877124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!