摘要
本文详细指导如何在 Ubuntu 22.04 最小化安装系统上,从零部署 Ollama 服务,并构建一个高可用、高性能的集群以支撑 2000 人规模的并发使用。内容涵盖系统准备、Ollama 安装、集群架构设计、负载均衡配置、模型管理与分发、性能调优(包括 GPU 加速、内存优化、网络与存储优化)以及监控运维方案,旨在为企业级 AI 应用提供稳定、高效的基础设施。
1. 系统环境准备与最小化安装
Ubuntu 22.04 Server 最小化安装提供了最精简的基础,是构建稳定生产环境的理想起点。
1.1 系统安装与基础配置
- 安装媒介:从 Ubuntu 官网下载 Ubuntu 22.04.4 LTS Server ISO 镜像。
- 安装过程 :在安装类型选择界面,务必勾选"Minimal installation"(最小化安装),并取消所有预装软件选项。分区建议:根目录(/)至少 100GB,交换分区(swap)根据物理内存大小设置(例如 64GB 内存可设 8-16GB swap)。
- 网络配置:配置静态 IP 地址,确保服务器在局域网内拥有固定地址,便于集群节点间通信。
1.2 安装后必备软件包
更新系统并安装必要的工具和依赖:
bash
# 更新软件包列表并升级系统
sudo apt update && sudo apt upgrade -y
安装基础工具
sudo apt install -y curl wget git vim htop net-tools ntpdate
安装 Docker 运行时(Ollama 官方推荐使用容器部署)
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 将当前用户加入 docker 组,需重新登录生效
安装 NVIDIA 容器工具包(如果使用 NVIDIA GPU)
请先确保已安装 NVIDIA 驱动和 CUDA Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list |
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' |
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
2. Ollama 单节点部署
首先在一台服务器上完成 Ollama 的基础安装和验证。
2.1 安装 Ollama
使用官方一键安装脚本:
bash
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,启动 Ollama 服务:
bash
sudo systemctl enable --now ollama
2.2 验证安装与拉取模型
检查服务状态并拉取一个测试模型(如 Llama 3.2):
bash
# 检查服务状态
systemctl status ollama
拉取模型(首次运行会下载模型文件,耗时较长)
ollama pull llama3.2
运行一个简单的交互测试
ollama run llama3.2 "Hello, world!"
3. 构建 Ollama 集群架构
为支撑 2000 人并发,单节点无法满足性能与可用性要求,需构建集群。
3.1 集群架构设计
建议采用"负载均衡器 + 多个 Ollama 计算节点 + 共享存储/模型仓库"的架构。
- 负载均衡层:使用 Nginx 或 HAProxy,负责将用户请求分发到后端的多个 Ollama 节点。
- 计算节点层:多台运行 Ollama 的服务器,每台可配备 GPU 以加速推理。
- 存储层:使用 NFS、Ceph 或对象存储(如 MinIO)集中存储模型文件,确保所有节点模型一致。
- 控制节点(可选):一台管理节点,用于集群监控、日志收集和任务调度。
3.2 多节点部署与配置同步
- 准备节点:按照第 1、2 节步骤,在所有计算节点上安装 Ubuntu 和 Ollama。
- 配置共享存储 :在一台存储服务器上搭建 NFS,将所有计算节点的
/root/.ollama/models目录挂载到共享存储。 - 同步配置:确保所有节点的 Ollama 服务配置(如环境变量、端口)一致。
4. 负载均衡与高可用配置
4.1 使用 Nginx 作为反向代理
在负载均衡器上安装 Nginx,并配置 upstream 指向所有 Ollama 节点(默认端口 11434):
nginx
# /etc/nginx/conf.d/ollama_cluster.conf
upstream ollama_backend {
# 配置所有后端 Ollama 节点,可设置权重
server 192.168.1.101:11434 weight=3; # 节点1,权重高
server 192.168.1.102:11434 weight=2; # 节点2
server 192.168.1.103:11434 weight=2; # 节点3
# 可配置健康检查
}
server {
listen 80;
server_name ollama.yourcompany.com; # 您的域名
location / {
proxy_pass http://ollama_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 设置较长的超时时间,适应模型推理
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
重启 Nginx:sudo systemctl restart nginx
4.2 实现高可用(HA)
- 负载均衡器高可用:使用 Keepalived + VIP(虚拟 IP)实现 Nginx 主备切换。
- 节点健康检查 :在 Nginx upstream 配置中结合
max_fails和fail_timeout参数,自动剔除故障节点。
5. 性能调优至最佳状态
针对 2000 人并发,需从多个维度进行深度优化。
5.1 GPU 加速与 CUDA 优化
- 确认 GPU 识别 :在每台计算节点运行
nvidia-smi确认 GPU 可用。 - Ollama 启用 GPU :确保 Ollama 以支持 GPU 的模式运行。使用 Docker 运行时,需在运行容器时添加
--gpus all参数。对于 systemd 服务,可修改 Ollama 服务文件,在Environment中添加OLLAMA_HOST=0.0.0.0并确保 NVIDIA 运行时可用。 - CUDA 版本匹配:确保 Ollama 使用的 CUDA 版本与 NVIDIA 驱动兼容。
5.2 内存与存储优化
- 模型量化 :为生产环境拉取量化版本模型(如
llama3.2:7b-q4_K_M),显著减少内存占用和提升推理速度。 - 共享内存 :在 Docker 运行 Ollama 时,挂载
/dev/shm并设置足够大小(例如--shm-size=8g)。 - SSD 存储:将模型文件存储在 NVMe SSD 上,极大缩短模型加载时间。
- 系统内存:根据模型大小和并发数,为每个节点配置充足物理内存。一个 7B 参数 q4 量化模型约需 4-5GB 内存,考虑并发需预留更多。
5.3 网络与并发优化
- 调整 Ollama 并发数 :通过环境变量
OLLAMA_NUM_PARALLEL控制单个 Ollama 实例的并行请求数。根据 GPU 内存和算力调整,例如设置为 2-4。 - Linux 内核参数调优:调整系统网络参数以支持高并发。
bash
# 编辑 /etc/sysctl.conf,增加或修改以下行
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
使配置生效
sudo sysctl -p
- 限制模型上下文长度 :对于聊天应用,可通过 Ollama 的
Modelfile或 API 参数限制num_ctx(上下文长度),减少单次请求资源消耗。
5.4 配置优化示例
创建自定义的 Ollama 系统服务配置文件,集成优化参数:
bash
# /etc/systemd/system/ollama-optimized.service
[Unit]
Description=Ollama Optimized Service
After=network.target docker.service
Requires=docker.service
[Service]
Type=exec
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_NUM_PARALLEL=4"
ExecStart=/usr/bin/ollama serve
Restart=always
RestartSec=3
限制资源(根据实际情况调整)
CPUQuota=400%
MemoryHigh=32G
MemoryMax=36G
[Install]
WantedBy=multi-user.target
重启服务:sudo systemctl daemon-reload && sudo systemctl restart ollama-optimized
6. 监控、日志与运维
6.1 监控指标
- 节点监控:使用 Prometheus + Grafana 监控各节点 CPU、内存、GPU 利用率、显存、网络 IO、磁盘 IO。
- Ollama 应用监控 :通过 Ollama 的 API 端点
/api/tags、/api/ps获取模型列表和运行状态,或使用ollama list、ollama ps命令。 - 业务监控:在负载均衡器(Nginx)日志中分析请求量、响应时间、错误率。
6.2 日志收集
配置统一的日志收集(如 ELK Stack 或 Loki),集中查看所有 Ollama 节点和 Nginx 的日志,便于故障排查。
6.3 自动化运维
- 模型更新:编写脚本定期检查并拉取模型更新,通过共享存储同步到所有节点。
- 健康检查与自愈:编写监控脚本,当节点服务异常时自动重启或告警。
7. 安全与访问控制
- 网络隔离:将 Ollama 集群部署在内网,通过负载均衡器对外暴露,并配置防火墙规则。
- API 密钥认证:Ollama 本身无内置强认证。可在 Nginx 层配置 HTTP Basic Auth,或通过前置的 API 网关(如 Kong, Tyk)实现 JWT 令牌认证。
- 传输加密:为 Nginx 配置 SSL/TLS 证书(可使用 Let's Encrypt),启用 HTTPS。
8. 总结与扩展建议
通过以上步骤,您可以在 Ubuntu 22.04 最小化系统上构建一个支撑 2000 人并发的 Ollama 集群。关键成功要素在于:合理的集群架构、充分的硬件资源(GPU、内存、高速存储)、深度的系统与 Ollama 参数调优,以及完善的监控运维体系。
扩展建议:
- 水平扩展:随着用户量增长,可轻松增加计算节点并更新 Nginx upstream 配置。
- 多模型支持:可在集群中部署不同模型,通过路由规则将特定请求导向专用模型节点。
- 混合部署:将实时推理(高频、低延迟)与批量推理(低频、高吞吐)任务分配到不同的节点组。
开始您的企业级 AI 基础设施之旅吧!