使用Docker Swarm部署高可用集群的详细步骤
更新时间:2025年07月04日 09:01:20 作者:思静鱼
Docker Swarm 是 Docker 原生的集群管理工具,可以轻松地将多个 Docker 主机组成一个集群,实现服务的高可用性和负载均衡,以下是详细的部署步骤,需要的朋友可以参考下
一、环境准备
1. 服务器要求
- 至少 3 台 Linux 服务器(建议 CentOS/Ubuntu)
- 每台服务器已安装 Docker Engine(版本 19.03+)
- 服务器之间网络互通
- 开放的端口:2377(集群管理)、7946(节点通信)、4789(覆盖网络)
2. 设置主机名和解析(所有节点)
# 设置主机名 hostnamectl set-hostname node1 # 在第一台执行 hostnamectl set-hostname node2 # 在第二台执行 hostnamectl set-hostname node3 # 在第三台执行 # 编辑/etc/hosts添加解析 echo " 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3 " >> /etc/hosts
二、初始化 Swarm 集群
1. 在主节点(node1)上初始化 Swarm
docker swarm init --advertise-addr <node1-IP>
输出示例:
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 192.168.1.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2. 添加工作节点
在其他节点上运行上面输出的加入命令:
docker swarm join --token <worker-token> <node1-IP>:2377
3. 添加管理节点(可选,实现管理高可用)
# 在主节点获取管理令牌 docker swarm join-token manager # 在其他管理节点运行输出的命令
三、验证集群状态
1. 查看节点列表
docker node ls
输出示例:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION x3y * node1 Ready Active Leader 20.10.7 z4w node2 Ready Active Reachable 20.10.7 a5b node3 Ready Active 20.10.7
2. 检查 Swarm 状态
docker info | grep -i swarm
四、部署高可用服务
1. 创建覆盖网络
docker network create --driver overlay --attachable my-overlay
2. 部署示例服务(Nginx)
docker service create \ --name nginx \ --replicas 3 \ --publish published=8080,target=80 \ --network my-overlay \ nginx:latest
3. 查看服务状态
docker service ls docker service ps nginx
五、实现高可用特性
1. 服务自动重启
docker service update \ --restart-condition any \ --restart-delay 5s \ --restart-max-attempts 3 \ nginx
2. 设置滚动更新策略
docker service update \ --update-parallelism 2 \ --update-delay 10s \ --image nginx:1.21 \ nginx
3. 配置健康检查
docker service update \ --health-cmd "curl -f http://localhost || exit 1" \ --health-interval 5s \ --health-retries 3 \ --health-timeout 2s \ nginx
六、集群管理
1. 节点维护
# 将节点设置为维护模式 docker node update --availability drain node2 # 恢复节点 docker node update --availability active node2
2. 备份 Swarm 配置
# 备份 Raft 日志(在管理节点执行) docker swarm ca --rotate # 先轮换证书 tar -czvf swarm-backup.tar.gz /var/lib/docker/swarm/
3. 灾难恢复
# 在新节点恢复管理角色 docker swarm init --force-new-cluster --advertise-addr <new-ip>
七、监控和日志
1. 部署监控栈
# 创建监控网络 docker network create --driver overlay monitor # 部署 Prometheus docker service create --name prometheus \ --network monitor \ --publish published=9090,target=9090 \ prom/prometheus # 部署 Grafana docker service create --name grafana \ --network monitor \ --publish published=3000,target=3000 \ grafana/grafana
2. 集中日志收集
docker service create --name logspout \ --mode global \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ --network my-overlay \ gliderlabs/logspout syslog+tls://your-log-server:514
八、安全加固
1. 启用 TLS 加密
# 初始化 Swarm 时启用 TLS docker swarm init --advertise-addr <ip> --default-addr-pool 10.10.0.0/16 --data-path-port 4789 --force-new-cluster --listen-addr <ip>:2377 --cert-expiry 2160h
2. 定期轮换证书
docker swarm ca --rotate
3. 限制管理节点访问
iptables -A INPUT -p tcp --dport 2377 -s <trusted-ip> -j ACCEPT iptables -A INPUT -p tcp --dport 2377 -j DROP
常见问题解决
节点无法加入集群
- 检查防火墙设置
- 验证令牌是否过期(默认24小时)
- 确保所有节点时间同步
服务无法启动
- 检查资源限制
docker service inspect --pretty <service> - 查看日志
docker service logs <service>
网络连接问题
- 验证覆盖网络
docker network inspect <network> - 检查 IP 地址池是否冲突
通过以上步骤,您已经成功部署了一个高可用的 Docker Swarm 集群。这种架构可以自动处理节点故障、服务扩展和负载均衡,适合生产环境使用。
以上就是使用Docker Swarm部署高可用集群的详细步骤的详细内容,更多关于Docker Swarm部署高可用集群的资料请关注脚本之家其它相关文章!
相关文章
docker容器出现Cannot allocate memory问题及解决过程
文章讨论了Docker容器中出现内存不足问题,通过查看`pid_max`和系统总进程数来定位问题,建议临时增加`pid_max`值,并使用`psmisc`工具查看进程数,如果命令执行失败,需要安装该工具,永久生效的解决方案是修改配置文件,文章最后提醒读者参考和支持脚本之家2026-01-01
Docker 设置代理的三种方法(2025年06月03日亲测可用)
在Docker中设置代理是非常常见的需求,本文将介绍三种配置Docker使用代理的常见方法,包括通过配置镜像加速器、通过配置HTTP/HTTPS代理及通过配置代理,感兴趣的可以了解一下2025-09-09
使用GoogleContainerTools容器化jib构建docker镜像
这篇文章主要教大家如何使用GoogleContainerTools容器化jib构建docker镜像的实现,有需要的的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步2022-03-03
docker-compose启动的容器一直处于restarting状态的问题解决
本文主要介绍了docker-compose启动的容器一直处于restarting状态的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-11-11


最新评论