我正在创build一个拥有3名经理和2名工人的docker群。 一个服务在群中运行,并暴露端口80.所以我们可以用任何节点的ip来打这个服务。 但是如果节点出现故障呢? 期望用户总是尝试另一个节点的IP将是非常麻烦的。
那么pipe理这个外部接入点的常见做法是什么? 我可以考虑设置一个DNSlogging来返回多个节点的IP。 在前面设置另一个负载平衡器似乎是一个矫枉过正的问题。
我在这里看到几个选项:
1)一个外部负载平衡器。
如果您在AWS,GCE或其他云提供商上运行,则可以使用负载平衡器作为这些公司提供的服务。 您的DNS名称将指向负载均衡器的IP,您的负载均衡器会将stream量转发到您的节点。
优点:您始终拥有高可用性(负载均衡器是多余的,您至less需要2个节点,而且您还可以继续使用)。 您还可以获得自动故障转移(如果某个节点发生故障,请求将转发到群集的其他节点)。
缺点:负载均衡器花钱
2)“DIY”负载平衡器。
您可以使用haproxy,nginx或任何为您运行负载均衡器服务的代理服务运行另一台服务器。 DNS将指向代理服务器(此时只有一个代理服务器),并将其转发给您的节点。
优点:有限的额外成本(代理甚至可能是您的集群节点之一)。
缺点:你必须设置整个基础设施(故障转移,节点发现只是为了说明你应该关心的两件事情)。 你失去高可用性(只要你不使你的代理冗余,但我保持简单)
3)多个DNSlogging。
您可以按照您的build议设置DNSlogging中的多个IP地址。 在这种情况下,客户端将连接到群集中的随机节点。
优惠:免费
缺点:如果一个节点发生故障,客户端仍然会尝试连接到它,只要你不把它从你的DNS中删除(由于TTL,这需要时间)。
如果有人有其他想法,我很高兴听到