You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重启Docker守护进程后,如何维持Docker Service的容器副本数?

重启Docker守护进程后,如何维持Percona XtraDB Cluster服务的3个副本数?

你已经在mach1、mach2、mach3三台机器上搭好了Docker Swarm集群,还创建了带3个副本的mysql-galera服务——担心重启Docker后副本数掉链子?别慌,咱们一步步来搞定这个问题:

先搞明白核心逻辑

Docker Swarm的服务调度是集群级管控的,只要集群里的管理节点(manager)能正常运行,哪怕某台节点重启Docker,Swarm会自动检测节点状态变化,照着你当初设置的--replicas 3配置,自动调度新容器补上,保证副本数达标。不过咱们可以做些配置让这个过程更稳妥。

1. 把Swarm集群搞成高可用(重中之重!)

要是你只有一个管理节点,那这个节点重启Docker的时候,整个集群的调度就暂时歇菜了。既然你有三台机器,不如把mach2和mach3都升级成管理节点:

# 在当前管理节点mach1上执行,把mach2提升为manager
docker node promote mach2
# 再把mach3也升级成manager
docker node promote mach3

这样哪怕其中一台manager重启Docker,另外两台还能正常干活,服务副本数不会出问题。

2. 让Docker守护进程开机自启

每台机器上都得把Docker设成开机自动启动,不然机器重启后Docker没起来,Swarm节点也没法归队:

# 针对systemd系统(比如Ubuntu 16.04+、CentOS 7+)
sudo systemctl enable docker

要是你的系统用的是upstart,就执行sudo update-rc.d docker defaults。

3. 确认服务的重启策略(可选但更稳妥)

Docker Swarm服务默认的重启策略是any——不管容器是正常退出还是崩溃,都会自动重启。不过咱们可以显式更新这个策略,让它更贴合Galera集群的需求:

# 更新已有的mysql-galera服务的重启配置
docker service update --restart-condition any --restart-delay 5s mysql-galera

--restart-condition any保证任何退出场景都会重启容器,--restart-delay 5s是让它重启前等5秒,避免短时间内反复重启搞崩集群同步。

4. 重启后的检查步骤

重启某台机器的Docker后,咱们可以用这几个命令确认状态:

  • 查看所有节点状态:docker node ls,确保所有节点都是Ready状态
  • 查看服务副本情况:docker service ps mysql-galera,你会看到3个副本,可能有一个是新调度的(如果重启节点上的容器被销毁了),等一会儿状态就会变成Running
  • 查看集群日志:docker service logs mysql-galera,检查有没有集群同步的错误信息,确保Galera集群正常运行

额外要注意的点

  • 你配置的DISCOVERY_SERVICE是10.0.0.2:2379(应该是etcd吧?),这个服务也得保证高可用,而且Docker重启后能正常运行,不然Galera节点没法互相发现,集群启动会出问题。
  • 如果某个节点重启后一直没法加入Swarm,可以先在该节点执行docker swarm leave --force,然后用manager节点生成的token重新加入:docker swarm join --token <你的节点加入token> <任意manager节点IP>:2377(token可以在manager节点用docker swarm join-token worker或manager查看)

内容的提问来源于stack exchange,提问作者Manjunath PV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:08:57