How does a Consul agent know it is the leader of a cluster?

前端 未结 5 2066
既然无缘
既然无缘 2021-02-14 09:40

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?

相关标签:
5条回答
  • 2021-02-14 09:51

    One way is by calling the cluster with 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.

    0 讨论(0)
  • 2021-02-14 09:52

    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
    
    0 讨论(0)
  • 2021-02-14 10:10

    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.

    0 讨论(0)
  • 2021-02-14 10:15

    Consul uses RAFT Consensus Algorithm. This link below helps you understand how raft works visually (Which also shows how a member is elected as leader step by step).

    http://thesecretlivesofdata.com/raft/

    Reference is from official consul documentation: https://www.consul.io/docs/internals/consensus.html

    0 讨论(0)
  • 2021-02-14 10:16

    It will list the result in the consul group by executing "consul info" command enter image description here

    0 讨论(0)
提交回复
热议问题