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

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在这里指的是什么?)

Aks*_*hay 5

简而言之:"/ electionpath"是您感兴趣的路径,您将使用dataWatchers创建节点,添加数据和观察节点."my-identifier"是非重入锁定的标识符,用于验证谁是竞争者中的领导者,并且只允许向领导者写入.

详细信息:为了简化它,首先解释为什么在zookeeper中应该有领导者.它是执行所有写操作和连接相关处理的领导者.考虑以下示例来理解领导者选举的概念.

  1. A,B,C是我的集群下可用的服务器(zookeeper术语中的节点).
  2. '/ test_zk/path_of_interest /'(您的"/ 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,版本= 1145,cversion = 0,aversion = 0,ephemeralOwner = 0,dataLength = 185,numChildren = 0 ,pzxid = 678608988239))

  1. 具有最小创建ID(czxid)的节点将被选为领导者领导者选举过程.

  2. 内部的领导者选举给予选举节点(最小的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选举的东西.

我希望这有帮助.