Another approach would be, 

Step-1) All the clients will try to create a ephemeral znode, say 'leader' 
under one common path /myapp/leaderelection/ 
Step-2) Whoever succeeds will become leader and all the others will be getting 
KeeperException.NodeExistsException. On this exception, clients can add a 
watcher to know the 'leader' znode deletion.
Step-3) On znode delete watch notification, again, this cycle continues and 
perform step-1.

-Rakesh

-----Original Message-----
From: Arindam Mukherjee [mailto:[email protected]] 
Sent: 07 November 2013 11:09
To: [email protected]
Subject: Electing a leader among clients

Using ZooKeeper I want to create a cluster of hosts where a client process on 
one of the hosts can play the role of a leader or controller and coordinate 
tasks with processes across the rest of the hosts. As the nodes are hosts 
similar, the choice of a leader can be arbitrary. I was thinking of using 
ZooKeeper for this purpose.

I am very new to ZooKeeper and don't know enough of the available primitives. 
What would be a good way to achieve this?

Here is one thought - please let me know if this makes sense or something else 
which would work better:
1. Each ZoooKeeper client gets a monotonically increasing ID when it 
establishes a session with ZooKeeper server. One way could be to create an 
ephemeral sequential znode and use the assigned numeric suffix as the id - 
store other data in this znode.
2. Whichever client gets the lowest id becomes the leader. However, for this to 
work the entire range of ids assigned to live clients at any point in time 
should be available to all the clients so that each client can independently 
arrive at the same decision. How to do this?

Thanks.
Arindam

Reply via email to