How does a Consul agent know it is the leader of a cluster?
Clash Royale CLAN TAG#URR8PPP
How does a Consul agent know it is the leader of a cluster?
In Consul you can have many agents as servers or clients. Amongst all servers one is chosen as the leader. From the agent's point of view, how does it know it is the leader?
4 Answers
4
The Consul leader is elected via an implementation of the Raft Protocol from amongst the Quorum of Consul Servers. Only Consul instances that are configured as Servers participate in the Raft Protocol communication. The Consul Agent (the daemon) can be started as either a Client or a Server. Only a Server can be the leader of a Datacenter.
The Raft Protocol was created by Diego Ongaro and John Ousterhout from Stanford University in response to the complexity of existing consensus protocols such as Paxos. Raft elects a leader via the use of randomized timers. The algorithm is detailed in Ongaro and Ousterhout's paper.
Consul instances that are configured as Clients communicate with the cluster via the Gossip Protocol which is based on Serf. Serf communication is eventually consistent. The Serf cluster has no central server, each node is considered equal. All nodes (Clients and Servers) in participating the Gossip/Serf Protocol spread messages to their neighbors, which in turn spread messages to their neighbors until the message has propagated to the entire cluster. Sort of like the infection path of a zombie apocalypse. This is done to greatly reduce communication overhead in the cluster as it scales to potentially tens of thousands of nodes.
Consul Clients can forward messages to any Consul Server which will then forward the message to the Leader. Consul Clients do not need to care which Consul Server is the Leader. Only the Servers need to care.
The Consul HTTP API running on any Consul Server will tell you which Server is the leader at $ANY_CONSUL_SERVER/v1/status/leader
. However, this has nothing to do with how Consul Agents do leader election.
$ANY_CONSUL_SERVER/v1/status/leader
You asked how an agent knows it's the leader of the cluster. The type of agent has everything to do with narrowing down who can be the leader.
– jeremyjjbrown
Jun 26 '15 at 22:29
One way is by calling the cluster with http://<localhost_ip_address>:8500/v1/status/leader
http://<localhost_ip_address>:8500/v1/status/leader
This will return the current leader. Then just check the IP address returned against the local IP address.
// , This is how external programs know who is the current leader. But it does not say how that instance of consul itself knows it is the current leader.
– Nathan Basanese
May 1 '17 at 18:46
consul operator raft list-peers also show the relationship between peers;
for example
consul operator raft list-peers
Node ID Address State Voter RaftProtocol
agent1 2a3ae4a0-8193-7da9-f978-911d7df0d184 192.168.110.128:8300 leader true 3
agent2 5ca6550b-c211-d11f-0236-82a9572e2485 192.168.110.133:8300 follower true 3
agent3 10e1b43d-9393-6985-242b-8e31411839c5 192.168.110.137:8300 follower true 3
It will list the result in the consul group by executing "consul info" command enter image description here
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
I hate to shut down an answer, but the first 5 sentences have nothing to do with the question, while only the 6th one contains the same answer as provided before.
– Alexandre Santos
Jun 26 '15 at 22:12