我有一个3节点群。每个都有一个静态IP地址。我在ip 192.168.2.100上有一个领导者node-0,在192.1682.101上有一个备份管理器node-1,在192.168.2.102上有一个工作节点2。 node-0是初始化群组的领导者,因此--advertise-addr192.168.2.100。我可以部署可以在任何节点上登陆的服务,而节点0处理负载平衡。因此,如果我在节点2(192.168.2.102:3306)上有一个数据库,即使该服务不是直接在节点0上运行,它仍然可以从节点0的192.168.2.100:3306进行访问。

docker - Docker Swarm --advertise-addr更改-LMLPHP

但是,当我重新启动节点0(假设它断电)时,排队的下一个管理者将担任领导角色(节点1),这与预期的一样。

但是,现在,如果我想访问服务,比方说从客户端(不在群中的计算机)访问API或数据库,则必须使用192.168.2.101:3306作为我的入口点ip,因为node-1正在处理负载平衡。因此,基本上是从外部环境(网络上的其他计算机)来看,群集的ip地址已更改,这是 Not Acceptable ,也是不切实际的。

有没有办法解决此问题,以使给定的经理优先于其他经理?否则,如何解决此类问题,以使群体的入口点ip不依赖于代理领导者?

最佳答案

使所有三个节点成为管理者,并使用某种负载平衡DNS指向所有三个管理者节点。如果其中一个管理器发生故障,则您的DNS将路由到其他两个管理器之一(根据您的DNS路由/运行状况检查/故障转移设置的复杂程度,无缝或无缝地无缝路由)。当您使用更多节点进行横向扩展时,节点4、5、6等都可以成为工作节点,但是拥有3个管理器而不是1个管理器将使您受益。

关于docker - Docker Swarm --advertise-addr更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48333882/

10-13 08:01