导读:本期聚焦于小伙伴创作的《如何在Linux上配置高可用的容器编排平台如Docker Swarm》,敬请观看详情。把单节点Docker Swarm直接用于生产环境,管理节点一旦宕机整个集群便会失去调度能力。高可用配置的核心在于将多个管理节点组成Raft共识组,使控制平面具备容错性。本文以三台Linux主机为例,说明如何通过初始化Swarm、加入工作节点、配置多管理节点及负载均衡来搭建稳定集群。还会涉及防火墙端口开放、节点角色变更与故障恢复操作,帮助运维人员在无外部编排工具依赖下,用原生Swarm实现容器服务持续可用,降低单点故障带来的业务中断风险。

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

如何在Linux上配置高可用的容器编排平台如Docker Swarm

环境准备与基础设置

在开始之前,需要准备三台及以上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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。