在Consul中,您可以有许多代理作为服务器或客户端。在所有服务器中,一个被选为领导者。从代理人的角度来看,它如何知道这是领导者?Consul代理如何知道它是集群的领导者?
回答
的一种方法是通过调用http://<localhost_ip_address>:8500/v1/status/leader
该集群将返回当前的领导者。然后检查对本地IP地址返回的IP地址。
领事的领导者通过执行领事服务器仲裁中的Raft Protocol来选举。只有配置为服务器的Consul实例参与Raft协议通信。 Consul Agent(守护进程)可以作为Client或Server启动。只有服务器才能成为数据中心的领导者。
Raft协议由斯坦福大学Diego Ongaro和John Ousterhout根据现有共识协议(如Paxos)的复杂性创建。 Raft通过使用随机计时器来选择领导者。该算法详述于Ongaro and Ousterhout's paper。
配置为客户端的Consul实例通过基于Serf的Gossip Protocol与集群进行通信。农奴沟通最终是一致的。 Serf集群没有中央服务器,每个节点被认为是相等的。参与Gossip/Serf协议的所有节点(客户端和服务器)将消息传播到它们的邻居,然后将消息传播到它们的邻居,直到消息传播到整个集群。有点像僵尸启示录的感染路径。这样做可以极大地减少集群中的通信开销,因为它可以扩展到数以万计的节点。
Consul客户端可以将消息转发给任何Consul服务器,然后该服务器会将消息转发给Leader。领事客户不需要关心哪个领事服务器是领导者。只有服务器需要关心。
运行在任何Consul服务器上的Consul HTTP API会告诉你哪个服务器是$ANY_CONSUL_SERVER/v1/status/leader
的领导者。但是,这与领事代理如何进行领导人选举无关。
我讨厌关闭答案,但前5句与问题无关,而只有第6句与前面提供的答案相同。 –
您问过代理如何知道它是群集的领导者。代理的类型与缩小谁可以成为领导者有关。 – jeremyjjbrown
- 1. 如何更改etcd群集中的领导者?
- 2. 找到代理的领事集群
- 3. 从领事“否群集的领导者”恢复状态
- 4. 自动选择节点集群中的领导者
- 5. 当领导人死亡时更改动物园管理员群集领导
- 6. 群集群领事设置
- 7. 如何知道我是否在群集模式下运行Puma?
- 8. Msmq over cluster,如何知道服务是否在群集下?
- 9. 建立新的服务领导者并通知领导
- 10. consul集群中的服务器数量限制是多少?
- 11. 如何将consul集群数据备份到S3存储
- 12. 如何知道.bashrc谁是发起者?
- 13. 的Silverlight CaptureDeviceConfiguration.RequestDeviceAccess() - 它是如何知道的?
- 14. Node.js的集群:管理工作者
- 15. Glassfish:如何知道群集中的哪台机器正在处理请求
- 16. scikit-learn如何知道集群中的文档?
- 17. 如何迭代JSON属性不知道它是否是数组?
- 18. 正向代理集群
- 19. 如果一个对象知道很多它的所有者,它是一种代码味道吗?
- 20. 接口知道它的实现者
- 21. Ajax和jQuery代码不知道它是如何工作的
- 22. JMS使用者如何在Oracle Message Queue的代理群集上工作?
- 23. 海龟群体的领导者选择NetLogo
- 24. 乌龟群体的领导者选择(NetLogo)
- 25. NSDate如何知道它是TimeZone?
- 26. blogger.com如何知道它是我?
- 27. 领导者选择
- 28. 我如何知道我的卷发代理是否已关闭?
- 29. 如何知道代理是卷曲/ PHP的工作
- 30. 如何使批处理文件知道它是否升高
//,这是外部程序如何知道当前领导者是谁。但它并没有说明这位领事本身如何知道这是当前的领导者。 –
@NathanBasanese我不认为亚历山大桑托斯关心什么是正确的答案。 – jeremyjjbrown