使用 Docker Swarm 部署高可用集群是一种有效的方式,它通过将多个 Docker 主机组成一个虚拟的单一系统,提供容错性、负载均衡和服务发现等功能。以下是详细的部署步骤和关键概念:

1. 核心概念

  • Swarm 集群:由多个 Docker 节点(物理或虚拟机)组成,分为管理节点(Manager)和工作节点(Worker)。
    • 管理节点:负责集群状态调度、服务编排(如 Raft 一致性算法确保高可用)。
    • 工作节点:执行实际容器任务。
  • 服务(Service):定义容器副本数、镜像、网络等,Swarm 自动分发到节点。
  • 高可用原理:多个管理节点(推荐至少 3 个)通过 Raft 共识协议同步数据,避免单点故障。若主管理节点失效,其他节点自动选举新主。

2. 部署步骤

前提条件
  • 多台主机(Linux/Windows)安装 Docker Engine(版本 ≥ 1.12)。
  • 节点间网络互通(开放端口:2377/TCP管理、7946/UDP-TCP节点通信、4789/UDP overlay网络)。
步骤 1:初始化 Swarm

在第一个管理节点执行:

docker swarm init --advertise-addr <MANAGER_IP>

输出包含工作节点和管理节点加入令牌(Token),保存备用。

步骤 2:添加节点
  • 添加管理节点(高可用关键):
    docker swarm join-token manager  # 获取管理节点令牌
    # 在其他管理节点运行输出的命令
    
  • 添加工作节点
    docker swarm join-token worker  # 获取工作节点令牌
    # 在工作节点运行命令
    
步骤 3:部署服务

示例:部署 Nginx 服务(3 副本,跨节点分布):

docker service create \
  --name nginx \
  --replicas 3 \
  --publish published=80,target=80 \
  --detach=false \
  nginx:latest
步骤 4:验证集群
  • 查看节点状态:
    docker node ls  # 应显示所有节点状态(Ready/Active)
    
  • 查看服务分布:
    docker service ps nginx  # 确认副本在不同节点运行
    
步骤 5:配置高可用特性
  • 重启策略:服务自动重启异常容器。
    docker service update --restart-condition any nginx
    
  • 滚动更新:无中断更新服务(分批替换容器)。
    docker service update \
      --image nginx:new-version \
      --update-parallelism 2 \
      --update-delay 10s \
      nginx
    
  • 健康检查:结合容器健康检测(HEALTHCHECK)自动恢复。
步骤 6:网络与存储
  • Overlay 网络:跨节点容器通信。
    docker network create -d overlay my-net
    docker service update --network-add my-net nginx
    
  • 数据持久化:使用卷(Volume)或绑定挂载(Bind Mount)避免数据丢失。
    docker volume create app-data
    docker service update --mount type=volume,source=app-data,target=/data nginx
    

3. 高可用最佳实践

  • 管理节点数量:至少 3 个管理节点(Raft 要求多数存活)。
  • 监控与告警
    • 集成 Prometheus/Grafana 监控节点和服务状态。
    • 设置告警(如节点下线、服务副本不足)。
  • 备份 Swarm 配置:定期备份 Raft 数据(位于 /var/lib/docker/swarm)。
  • 安全措施
    • 启用 TLS 加密节点通信。
    • 限制管理节点访问(防火墙规则)。

4. 故障模拟与恢复

  • 管理节点故障:自动选举新主,无需手动干预。
  • 工作节点故障:Swarm 将故障节点任务重新调度到健康节点。
  • 服务伸缩:动态调整副本数应对负载。
    docker service scale nginx=5  # 扩容到 5 副本
    

总结

Docker Swarm 通过多管理节点和自动调度机制实现高可用,适合中小规模集群。关键步骤包括:初始化 Swarm、添加节点、部署服务、配置网络/存储,并结合监控和备份策略。对于更复杂场景(如大规模集群),可考虑 Kubernetes,但 Swarm 以简单性和低开销见长。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