一、ollama的简介
Ollama 是开源、跨平台的本地大模型运行管理工具,可以在自己电脑 / 服务器离线跑开源大模型(Llama3、通义千问 Qwen、DeepSeek、Mistral、LLaVA 多模态等),不用联网调用第三方 AI 接口,数据留在本机。
通俗类比:大模型界的 Docker,把下载、加载、显存调度、GGUF 量化封装好,一条命令拉起模型,不用手动编译配置复杂环境博客园。
核心特点:
- **本地离线运行,隐私可控:**所有对话数据不会上传云端,适合处理敏感文档、内网私有化部署。
- 极简命令行操作
- 自带 HTTP API(默认端口 11434):启动服务后提供兼容 OpenAI 格式接口,可被 Python、LangChain、RAG 知识库、前端程序调用:
- 跨平台:支持 Windows /macOS/ Linux,也提供 Docker 镜像;自动识别 NVIDIA、AMD、Apple Metal 显卡加速,低配电脑也能跑量化后的小模型
- 支持多模态与自定义模型:LLaVA 等模型可以识图;通过
Modelfile导入本地 GGUF 模型、自定义系统提示词、修改参数,制作专属模型稀土掘金
注意:默认只监听本机 127.0.0.1,如果修改配置对外暴露端口,不做认证会存在未授权访问风险,不要直接公网开放
它能做什么?
- 个人电脑本地私有 AI 聊天、写代码、文档总结;
- 内网服务器私有化部署大模型,搭建企业本地 AI 助手;
- 开发调试 RAG 知识库、AI 智能体,对接程序 API;
- 离线环境使用大模型,不依赖互联网。
❗容易混淆的两点
- Ollama 本身不是大模型,只是运行框架;模型需要单独下载(GGUF 格式);
- 和 ChatGPT / 文心一言区别:后者是云端在线服务;Ollama 是自己本地托管开源模型。
二、在rhel9上的部署
2.1环境架构
-
系统环境:RHEL 9.x(兼容Rocky Linux 9、AlmaLinux 9)
-
网络模式:Docker NAT网络(容器私有网段,宿主端口映射对外访问)
-
架构模式:1台负载均衡节点 + 多台Ollama服务节点(单节点多容器亦可)
-
负载均衡方式:Nginx七层HTTP负载均衡,完美兼容Ollama流式推理、零模块报错
-
服务端口:Ollama默认11434,Nginx对外统一接入端口11434
2.2前置条件
-
所有服务器RHEL9系统已初始化、网络互通、可联网拉取镜像
-
服务器关闭/放行防火墙端口,关闭SELinux或配置放行策略
-
服务器时间同步,主机名唯一,无端口冲突
-
硬件资源满足模型运行需求(建议单节点8C16G起步,GPU可选)
2.3系统环境初始化
2.3.1关闭SELinux
bash
setenforce 0
永久关闭(重启后生效)
bash
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.3.2防火墙放行端口
bash
# 放行Ollama端口、Nginx端口
firewall-cmd --permanent --add-port=11434/tcp
firewall-cmd --reload
2.3.3安装基础依赖
bash
dnf install -y dnf-utils device-mapper-persistent-data lvm2 wget curl tar
2.3.4安装Docker
bash
dnf install -y docker-ce docker-ce-cli containerd.io
# 启动并开机自启
systemctl start docker
systemctl enable docker
# 验证Docker状态
docker info
2.3.5配置Docker国内的镜像加速,防止拉取镜像时超时和源解析失败
创建Docker镜像加速配置文件
bash
# 创建docker daemon配置目录
mkdir -p /etc/docker
# 替换为当前可用、稳定的Docker加速源(修复源解析失败问题)
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
重新配置并重启Docker生效
bash
# 重载Docker配置
systemctl daemon-reload
# 重启Docker服务
systemctl restart docker
# 开机自启保持不变
systemctl enable docker
查看镜像加速配置是否生效
bash
docker info | grep -A 10 "Registry Mirrors"
生效标准:输出内容包含上述配置的国内加速地址,即为配置成功。
2.4部署Ollama容器服务
2.4.1创建Docker专属NAT网络(统一网段)
为保证所有Ollama容器在统一NAT网段,自定义bridge网络:
bash
# 创建自定义NAT网络
docker network create ollama-nat
# 查看网络信息,确认NAT网段
docker network ls
docker network inspect ollama-nat
2.4.2启动Ollama容器实例
先前置拉取Ollama镜像(规避首次run自动拉取超时问题),再启动容器。单节点可部署多个容器(端口差异化映射),多节点单容器即可,统一加入ollama-nat网络:
bash
# 前置拉取最新ollama镜像
docker pull ollama/ollama
第一个Ollama实例
bash
docker run -d \
--name ollama-01 \
--network ollama-nat \
-p 21434:11434 \
--memory 16g \
--memory-swap 20g \
-v /data/ollama/models:/root/.ollama/models \
-e OLLAMA_HOST=0.0.0.0 \
-e OLLAMA_NUM_PARALLEL=1 \
-e OLLAMA_THREADS=8 \
-e OLLAMA_NO_WARMUP=true \
--restart always \
ollama/ollama
docker run -d
run:创建并启动新容器
-d:后台守护进程运行,不占用终端,退出终端服务不中断
--name ollama-01
给容器命名为
ollama-01方便后续精准管理:启停、查看日志、拉模型、负载均衡识别
--network ollama-nat
将容器接入自定义 Docker NAT 隔离网桥
容器处于私有内网,不直接暴露公网,安全合规,统一网段方便 Nginx 代理转发
-p 21434:11434
端口映射格式:
宿主机端口:容器内部端口容器内固定端口
11434宿主机使用 21434 差异化端口
彻底规避 Nginx 11434 端口冲突
--memory 16g
限制容器最大物理内存 16G
防止 Qwen2.5-7B 大模型独占整机内存、导致系统卡死
--memory-swap 20g
允许内存 + 交换分区总上限 20G
解决大模型加载内存不足、静默退出、加载中断问题
-v /data/ollama/models:/root/.ollama/models持久化核心
目录挂载:将宿主机模型目录挂载到容器内部模型目录
作用 :模型下载后永久保存在宿主机,删除容器、重启容器无需重新拉取模型
-e OLLAMA_HOST=0.0.0.0
设置 Ollama 监听所有网卡
允许 Nginx、内网其他机器访问容器服务,不限制本地回环
-e OLLAMA_NUM_PARALLEL=1
限制单容器同时只处理 1 个推理任务
避免多并发抢占资源导致模型卡死、超时、无输出
-e OLLAMA_THREADS=8
设置模型推理线程数为 8,提升加载与推理速度
解决默认线程过少、加载超慢被客户端断开的问题
-e OLLAMA_NO_WARMUP=true解决 499 报错关键
关闭模型预热机制
之前报错
warming up the model、client closed、加载被中止就是预热导致直接跳过预热,杜绝加载未完成被中断、卡死、无响应
--restart always
容器永久开机自启、故障自动重启
适配生产高可用,宕机、重启服务器自动恢复服务
ollama/ollama
- 指定基于官方
ollama/ollama镜像启动容器
单节点多实例部署(第二个实例)
bash
# 第二个实例:统一生产级参数,完全一致保证负载均衡一致性
docker run -d \
--name ollama-02 \
--network ollama-nat \
-p 21435:11434 \
--memory 16g \
--memory-swap 20g \
-v /data/ollama/models:/root/.ollama/models \
-e OLLAMA_HOST=0.0.0.0 \
-e OLLAMA_NUM_PARALLEL=1 \
-e OLLAMA_THREADS=8 \
-e OLLAMA_NO_WARMUP=true \
--restart always \
ollama/ollama
2.4.3验证容器运行状态
bash
# 查看容器是否正常运行
docker ps | grep ollama
# 测试后端容器原生接口(绕过Nginx,必须有输出)
curl http://172.25.254.5:21434/api/version
curl http://172.25.254.5:21435/api/version
效果如下

