10

这是kazoo readthedocs上提到的代码

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

要传递哪些输入参数以使特定节点成为领导者?(即 /electionpath 和 my-identifier 在这里指的是什么?)

4

1 回答 1

5

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

详细:为了简化它首先解释为什么动物园管理员应该有领导者。负责所有写入操作和连接相关处理的领导者。考虑以下示例来理解领导者选举的概念。

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

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

  1. 集群的每个节点内部都存储此临时节点信息。

在[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. 领导者选举在内部为选举节点(最小的CZXID)提供了非重新输入锁定,并将某些标识符设置为该锁定的标识符,该锁将用于验证谁是竞争者(您的“ My-My-Identifier”)的领导者。

现在让我们看看选举领导者的实际代码。

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 方法来做一些选举后的事情。

我希望这有帮助。

于 2016-10-24T13:21:34.130 回答