如何使用kazoo客户端进行领导人选举?

2024-05-13 11:37:07 发布

您现在位置:Python中文网/ 问答频道 /正文

这是kazoo readthedocs上提到的代码

election=zk.Election("/electionpath", "my-identifier")

要传递哪些输入参数以使特定节点成为leader?(即/electionpath和我的标识符在这里指的是什么?)在


Tags: 代码参数节点myreadthedocs标识符leaderidentifier
1条回答
网友
1楼 · 发布于 2024-05-13 11:37:07

简而言之:“/electionpath”是您感兴趣的路径,您将在其中创建节点、添加数据并使用dataWatchers监视节点。 “my identifier”是非重入锁的标识符,它将用于验证谁是竞争者中的领导者,并且只允许向leader写入。在

具体内容: 为了简化,首先解释为什么动物园管理员应该有领导者。所有的联系和处理都是由负责人来做的。 考虑下面的例子来理解领导人选举的概念。在

  1. A、 B、C是集群下可用的服务器(zookeeper术语中的节点)。在
  2. '/test zu zk/path_-interest/'(您的“/electionpath”)是我感兴趣的路径,我将在其中创建节点,添加数据并使用dataWatchers监视节点。在
  3. 在此路径下创建临时节点。在

In [1]: zk_client.create('test_zk/path_of_interest/test_ephemeral', ephemeral=True)

  1. 集群的每个节点内部都存储这些短暂的节点信息。在

In [9]: zk_client.get("test_zk/path_of_interest/test_ephemeral")

Out [9]: ('',ZnodeStat(czxid=678608988239, mzxid=687195015354, ctime=1476960597584, mtime=1477310417594, version=1145, cversion=0, aversion=0, ephemeralOwner=0, dataLength=185, numChildren=0, pzxid=678608988239))

  1. 创建id最小的节点(czxid)将被选为领导后选举过程。

  2. Leader election在内部为选定的节点(最小的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...!

一个callable被传递给run方法来完成一些选举后的工作。在

我希望这有帮助。在

相关问题 更多 >