What command could be issued to check whether a ZooKeeper server is a Leader or a Follower?

A ZooKeeper Quorum consisting of three ZooKeeper servers has been created.

The zoo.cfg located on all three ZooKeeper servers looks as follows:

maxClientCnxns=50
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/var/lib/zookeeper
# the port at which the clients will connect
clientPort=2181

server.1=<ip-address-1>:2888:3888
server.2=<ip-address-2>:2888:3888
server.3=<ip-address-3>:2888:3888

Analysis

It is clear that one of the three ZooKeeper servers will become the Leader and the others Followers. If the Leader ZooKeeper server has been shutdown, the Leader election will start again. The aim is to check if another ZooKeeper server will become the Leader if the Leader server has been shut down.


Solution 1:

It is possible to check whether a ZooKeeper server is a leader or follower using the nc command that is included in the netcat package:

echo stat | nc localhost 2181 | grep Mode
echo srvr | nc localhost 2181 | grep Mode #(From 3.3.0 onwards)

If the ZooKeeper server is a leader then the command will return: Mode: leader and otherwise: Mode: follower

Solution 2:

Alternatively the following could be used:

bin/zkServer.sh status

It will print the mode in the output:

ZooKeeper JMX enabled by default
Using config: /home/kafka/zookeeper/bin/../conf/zoo.cfg
Mode: follower