在Linux环境下利用Docker Swarm搭建高可用容器编排平台,关键在于消除管理节点的单点故障。Swarm模式内建了基于Raft算法的分布式一致性机制,只要集群中正常工作的管理节点数量满足多数派原则,控制平面就能继续完成服务调度与状态维护。下面以三台运行Ubuntu的服务器为例,逐步说明配置过程。

环境准备与基础设置
在开始之前,需要准备三台及以上Linux主机,建议系统为Ubuntu 20.04或CentOS 7以上版本,且各节点之间网络互通。每台机器都应安装相同版本的Docker Engine,版本不一致可能导致集群协议不兼容。可以通过Docker官方仓库安装,也可以使用系统包管理器直接获取。
高可用Swarm集群对网络端口有明确要求。管理节点之间需开放2377端口用于集群管理通信,7946端口用于节点间通信,4789端口用于Overlay网络。若系统启用了防火墙,必须放行这些端口。例如在Ubuntu上使用ufw,可执行如下命令:
sudo ufw allow 2377/tcp sudo ufw allow 7946/tcp sudo ufw allow 7946/udp sudo ufw allow 4789/udp sudo ufw reload
除了防火墙,还要确保各主机的hostname不同且能被互相解析,可以在/etc/hosts中配置静态映射,或者使用内部DNS。这一步常被忽略,却会直接导致节点加入失败或频繁掉线。
初始化Swarm管理节点
选择其中一台机器作为第一个管理节点,执行初始化命令。该节点会成为Leader,并生成用于其他节点加入的令牌。初始化时需指定对外通信地址,通常是该机私有网卡IP,避免节点间使用不可达地址互联。
# 在node1上初始化Swarm,替换IP为实际内网地址 docker swarm init --advertise-addr 192.168.0.1:2377
命令执行后会输出工作节点和管理节点的加入命令。管理节点加入令牌不同于工作节点,它赋予新节点参与Raft选举的权限。若要查看当前管理节点令牌,可使用如下指令:
docker swarm join-token manager
此时单节点Swarm已经运行,但还不具备高可用性。一旦这台机器宕机,集群将无法作出调度决策。接下来需要把另外两台机器以管理节点身份加入,形成三节点共识组,允许一台机器故障而不影响控制平面。
加入多管理节点实现高可用
在第二台与第三台主机上,粘贴初始化时获得的manager令牌命令即可。假设令牌为TOKEN_STR,操作如下:
# 在node2与node3执行 docker swarm join --token TOKEN_STR 192.168.0.1:2377
加入完成后,在任意管理节点运行docker node ls,可以看到三台节点MANAGER STATUS列分别显示为Leader、Reachable、Reachable。Raft机制会保证只有Leader处理写请求,其他管理节点同步状态,并在Leader失效时重新选举。生产环境推荐管理节点数为奇数,三或五台较为常见。
如果后期需要扩充工作节点,只需使用worker令牌将其加入,工作节点不参加选举,仅负责运行任务。这样既分散了调度压力,也避免了管理节点过多造成共识延迟。注意,管理节点同时也可承载任务,但高负载可能影响共识性能,必要时可设置节点可用性为drain来专用于管控。
部署服务与验证故障转移
集群就绪后,便可部署具备副本数的服务。以下示例启动一个Nginx服务,指定三个副本并暴露在8080端口:
docker service create --name web --replicas 3 --publish 8080:80 nginx:alpine
通过docker service ps web能够看到容器被均匀调度到不同节点。此时若手动停止Leader节点上的Docker服务,等待数秒后,剩余管理节点会选举出新Leader,服务副本也会在可用节点上重新平衡。整个过程对客户端请求影响极小,体现了高可用价值。
为了进一步提升接入层稳定性,可在集群前端部署HAProxy或Keepalived,将多个管理节点的API端口或业务端口做负载均衡。这样即便某台机器完全离线,运维通道和业务流量依旧可用。Swarm本身不提供对外VIP,需要结合Linux网络工具补齐这一层。
常见维护操作与避坑点
节点因维护需临时下线时,应先将其 draining,让调度器迁移其上任务:
docker node update --availability drain node2
维护结束再改回active。直接断电或kill管理节点进程虽不会立刻破坏集群,但若同时离线节点数达到半数以上,Raft组将无法提交日志,集群变为只读甚至不可用。因此在扩容或缩容时要分批操作,并始终保留多数派在线。
另一个易错点是将--advertise-addr误设为公网IP却未做安全限制,导致Swarm端口暴露在外,存在未授权访问风险。生产环境应限定在私有网络,并配合TLS与防火墙策略。定期备份Swarm状态虽无原生一键命令,但可通过镜像迁移与堆栈文件重放降低灾难恢复成本。
小结
在Linux上配置高可用Docker Swarm并不依赖复杂外部组件,核心在于奇数个管理节点、正确网络策略与合理的服务副本设计。掌握节点角色切换、令牌管理与故障模拟,就能用较低成本获得稳定的容器编排能力,适合中小规模业务场景。
Docker_Swarm高可用Linux配置修改时间:2026-08-02 10:24:27