【问题标题】:Docker swarm scaling behaviour on port mapping端口映射上的 Docker 群扩展行为
【发布时间】:2017-09-25 14:21:21
【问题描述】:

我有一个由三个节点组成的 swarm:

$ sudo docker node ls
ID                            HOSTNAME         STATUS              AVAILABILITY        MANAGER STATUS
i12s3zxsn4vu1c98bv3i5idr8     node03           Ready               Active
i2ckxvsju4tmommxim3dbfq7l     node02           Ready               Active
wak4isl46dn7pbo39drrhphju *   node01           Ready               Active              Leader

然后我在该 swarm 上运行 1 个 nginx 副本并将其端口映射到 8080:

$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx
$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
neahnb9mvi1i        nginx               replicated          1/1                 nginx:latest        *:8080->80/tcp

从那里,我可以通过http://node01:8080 访问 nginx

接下来,我将 nginx 实例扩展到 6 个:

$ sudo docker service scale nginx=6
$ sudo docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
neahnb9mvi1i        nginx               replicated          6/6                 nginx:latest        *:8080->80/tcp

从那里,我仍然可以通过http://node01:8080 访问 nginx。

但是,如果 docker swarm 将多个节点公开为一个唯一的主机,那么在我所有的 nginx 服务都映射到同一个 8080 端口上的这种扩展操作期间,他如何管理该端口? swarm 内部完成的所有服务实例之间是否存在循环负载平衡并在 8080 上返回答案?

【问题讨论】:

    标签: docker swarm horizontal-scaling


    【解决方案1】:

    我相信对主机的请求是在循环类型分配中分配的。

    找到这篇方便的文章http://blog.scottlogic.com/2016/08/30/docker-1-12-swarm-mode-round-robin.html。查看标题为“INGRESS AND ROUND ROBIN 负载平衡”的部分。

    【讨论】:

      【解决方案2】:

      您可以通过使用 swarm 中任何机器的 IP 和该端口来访问任何暴露其端口的服务(使用堆栈部署)。然后,Docker swarm 将该请求转发到其中一个副本。 哪个副本由健康状态(不健康的服务被忽略)和配置的负载平衡选项决定,默认情况下是轮询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-14
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 2022-10-17
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        相关资源
        最近更新 更多