Consul代理如何知道它是集群的领导者? http://thesecretlivesofdata.com/raft/

问题描述 投票:10回答:5

在Consul中,您可以有许多代理作为服务器或客户端。在所有服务器中,一个被选为领导者。从代理的角度来看,它怎么知道它是领导者?

consul
5个回答
15
投票

领事领导者是通过从领事服务器法定人数中通过Raft Protocol的实现选举产生的。只有配置为服务器的Consul实例才能参与Raft Protocol通信。 Consul Agent(守护程序)可以作为ClientServer启动。只有服务器可以成为数据中心的领导者。

[Raft协议是由斯坦福大学的Diego Ongaro和John Ousterhout创建的,以应对现有共识协议(例如Paxos)的复杂性。 Raft通过使用随机计时器选举一位领导者。该算法在Ongaro and Ousterhout's paper中详细介绍。

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

领事客户端可以将消息转发到任何领事服务器,然后领事服务器将消息转发到领导者。 Consul客户无需关心哪个Consul Server是领导者。仅服务器需要维护。

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


10
投票

一种方法是使用http://<localhost_ip_address>:8500/v1/status/leader调用集群>

这将返回当前的领导者。然后只需对照本地IP地址检查返回的IP地址即可。


2
投票

领事操作员排行榜-同伴也显示同伴之间的关系;例如


0
投票

它将通过执行“ consul info”命令enter image description here在consul组中列出结果>


0
投票

Consul使用RAFT共识算法。下面的此链接帮助您了解筏的视觉效果(还显示了如何逐步选出成员为领导者)。

© www.soinside.com 2019 - 2024. All rights reserved.