2014-12-31 39 views

回答

8

的一种方法是通过调用http://<localhost_ip_address>:8500/v1/status/leader

该集群将返回当前的领导者。然后检查对本地IP地址返回的IP地址。

+1

//,这是外部程序如何知道当前领导者是谁。但它并没有说明这位领事本身如何知道这是当前的领导者。 –

+0

@NathanBasanese我不认为亚历山大桑托斯关心什么是正确的答案。 – jeremyjjbrown

11

领事的领导者通过执行领事服务器仲裁中的Raft Protocol来选举。只有配置为服务器的Consul实例参与Raft协议通信。 Consul Agent(守护进程)可以作为ClientServer启动。只有服务器才能成为数据中心的领导者。

Raft协议由斯坦福大学Diego Ongaro和John Ousterhout根据现有共识协议(如Paxos)的复杂性创建。 Raft通过使用随机计时器来选择领导者。该算法详述于Ongaro and Ousterhout's paper

配置为客户端的Consul实例通过基于SerfGossip Protocol与集群进行通信。农奴沟通最终是一致的。 Serf集群没有中央服务器,每个节点被认为是相等的。参与Gossip/Serf协议的所有节点(客户端和服务器)将消息传播到它们的邻居,然后将消息传播到它们的邻居,直到消息传播到整个集群。有点像僵尸启示录的感染路径。这样做可以极大地减少集群中的通信开销,因为它可以扩展到数以万计的节点。

Consul客户端可以将消息转发给任何Consul服务器,然后该服务器会将消息转发给Leader。领事客户不需要关心哪个领事服务器是领导者。只有服务器需要关心。

运行在任何Consul服务器上的Consul HTTP API会告诉你哪个服务器是$ANY_CONSUL_SERVER/v1/status/leader的领导者。但是,这与领事代理如何进行领导人选举无关。

+0

我讨厌关闭答案,但前5句与问题无关,而只有第6句与前面提供的答案相同。 –

+3

您问过代理如何知道它是群集的领导者。代理的类型与缩小谁可以成为领导者有关。 – jeremyjjbrown

相关问题