2.4.4拉取模型(所有Ollama节点统一模型)
bash
# 优先拉取轻量测试模型(验证环境可用性,避免7B卡死)
docker exec -it ollama-01 ollama pull tinyllama
docker exec -it ollama-02 ollama pull tinyllama
# 轻量模型验证通过后,再拉取业务大模型
docker exec -it ollama-01 ollama pull qwen2.5:7b
docker exec -it ollama-02 ollama pull qwen2.5:7b
# 验证模型
docker exec -it ollama-01 ollama list
2.5Nginx负载均衡配置
2.5.1安装Nginx
bash
# 安装epel扩展源
dnf install epel-release -y
# 安装Nginx
dnf install nginx -y
# 开机自启
systemctl enable nginx
2.5.2配置Nginx七层HTTP负载均衡
采用HTTP七层负载均衡。Ollama所有API、对话、模型推理均标准HTTP接口,七层代理完全兼容、稳定性更强、RHEL9零兼容问题,生产通用最优解。
bash
vim /etc/nginx/nginx.conf
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
# 后端Ollama集群负载池(双实例轮询分发)
upstream ollama_backend {
server 127.0.0.1:21434;
server 127.0.0.1:21435;
}
# Ollama大模型专属负载均衡服务配置
server {
listen 11434; # 监听Ollama标准端口,统一对外服务入口
server_name _; # 内网无域名适配,匹配所有IP请求,规避域名报错
location / {
# 所有请求转发至Ollama后端集群,实现轮询负载、故障容错
proxy_pass http://ollama_backend;
# 透传客户端真实请求信息,保障后端日志正常记录、接口正常解析
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 适配大模型长推理超时
# 超时全局调优:适配大模型慢速加载、长时推理场景
proxy_connect_timeout 120s; # 延长连接超时,避免模型加载未完成被499中断
proxy_send_timeout 600s; # 防止长文本推理过程中空闲断连
proxy_read_timeout 600s; # 解决默认超时导致的推理卡死、空白无输出
# 流式推理核心优化:适配Ollama SSE实时输出
proxy_buffering off; # 关闭响应缓冲,实现逐字实时推送
proxy_cache off; # 关闭缓存,避免动态推理结果错乱冲突
proxy_http_version 1.1; # 启用HTTP1.1,支持长连接传输
proxy_set_header Connection "";# 清空连接头,维持长连接,杜绝中途断连
}
}
2.5.3校验配置并启动Nginx
bash
# 校验Nginx配置语法
nginx -t
# 启动Nginx
systemctl start nginx
2.6整体服务验证
2.6.1负载均衡接口验证
bash
# 查看版本信息(短连接测试)
curl http://172.25.254.5:11434/api/version
# 模型推理测试(关键:增加 stream:false 解决空白无输出问题)
curl http://172.25.254.5:11434/api/generate \
-d '{"model":"qwen2.5:7b","prompt":"你好","stream":false}'
效果如下

