当前位置: 首页 > 面试题库 >

Docker 1.12群模式-单个节点上相同服务的负载均衡任务

田权
2023-03-14
问题内容

在Docker
1.12集群模式下,如果我在同一个节点上运行多个同一个服务的任务并发布相同的端口,则可以在这些任务之间进行任何形式的负载平衡吗?或者,拥有更多服务实例而不是节点数量的目的是什么?
例如。

node swarm init
node service create --name web --replicas=2 --publish=80:80 nginx

现在,如果我打开浏览器并访问http:// localhost
/(多次刷新页面),所有连接似乎都由同一任务处理,就像这样做:

docker logs [container1]
docker logs [container2]

PS:好的,我知道只有一个节点集群是没有意义的,但是如果我在集群中有10个节点(服务扩展到10个副本),似乎也会发生同样的情况,然后我失去了其中一个节点(该服务的2个任务将在同一节点上运行,其中一个将永远不会收到连接)。

谢谢。


问题答案:

不,即使在同一节点上运行多个容器,路由网格也确实在所有容器之间分配请求。

您不会在股票nginx图像中看到它,因为它配置了高保活设置,因此您的客户端在刷新时会不断返回相同的容器。

请尝试使用此自定义Nginx图像:

docker service create --name nginx --replicas 10 -p 80:80 sixeyed/nginx-with-hostname

(sixeyed / nginx-with-hostname是自动构建的,您可以在GitHub上检查源代码。)

指定了一个1秒钟的保持活动状态,以及一个自定义响应标头X-Host,该标头告诉您服务器的主机名-在这种情况下,它将是容器ID。

我提出了三个连续的请求,这些请求均由不同的容器提供:

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 5920bc3c7659

> curl -k http://my-swarm.com/ | grep X-Host    
X-Host: eb228bb39f58

> curl -k http://my-swarm.com/ | grep X-Host
X-Host: 891bafd52c90

这些容器都恰好在2节点群集中的管理器节点上运行。其他请求由工作器上的容器满足,因此Docker将它们分配给所有任务。



 类似资料:
  • 用于设置容器内pod的访问方式。 服务 服务定义了访问后端Pod的访问方式。 路由 路由是允许访问集群内路由的规则集合。

  • 包含负载均衡集群及节点。 云联壹云 平台提供的本地IDC的负载均衡功能需要管理员先部署负载均衡集群和LBAgent转发节点。 云联壹云 支持负载均衡多集群功能,用户可根据需求配置负载均衡集群以及集群下的转发节点LBAgent,部署集群和转发节点后才可以部署负载均衡实例等。 集群为一组LBAgent转发节点的集合,同一时刻集群中只有一个转发节点处于MASTER,用于监控负载监控实例配置的IP地址和端

  • 负载均衡即服务(Load Balance as a Service,LBaaS)是一项网络高级服务。 顾名思义,它允许租户动态的在自己的网络创建一个负载均衡设备。 负载均衡,可以说是分布式系统中比较基础的组件,它接收前端过来的请求,然后将请求按照某种均衡的策略转发给后端资源池中的某个处理单元,以完成处理。进而可以实现高可用性和横向的扩展性。 OpenStack Neutron 通过高级服务扩展的形

  • 通过添加节点来使集群的负载平衡。只要workder节点符合service的要求,service的task会被均匀的分配到不同的节点上。当限制service在指定类型的节点上运行时,例如指定节点CPU的个数或者内存的容量,节点如果没有达到这些指定的要求,task是不会在这样的节点上运行的。

  • Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider来适应不同的应用场景。随着kubernetes用户的激增,用户场景的不断丰富,又产生了一些新的负载均衡机制。目前,kubernetes中的负载均衡大致可以分为以下几种机制,每种机制都有其特定的应用场景: Service:直接用Service

  • 从我们的应用程序创建和运行开始,我们就需要一种发送信息到外边的方法。如果我们当前运行多个 app, 它们也需要一种方法来找到彼此。 我们可以通过域名系统(DNS)使用Mesos-DNS作为服务发现。Mesos-DNS 会给正运行在 Mesos 上的每个应用程序生成一个主机名, 在当前的机器上把这些名字转化成IP地址和端口。如果通过多个 framework(不只是 Marathon)发布应用程序,M