首页 > 解决方案 > 是否可以使用 Docker Swarm 在不同节点上运行不同数量的副本?

问题描述

我在 2 个节点(1 = 经理和 1 = 工人)上运行 Docker Swarm。
我有以下服务:

由于许多队列工作人员(Laravel Horizo​​n),我正在运行一个 Laravel 应用程序,该应用程序在后台进行了大量处理。它工作得很好。

但我想要的是例如在节点 2(主机 2)上运行 2 个 PHP-FPM 副本,并且在节点 1(主机 1)上仅运行 1 个副本。所以总共有3个副本。
当我简单地更改replicas: 3第三个副本时,可能会出现在节点 1节点 2上。
但是由于资源的原因,我不想在 node1 上再有 PHP-FPM 副本,因为我的数据库、Redis、Web 服务器也已经在运行。

目前我有 2 个副本分布在我的 2 个节点上。

deploy:
      mode: replicated # "global": exactly one container per swarm node; "replicated": a specified number of containers
      replicas: 2
      placement:
        # max_replicas_per_node: 1
        # constraints:
        #  - node.hostname == small-websites-3
        #  - node.role == manager
        preferences:
          - spread: node.hostname == host1
          - spread: node.hostname == host2

正如您在上面的 docker-compose.yml 配置中看到的那样,我已经注释掉了放置约束,因为它们没有达到我想要的效果。
所以是的,我希望有一种方法可以在奇数副本的情况下为每个节点指定不同数量的副本,因为我相信当我有偶数时 Docker Swarm 可以很好地管理它(即 4 个副本会去:2x on节点 1 和节点 2 上的 2x)。

我希望这是有道理的并且是可能的(无需升级我的 node1 并使用偶数数量的副本)?

标签: dockerdocker-composedocker-swarm

解决方案


推荐阅读