这是 kazoo readthedocs 上提到的代码
election=zk.Election("/electionpath", "my-identifier")
要传递哪些输入参数才能使特定节点成为领导者? (即 /electionpath 和 my-identifier 在这里指什么?)
简而言之:“/electionpath”是您感兴趣的路径,您将在其中创建节点、添加数据并使用 dataWatchers 监视节点。
“my-identifier”是不可重入锁的标识符,它将用于验证谁是竞争者中的领导者,并只允许写入领导者。
详细地:
为了简化它,首先解释为什么动物园管理员应该有领导者。领导者负责执行所有写入操作和连接相关处理。
考虑以下示例来理解领导者选举的概念。
- A、B、C 是我的集群下可用的服务器(zookeeper 术语中的节点)。
- '/test_zk/path_of_interest/'(您的“/electionpath”)是我感兴趣的路径,我将在其中创建节点、添加数据并使用 dataWatchers 监视节点。
- 在此路径下创建临时节点。
在[1]中:zk_client.create('test_zk/path_of_interest/test_ephemeral',
短暂=真实)
- 集群的每个节点在内部存储此临时节点信息。
在[9]中:zk_client.get(“test_zk/path_of_interest/test_ephemeral”)
输出[9]: ('',ZnodeStat(czxid=678608988239, mzxid=687195015354,
ctime=1476960597584,mtime=1477310417594,版本=1145,cversion=0,
厌恶=0,临时所有者=0,数据长度=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 方法来执行一些选举后的操作。
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)