在Consul中,您可以将许多代理作为服务器或客户端。在所有服务器中,一个被选为领导者。从代理人的角度来看,它如何知道它是领导者?
答案 0 :(得分:15)
领事领导者是通过领事服务器法定人数中Raft Protocol的实施来选出的。只有配置为服务器的Consul实例才会参与Raft协议通信。 Consul Agent(守护程序)可以Client或Server启动。只有服务器才能成为数据中心的领导者。
筏协议由斯坦福大学的Diego Ongaro和John Ousterhout创建,以回应Paxos等现有共识协议的复杂性。筏通过使用随机定时器选出领导者。该算法详见Ongaro and Ousterhout's paper。
配置为客户端的Consul实例通过Gossip Protocol基于Serf与群集进行通信。自我交流最终是一致的。 Serf集群没有中央服务器,每个节点被认为是相等的。参与Gossip / Serf协议的所有节点(客户端和服务器)将消息扩展到它们的邻居,后者又将消息传播到它们的邻居,直到消息传播到整个集群。有点像僵尸天启的感染路径。这样做可以大大减少集群中的通信开销,因为它可以扩展到可能有数万个节点。
Consul客户端可以将消息转发给任何Consul Server,然后Consul Server会将消息转发给Leader。领事客户无需关心哪个Consul Server是领导者。只有服务器需要关心。
任何Consul Server上运行的Consul HTTP API都会告诉您哪个服务器是$ANY_CONSUL_SERVER/v1/status/leader
的领导者。但是,这与领事代理人如何进行领导选举无关。
答案 1 :(得分:9)
一种方法是使用http://<localhost_ip_address>:8500/v1/status/leader
这将返回当前的领导者。然后只需检查根据本地IP地址返回的IP地址。
答案 2 :(得分:1)
领事操作员排行榜对等点也显示对等点之间的关系; 例如
领事操作员排行榜同行
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
答案 3 :(得分:0)
它将通过执行“ consul info”命令enter image description here
在consul组中列出结果。答案 4 :(得分:0)
Consul使用RAFT共识算法。 下面的链接可帮助您了解筏的视觉效果(还显示了如何逐步选拔成员为领导者)。
参考来自官方领事文档:https://www.consul.io/docs/internals/consensus.html