如何在Docker-Swarm模式下完成负载平衡

Sha*_*ean 23 load-balancing docker docker-swarm-mode

我正在开发一个使用docker-swarm建立云架构的项目.我知道使用swarm我可以部署服务的副本,这意味着该图像的多个容器将运行以服务请求.

我还读到docker有一个内部负载均衡器来管理这个请求分配.

但是,我需要帮助理解以下内容:

假设我有一个容器,将服务公开为REST API或说它是一个Web应用程序.如果我在swarm中部署了多个容器(副本),并且我有其他容器(运行一些应用程序)与此HTTP/REST服务通信.

然后,当我写那些IP:PORT组合的应用程序时,我会使用吗?是否有任何工作节点IP运行这些服务?即使在运行相同服务的其他工作人员/经理之间,这样做是否会适当地分配负载?

或者我应该调用管理器,而管理器又适当地处理路由(即使管理器节点没有运行此特定服务的容器)?

谢谢.

Far*_*ahi 27

当我写那些IP:PORT组合的应用程序时我会使用吗?是否有任何工作节点IP运行这些服务?

您可以使用参与swarm的任何节点,即使该节点上不存在相关服务的副本也是如此.所以你将使用Node:HostPort组合.入口路由网格将请求路由到活动容器.

一张价值一万字的图片

在此输入图像描述

即使在运行相同服务的其他工作人员/经理之间,这样做是否会适当地分配负载?

入口控制器默认会循环.

现在客户端应该使用dns循环来访问docker swarm节点上的服务.将发生经典的DNS缓存问题.为了避免这种情况,我们可以像HAproxy一样使用外部负载均衡器.

在此输入图像描述

  • 你确定它总是循环吗?你能链接到那个事实吗?我觉得这是一个奇怪的设计选择。可能会产生大量不必要的网络流量,例如,如果一个容器需要另一个容器的服务,并且在同一主机上有一个副本 - 应该优先考虑该副本,以避免不必要的网络流量。 (2认同)