Docker Swarm --advertise-addr 改变
Docker Swarm --advertise-addr changing
我有一个 3 节点群。每个都有一个静态IP地址。我在 ip 192.168.2.100
上有一个 leader node-0,在 192.1682.101
上有一个备份管理器 node-1,在 192.168.2.102
上有一个 worker node-2。 node-0 是初始化 swarm 的领导者,所以 --advertise-addr
是 192.168.2.100
。我可以部署可以登陆任何节点的服务,node-0 处理负载平衡。因此,如果我在 node-2 (192.168.2.102:3306
) 上有一个数据库,它仍然可以从 node-0 192.168.2.100:3306
访问,即使服务不直接在 node-0 运行 上。
但是,当我重新启动 node-0(假设它断电)时,下一位管理器会担任领导角色(node-1)- 正如预期的那样。
但是,现在如果我想访问一个服务,比方说来自客户端(不在集群中的计算机)的 API 或数据库,我必须使用 192.168.2.101:3306
作为我的入口点 ip,因为节点 1 正在处理负载平衡。因此,本质上从外部世界(网络上的其他计算机)来看,swarm 的 ip 地址已更改,这是不可接受且不切实际的。
有没有办法解决这个问题,让给定的经理优先于另一个经理?否则,如何解决此类问题,使 swarm 的入口点 ip 不依赖于代理领导者?
将所有三个节点设为管理器并使用某种负载平衡 DNS 指向所有三个管理器节点。如果其中一个管理器出现故障,您的 DNS 将路由到其他两个管理器之一(无缝或稍微不那么无缝,具体取决于您的 DNS routing/health-check/failover 设置的复杂程度)。当您使用更多节点进行横向扩展时,节点 4、5、6 等都可以成为工作节点,但您将受益于拥有三个而不是一个管理器。
我有一个 3 节点群。每个都有一个静态IP地址。我在 ip 192.168.2.100
上有一个 leader node-0,在 192.1682.101
上有一个备份管理器 node-1,在 192.168.2.102
上有一个 worker node-2。 node-0 是初始化 swarm 的领导者,所以 --advertise-addr
是 192.168.2.100
。我可以部署可以登陆任何节点的服务,node-0 处理负载平衡。因此,如果我在 node-2 (192.168.2.102:3306
) 上有一个数据库,它仍然可以从 node-0 192.168.2.100:3306
访问,即使服务不直接在 node-0 运行 上。
但是,当我重新启动 node-0(假设它断电)时,下一位管理器会担任领导角色(node-1)- 正如预期的那样。
但是,现在如果我想访问一个服务,比方说来自客户端(不在集群中的计算机)的 API 或数据库,我必须使用 192.168.2.101:3306
作为我的入口点 ip,因为节点 1 正在处理负载平衡。因此,本质上从外部世界(网络上的其他计算机)来看,swarm 的 ip 地址已更改,这是不可接受且不切实际的。
有没有办法解决这个问题,让给定的经理优先于另一个经理?否则,如何解决此类问题,使 swarm 的入口点 ip 不依赖于代理领导者?
将所有三个节点设为管理器并使用某种负载平衡 DNS 指向所有三个管理器节点。如果其中一个管理器出现故障,您的 DNS 将路由到其他两个管理器之一(无缝或稍微不那么无缝,具体取决于您的 DNS routing/health-check/failover 设置的复杂程度)。当您使用更多节点进行横向扩展时,节点 4、5、6 等都可以成为工作节点,但您将受益于拥有三个而不是一个管理器。