4 台 2C2G 服务器逆袭!手把手教你用 Docker Swarm+Portainer 打造超便捷集群
在资源有限的情况下,如何最大化服务器性能?本文将基于 4 台 2C2G 服务器,带你通过 Docker Swarm 和 Portainer 构建高效集群,轻松实现资源整合与可视化管理。
一、集群规划与架构设计
1. 硬件配置
4 台 2C2G 服务器(示例 IP:192.168.1.100~192.168.1.103),操作系统统一是使用 Ubuntu 20.04 LTS。
2. 角色分配
192.168.1.100 | Swarm Manager | 集群管理节点(主管理节点) |
192.168.1.101 | Swarm Worker | 工作节点 |
192.168.1.102 | Swarm Worker | 工作节点 |
192.168.1.103 | Swarm Worker | 工作节点 |
3. 架构图
#mermaid-svg-EOB4zzZHZYRycCTA {font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .error-icon{fill:#552222;}#mermaid-svg-EOB4zzZHZYRycCTA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EOB4zzZHZYRycCTA .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-EOB4zzZHZYRycCTA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EOB4zzZHZYRycCTA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EOB4zzZHZYRycCTA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EOB4zzZHZYRycCTA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EOB4zzZHZYRycCTA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EOB4zzZHZYRycCTA .marker.cross{stroke:#333333;}#mermaid-svg-EOB4zzZHZYRycCTA svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EOB4zzZHZYRycCTA .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .cluster-label text{fill:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .cluster-label span{color:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .label text,#mermaid-svg-EOB4zzZHZYRycCTA span{fill:#333;color:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .node rect,#mermaid-svg-EOB4zzZHZYRycCTA .node circle,#mermaid-svg-EOB4zzZHZYRycCTA .node ellipse,#mermaid-svg-EOB4zzZHZYRycCTA .node polygon,#mermaid-svg-EOB4zzZHZYRycCTA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EOB4zzZHZYRycCTA .node .label{text-align:center;}#mermaid-svg-EOB4zzZHZYRycCTA .node.clickable{cursor:pointer;}#mermaid-svg-EOB4zzZHZYRycCTA .arrowheadPath{fill:#333333;}#mermaid-svg-EOB4zzZHZYRycCTA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EOB4zzZHZYRycCTA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EOB4zzZHZYRycCTA .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-EOB4zzZHZYRycCTA .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-EOB4zzZHZYRycCTA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EOB4zzZHZYRycCTA .cluster text{fill:#333;}#mermaid-svg-EOB4zzZHZYRycCTA .cluster span{color:#333;}#mermaid-svg-EOB4zzZHZYRycCTA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EOB4zzZHZYRycCTA :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
工作节点
管理节点
Swarm管理API
Swarm管理API
Swarm管理API
Portainer 9000端口
容器服务
容器服务
容器服务
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.100
客户端浏览器
应用容器
二、环境准备(所有节点)
1. 安装 Docker CE
\\# 更新包索引
sudo apt update
\\# 安装依赖工具
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
\\# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
\\# 添加Docker软件源
sudo add-apt-repository "deb \\[arch=amd64] https://download.docker.com/linux/ubuntu \\$(lsb\\_release -cs) stable"
\\# 安装Docker CE
sudo apt install -y docker-ce docker-ce-cli containerd.io
\\# 启动Docker服务并设置开机自启
sudo systemctl enable –now docker
\\# 允许当前用户管理Docker(非必须,建议使用sudo)
sudo usermod -aG docker \\$USER
2. 检查 Docker 版本(需 >=1.12)
docker –version
\\# 预期输出类似:Docker version 24.0.6, build ed223bc
3. 开放集群通信端口(所有节点)
sudo ufw allow 2377/tcp # Swarm管理端口
sudo ufw allow 7946/tcp # 容器网络通信(TCP)
sudo ufw allow 7946/udp # 容器网络通信(UDP)
sudo ufw allow 4789/udp # 容器overlay网络
sudo ufw allow 9000/tcp # Portainer管理端口(仅管理节点)
sudo ufw enable
三、初始化 Swarm 集群(管理节点 192.168.1.100)
1. 初始化管理节点
docker swarm init –advertise-addr 192.168.1.100
执行后会输出工作节点加入命令,类似:
Swarm initialized: current node (abcdef123456) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join –token SWMTKN-1-4567890abcdef1234567890 192.168.1.100:2377
2. 查看集群节点状态
docker node ls
\\# 预期输出:只有当前管理节点,状态为Ready,角色为Manager
四、添加工作节点(192.168.1.101~103)
在每台工作节点执行初始化时输出的加入命令:
docker swarm join –token SWMTKN-1-4567890abcdef1234567890 192.168.1.100:2377
验证节点加入
在管理节点再次执行:
docker node ls
\\# 预期输出4个节点,1个Manager,3个Worker,状态均为Ready
五、部署 Portainer 可视化管理工具(管理节点)
1. 创建数据卷(持久化存储配置)
docker volume create portainer\\_data
2. 运行 Portainer 服务
docker service create \\\\
\\–name portainer \\\\
\\–publish 9000:9000 \\\\
\\–constraint 'node.role == manager' \\\\
\\–mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\\\
\\–mount type=volume,src=portainer\\_data,dst=/data \\\\
portainer/portainer-ce:latest -H unix:///var/run/docker.sock
参数说明:
–constraint:确保 Portainer 仅在管理节点运行
–mount:挂载 Docker 套接字实现集群管理,数据卷存储配置
3. 访问 Portainer 界面
在浏览器输入:http://192.168.1.100:9000
首次访问设置管理员密码(建议强密码)
选择 “Connect to a Docker environment”
选择 “Swarm mode” 并点击 “Connect”
六、集群验证与基本操作
1. 查看节点状态(Portainer 界面)
进入 “Nodes” 页面,应显示 4 个节点,状态均为 Active
Manager 节点显示 “Leader” 标识,Worker 节点显示资源使用情况
2. 部署测试服务(Nginx 示例)
命令行部署(管理节点)
docker service create \\\\
\\–name web-service \\\\
\\–replicas 3 \\\\
\\–port 80:80 \\\\
nginx:alpine
Portainer 界面部署
进入 “Stacks” 页面,点击 “Add stack”
使用 Docker Compose 格式部署(示例如下):
version: '3'
services:
web:
image: nginx:alpine
ports:
\\- "80:80"
deploy:
replicas: 3
3. 验证负载均衡
访问任意节点 IP 的 80 端口,会轮询到不同 Nginx 容器实例
curl 192.168.1.100
curl 192.168.1.101
\\# 输出应显示不同的容器ID(通过查看容器日志确认)
七、资源优化与最佳实践
1. 限制容器资源(防止单个容器耗尽节点资源)
docker service create \\\\
\\–name restricted-service \\\\
\\–replicas 2 \\\\
\\–limit-cpu 1.0 \\ # 最多使用1个CPU核心
\\–limit-memory 1024m \\ # 最多使用1GB内存
\\–reserve-cpu 0.5 \\ # 至少保留0.5个CPU
\\–reserve-memory 512m \\ # 至少保留512MB内存
nginx:alpine
2. 节点标签分组(示例:区分数据库节点)
为特定节点添加标签
docker node update –label-add role=database 192.168.1.101
部署服务时指定标签约束
deploy:
placement:
constraints:
\\- node.labels.role == database
3. 监控集群资源
在 Portainer 界面的 “Monitoring” 页面可实时查看:
节点 CPU / 内存 / 磁盘使用情况
服务副本运行状态
容器日志实时监控
八、常见问题处理
1. 节点加入失败
检查防火墙是否开放 2377/7946/4789 端口
确认管理节点 IP 可被工作节点访问(ping 测试)
重新生成加入令牌:docker swarm join-token worker
2. Portainer 无法连接集群
检查/var/run/docker.sock权限是否正确
重启 Portainer 服务:docker service rm portainer && 重新执行部署命令
3. 服务调度不均衡
检查节点资源使用情况(Portainer 监控页面)
添加资源约束或节点标签重新调度任务
九、总结
通过 4 台 2C2G 服务器搭建的 Docker Swarm 集群,配合 Portainer 可视化管理,实现了:
计算资源的集中管理与弹性分配
容器服务的高可用性与负载均衡
可视化的集群监控与便捷操作
此方案适用于中小规模微服务架构、分布式应用测试环境或轻量级生产集群。后续可根据业务需求扩展节点数量,通过 Swarm 的动态调度能力灵活分配资源。
评论前必须登录!
注册