【问题标题】:How can I replicate containers inside docker service when I restart docker daemon?重新启动 docker 守护程序时,如何在 docker 服务中复制容器?
【发布时间】:2018-04-03 14:19:29
【问题描述】:

我使用以下命令为图像 percona XtraDB 集群创建了 docker 服务,其中包含 3 个副本

docker service create \
--name mysql-galera \
--replicas 3 \
-p 3306:3306 \
--network mynet \
--env MYSQL_ROOT_PASSWORD=mypassword \
--env DISCOVERY_SERVICE=10.0.0.2:2379 \
--env XTRABACKUP_PASSWORD=mypassword \
--env CLUSTER_NAME=galera \
perconalab/percona-xtradb-cluster:5.6

我已经用三台机器(以 mach1、mach2、mach3 命名)初始化了 docker swarm,并且都作为管理器加入。并且副本平均分配到三台机器中的每一台

当我试图停止 ma​​ch2 中的 docker 守护程序时,docker 在 ma​​ch3 中又创建了一个副本容器。我再次重新启动了 docker 守护程序,ma​​ch3 仍在运行两个副本,而 ma​​ch2 上什么也没有。我手动删除了 ma​​ch3 中的容器,并且 ma​​ch2 与第三个副本

如何在重启的 docker 机器上自动复制容器?

【问题讨论】:

    标签: docker percona-xtradb-cluster


    【解决方案1】:

    我认为 docker swarm 中没有 docker service re balance 选项......您可以通过使用 --force 选项更新服务来重新分发容器

    docker service update mysql-galera --force
    

    【讨论】:

    • 这是正确的。您希望健康工作负载的移动成为操作控制的操作。您应该设计您的节点,以便一个(或多个,取决于您的故障要求)可能发生故障,并且您的性能/资源仍然很好。一旦这是真的,就没有必要急于将工作负载移回不同的节点。如果您不希望每个节点有多个副本,请在创建服务时使用全局模式。
    【解决方案2】:

    您正在寻找的是一种根据具有容量的主/从节点的可用性自动重新平衡您的副本集的方法。然而,这样做将涉及杀死健康的容器并重新安排它们。

    在 docker swarm 中有一个未解决的问题 https://github.com/moby/moby/issues/24103

    现在,如果您想这样做,最好的方法似乎是向上/向下或创建一个尝试重新调度集群中的容器的部署。

    【讨论】:

    • 我可以使用标志--restart-condition 来实现吗?或者它会解决一半的这种情况?
    • 不清楚你打算如何使用它,但 --restart-condition 只定义了容器的重启策略。
    猜你喜欢
    • 2015-03-08
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2015-11-30
    相关资源
    最近更新 更多