云计算百科
云计算领域专业知识百科平台

4 台 2C2G 服务器逆袭!手把手教你用 Docker Swarm+Portainer 打造超便捷集群

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. 角色分配

节点 IP角色职责描述
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 的动态调度能力灵活分配资源。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 4 台 2C2G 服务器逆袭!手把手教你用 Docker Swarm+Portainer 打造超便捷集群
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!