2.6.2负载分发验证
访问5次

查看容器实时日志
bash
docker logs -f ollama-01

bash
docker logs -f ollama-02

2.7NAT网络架构说明
-
网络隔离性:所有Ollama容器运行在Docker NAT私有网段(172.17.0.0/16),不直接暴露公网,仅通过宿主机端口映射对外提供服务,安全性更高。
-
通信逻辑:客户端请求→Nginx负载节点(公网/内网IP)→NAT端口转发→后端Ollama容器,全程基于NAT地址转换实现通信。
-
扩容便捷:新增Ollama节点/容器时,仅需部署容器、拉取模型,在Nginx upstream中添加节点地址即可完成扩容。
2.8开机自启与高可用保障
2.8.1服务自启
-
Docker、Nginx已配置开机自启
-
Ollama容器添加--restart always策略,异常自动重启
2.8.2故障自愈
Nginx默认自动剔除故障节点,某台Ollama容器/节点宕机后,请求自动分发至正常节点,恢复后自动重新加入集群。
2.9日常运维命令
bash
# 查看Ollama容器状态
docker ps | grep ollama
# 重启Ollama容器
docker restart ollama-01 ollama-02
# 重启Nginx负载均衡
systemctl restart nginx
# 查看Nginx访问日志
tail -f /var/log/nginx/access.log
# 新增后端节点后重载配置
nginx -t && systemctl reload nginx
三、常见问题排查
3.1端口访问超时
排查防火墙端口是否放行、SELinux是否关闭、Docker端口映射是否正常。
3.2模型调用失败
典型报错:client connection closed before llama-server finished loading、499超时、llama-server start canceled。根因:模型预热加载未完成被客户端中断、默认线程数过少、内存不足导致加载超时终止。解决方案:关闭模型预热、加大线程与内存、初始化完成后再访问、优先轻量模型验证。