sha*_*han 10 python kazoo apache-zookeeper apache-curator
这是kazoo readthedocs上提到的代码
election=zk.Election("/electionpath", "my-identifier")
Run Code Online (Sandbox Code Playgroud)
将特定节点作为领导者传递的输入参数是什么?(即/ electionpath和my-identifier在这里指的是什么?)
简而言之:"/ electionpath"是您感兴趣的路径,您将使用dataWatchers创建节点,添加数据和观察节点."my-identifier"是非重入锁定的标识符,用于验证谁是竞争者中的领导者,并且只允许向领导者写入.
详细信息:为了简化它,首先解释为什么在zookeeper中应该有领导者.它是执行所有写操作和连接相关处理的领导者.考虑以下示例来理解领导者选举的概念.
在[1]中:zk_client.create('test_zk/path_of_interest/test_ephemeral',ephemeral = True)
在[9]中:zk_client.get("test_zk/path_of_interest/test_ephemeral")
Out [9] :('',ZnodeStat(czxid = 678608988239,mzxid = 687195015354,ctime = 1476960597584,mtime = 1477310417594,版本= 1145,cversion = 0,aversion = 0,ephemeralOwner = 0,dataLength = 185,numChildren = 0 ,pzxid = 678608988239))
具有最小创建ID(czxid)的节点将被选为领导者领导者选举过程.
内部的领导者选举给予选举节点(最小的czxid)一个非重入锁定,并为该锁定设置一些标识符,用于验证谁是竞争者中的领导者(您的"我的标识符").
现在让我们看一下选举领导者的实际代码.
In [7]: election = zk_client.Election('/test_zk/path_of_interest', 'test-election')
In [8]: def leader_func():
...: print 'Election Completed...!'
...:
In [9]: election.run(leader_func)
Election Completed...!
Run Code Online (Sandbox Code Playgroud)
一个callable传递给run方法来做一些post选举的东西.
我希望这有帮助.