插件窝 干货文章 如何在Linux上配置高可用的容器编排平台(如Docker Swarm)

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

节点 Docker Swarm 集群 549    来源:    2025-04-16

在Linux上配置高可用的Docker Swarm集群

概述

Docker Swarm是Docker原生的容器编排工具,可以轻松创建高可用的容器集群。以下是配置高可用Swarm集群的详细步骤。

前提条件

  • 至少3台Linux服务器(推荐Ubuntu 18.04+/CentOS 7+)
  • 每台服务器已安装Docker Engine(19.03+版本)
  • 服务器之间网络互通
  • 开放的端口:2377/tcp(集群管理),7946/tcp+udp(节点通信),4789/udp(覆盖网络)

安装Docker Engine

在所有节点上安装Docker:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker

初始化Swarm集群

选择一台作为第一个管理节点:

# 在第一个管理节点上执行
docker swarm init --advertise-addr <MANAGER_IP>

命令会输出加入集群的token,类似:

Swarm initialized: current node (xyz) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-xxx <MANAGER_IP>:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

添加管理节点

获取管理节点加入命令:

# 在第一个管理节点上执行
docker swarm join-token manager

在其他管理节点上执行输出的命令。

添加工作节点

获取工作节点加入命令:

# 在任何管理节点上执行
docker swarm join-token worker

在工作节点上执行输出的命令。

验证集群状态

在任何管理节点上执行:

docker node ls

应该看到所有节点的状态(包括Leader、Reachable等)。

配置高可用性

1. 多管理节点

至少3个管理节点以实现法定人数(quorum),防止脑裂问题。

2. 自动故障转移

Swarm内置Raft共识算法会自动处理管理节点故障并选举新Leader。

3. 服务复制

部署服务时指定副本数:

docker service create --name web --replicas 3 -p 80:80 nginx

4. 节点健康检查

配置节点自动检测和重新调度:

docker service update --health-cmd "curl -f http://localhost || exit 1" \
--health-interval 5s \
--health-retries 3 \
--health-timeout 2s \
web

网络配置

覆盖网络

创建跨节点的覆盖网络:

docker network create --driver overlay --attachable my_overlay_net

负载均衡

Swarm内置负载均衡,服务可以通过服务名自动发现和负载均衡。

存储配置

对于有状态服务,配置持久化存储:

# 创建卷
docker volume create my_volume

# 使用卷
docker service create --name db --mount type=volume,source=my_volume,target=/var/lib/mysql mysql

安全配置

  1. 启用TLS加密通信
  2. 限制管理节点访问
  3. 配置防火墙规则
  4. 定期轮换join tokens

监控和日志

  1. 配置Swarm监控:
docker service create --name=cadvisor \
  --mode=global \
  --publish=8080:8080 \
  --mount type=bind,source=/,target=/rootfs,readonly=true \
  --mount type=bind,source=/var/run,target=/var/run \
  --mount type=bind,source=/sys,target=/sys,readonly=true \
  --mount type=bind,source=/var/lib/docker/,target=/var/lib/docker,readonly=true \
  google/cadvisor:latest
  1. 集中日志收集(ELK或Fluentd)

备份和恢复

备份Swarm集群状态:

# 备份Raft数据
sudo tar -czvf swarm-backup.tar.gz /var/lib/docker/swarm/

恢复时先初始化新Swarm,然后停止Docker,恢复备份文件,重启Docker。

维护操作

排空节点

docker node update --availability drain <NODE_ID>

提升节点角色

docker node promote <WORKER_NODE_ID>

降级管理节点

docker node demote <MANAGER_NODE_ID>

最佳实践

  1. 生产环境至少使用3-5个管理节点
  2. 工作节点数量根据负载需求确定
  3. 定期备份Swarm状态
  4. 监控节点和服务健康状态
  5. 使用标签(labels)组织节点
  6. 考虑使用--constraints进行服务放置控制

通过以上配置,您将拥有一个高可用的Docker Swarm集群,能够自动处理节点故障、服务恢复和负载均衡。