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

时间:2016-08-24 13:45:05

标签: python apache-zookeeper kazoo apache-curator

这是kazoo readthedocs上提到的代码

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

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

1 个答案:

答案 0 :(得分:5)

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

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

  1. A,B,C是我的群集下的可用服务器(zookeeper术语中的节点)。
  2. ' / test_zk / path_of_interest /'(您的" /选举路径")是我感兴趣的路径,我将使用dataWatchers创建节点,添加数据和观看节点。
  3. 在此路径下创建短暂节点。
  4.   

    在[1]中:zk_client.create(' test_zk / path_of_interest / test_ephemeral',   短暂= TRUE)

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

      在[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)一个非重入锁定,并为该锁定设置一些标识符,用于验证谁是竞争者中的领导者(你的"我的标识符"。)

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

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

        我希望这会有所帮助。