AI向量数据库Milvus3单机学习版部署指南

Milvus 3.x 单机学习版

Rocky Linux 10.1 下 Docker Compose 部署完整指南

仅用于初学者学习实验 · 请勿直接用于生产环境

你好,我是昌哥,进免费技术交流群或咨询加微信: rscpass

环境概览

系统:Rocky Linux release 10.1 (Red Quartz)

内存:建议 ≥8G,推荐 16G

版本:Milvus 3.0.x(Docker Compose 单机部署)

组件:milvus-standalone、etcd(元数据)、minio(对象存储,向量数据持久化)

一、系统前置准备(root 执行)

1.1 确认系统版本

确认系统为 Rocky Linux 10.1,内核版本满足要求:

[root@localhost ~]# cat /etc/redhat-release

Rocky Linux release 10.1 (Red Quartz)

[root@localhost ~]# uname -r

6.12.0-124.8.1.el10_1.x86_64

1.2 关闭 SELinux

学习环境为避免权限报错,建议关闭 SELinux:

# 临时关闭

setenforce 0

# 永久关闭

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

1.3 防火墙(两种选择)

学习内网虚拟机:直接关闭;云服务器:只开放需要的端口,不要全关。

方式一:停止并禁止开机自启

systemctl stop firewalld

systemctl disable firewalld

方式二:只放行需要的端口

firewall-cmd --add-port=19530/tcp --permanent # Milvus

firewall-cmd --add-port=9000/tcp --permanent # minio

firewall-cmd --add-port=9001/tcp --permanent # minio

firewall-cmd --add-port=2379/tcp --permanent # etcd

firewall-cmd --add-port=3000/tcp --permanent # Attu

firewall-cmd --reload

1.4 安装 Docker + docker-compose-plugin

先卸载旧版本 Docker,再安装依赖与 Docker CE:

# 卸载旧 docker

yum remove -y docker docker-client docker-client-latest docker-common \

docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

配置 Docker YUM 源(阿里云镜像源,国内高速),并安装 Docker CE:

# 清理旧的 docker 源(如果有)

rm -f /etc/yum.repos.d/docker-ce.repo

# 添加阿里云 Docker CE 镜像源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 docker 和 compose 插件

yum install docker-ce

# 启动 docker 并开机自启

systemctl start docker && systemctl enable docker

# 验证

docker --version

docker compose version

1.5 配置镜像加速(关键步骤)

修改 daemon.json 配置多备选国内镜像源,只有按下面的源才能正常拉取镜像:

vim /etc/docker/daemon.json

把内容替换成下面(多备选国内镜像源):

{

"registry-mirrors": [

"https://docker.mirrors.ustc.edu.cn",

"https://mirror.baidubce.com",

"https://docker.m.daocloud.io",

"https://hub-mirror.c.163.com",

"https://mirror.aliyuncs.com",

"https://docker.nju.edu.cn",

"https://docker.rainbond.cc"

]

}

保存退出(vi 编辑器按 Esc,输入 :wq 回车),然后重启 Docker 生效:

systemctl daemon-reload

systemctl restart docker

提示: daemon.json 中的镜像源请按网络情况选用,部分源可能失效,可保留多个作为备选。

二、下载并启动 Milvus 3.x 单机

2.1 创建工作目录,下载官方 compose 配置

mkdir -p /opt/milvus3

cd /opt/milvus3

# 下载 Milvus 3.0 官方单机 docker-compose.yml

wget https://github.com/milvus-io/milvus/releases/download/v3.0.1/milvus-standalone-docker-compose.yml -O docker-compose.yml

如果 wget 下载 GitHub 慢,可以用浏览器打开链接,复制内容保存到服务器 /opt/milvus3/docker-compose.yml。

2.2 拉取镜像并配置目录权限

先单独拉取镜像:

cd /opt/milvus3

docker compose pull

查看镜像清单:

docker images

预期镜像清单:

milvusdb/milvus:v3.0.1

minio/minio:RELEASE.2024-12-18T13-15-44Z

quay.io/coreos/etcd:v3.5.25

zilliz/attu:v3.0.0

启动 Milvus 前,先查看容器内运行 Milvus 的 UID:

docker run --rm --entrypoint id milvusdb/milvus:v3.0.1

# 输出:uid=999(milvus) gid=999(milvus) groups=999(milvus)

确保数据目录存在并递归修改属主为 999:999、权限为 755:

sudo mkdir -p /opt/milvus3/volumes/milvus

sudo chown -R 999:999 /opt/milvus3/volumes/milvus

sudo chmod -R 755 /opt/milvus3/volumes/milvus

# 确认修改结果(重点看属主那列是不是 999 或 milvus)

ls -la /opt/milvus3/volumes/milvus

2.3 启动 Milvus

cd /opt/milvus3

docker compose up -d

启动三个容器:

milvus-etcd:元数据存储

milvus-minio:对象存储,保存向量原始数据

milvus-standalone:Milvus 主服务

2.4 查看容器状态

docker compose ps

注意: 全部容器状态为 healthy 才算正常。刚启动时 healthcheck 需要等待 30–60 秒,刚开始会显示 starting,请耐心等待。

查看日志(排查报错用):

# 看 milvus 主日志

docker compose logs -f milvus-standalone

Milvus 默认对外端口:19530(SDK 连接端口);9091 是 metrics 监控端口。

2.5 停止 / 重启 Milvus 常用命令

# 停止

docker compose stop

# 启动

docker compose start

# 销毁(数据会保存在 volumes 目录)

docker compose down

# 销毁并删除所有数据(学习环境重置)

docker compose down -v

提示: 数据持久化在当前目录 volumes/ 下,保存 etcd、minio、milvus 全部数据,不要随意删除。

三、安装 Attu 可视化管理工具(初学者强烈推荐)

Attu 是 Milvus 官方 GUI 网页工具,可以浏览器操作 Milvus,建集合、插入、查询、看索引,不用写代码调试。新开终端执行:

docker run -d --name attu3 --network milvus -p 3000:3000 \

-e MILVUS_URL=http://milvus-standalone:19530 zilliz/attu:v3.0.0

参数说明:

--network milvus:加入 Milvus compose 自动创建的网络,Attu 容器内部可以解析 milvus-standalone 主机名。

所有依赖启动完成后,docker ps -a 应显示四个容器(milvus-standalone、milvus-minio、milvus-etcd 为 healthy,attu 已运行)。

浏览器访问:http://服务器IP:3000

Milvus 地址填写:http://milvus-standalone:19530

默认没有账号密码,直接 Connect 连接

四、Python SDK pymilvus 3.x 安装与测试连接

重要: Milvus 3.x 必须使用 pymilvus v3.x,旧版本 pymilvus 2.x 不兼容。

4.1 安装 pymilvus

yum install -y epel-release python3.12-pip

pip3 install --user "pymilvus[model]"

4.2 最小测试代码 test_milvus.py

from pymilvus import MilvusClient

# 服务器本机访问写 127.0.0.1;远程访问写服务器 IP

client = MilvusClient(uri="http://127.0.0.1:19530")

# 检查连通性

resp = client.get_server_version()

print(f"Milvus 服务版本: {resp}")

print("连接 Milvus 成功!")

# 列出所有集合

colls = client.list_collections()

print(f"现有集合列表:{colls}")

运行:

python3 test_milvus.py

预期输出:

Milvus 服务版本: 3.0-20260902-658cbd1689

连接 Milvus 成功!

现有集合列表:[]

注意: 如果服务器不在本机,把 uri 改成 http://服务器IP:19530,并确保防火墙放行 19530 端口。

五、初学者第一个完整 demo(建集合、插入向量、检索)

保存为 demo.py:

from pymilvus import MilvusClient

import random

client = MilvusClient("http://127.0.0.1:19530")

collection_name = "demo_vector"

# 1. 删除旧集合(测试用)

if client.has_collection(collection_name):

client.drop_collection(collection_name)

# 2. 准备索引参数

index_params = client.prepare_index_params()

index_params.add_index(

field_name="vector",

index_type="HNSW",

metric_type="COSINE",

params={"M": 16, "efConstruction": 100}

)

# 3. 创建集合时直接带上索引参数

client.create_collection(

collection_name=collection_name,

dimension=8,

index_params=index_params

)

# 4. 构造模拟向量数据

data = [

{"id": i, "vector": [random.random() for _ in range(8)], "text": f"doc{i}"}

for i in range(100)

]

# 5. 插入数据

res = client.insert(collection_name=collection_name, data=data)

print(f"插入成功,插入条数:{res[\"insert_count\"]}")

# ★★★ 关键:插入后 flush,强制数据落盘 ★★★

client.flush(collection_name)

print("数据已 flush 落盘")

# 6. 加载集合到内存

client.load_collection(collection_name)

# 7. 向量相似度检索

query_vector = [random.random() for _ in range(8)]

search_res = client.search(

collection_name=collection_name,

data=[query_vector],

limit=3,

output_fields=["text"]

)

print("检索结果:")

for hit in search_res[0]:

print(f"id:{hit[\"id\"]}, score:{hit[\"distance\"]}, text:{hit[\"entity\"][\"text\"]}")

运行:

python3 demo.py

预期输出:

插入成功,插入条数:100

数据已 flush 落盘

检索结果:

id:56, score:0.986970067024231, text:doc56

id:15, score:0.9712440371513367, text:doc15

id:32, score:0.9541948437690735, text:doc32

小结: 完成这个 demo,就理解了 Milvus 3.x 的基础流程:建集合 → 插入数据 → 建索引 → 加载 → 向量检索。

六、初学者常见坑

1. 容器一直 unhealthy

内存不足:Milvus 3 单机至少 8G 内存,4G 内存环境会不断重启。

SELinux 没有关闭,导致目录权限异常。

镜像没有拉取完整:执行 docker compose pull 重新拉取镜像。

2. pymilvus 连接拒绝

Milvus 容器未 healthy,等待几分钟。

云服务器安全组没开放 19530 端口。

不要在 Attu 里写 127.0.0.1,Attu 是容器,要写 milvus-standalone:19530。

3. 注意版本匹配

Milvus Server 3.0.x ↔ pymilvus 3.x,不要混用 2.x SDK。

Attu 版本必须匹配 Milvus 主版本,这里用 attu:v3.0.0。

4. 磁盘空间

minio 会存储全部向量原始数据,学习环境可定期用 docker compose down -v 清理测试数据。

七、学习路径建议

跑通上面 demo,理解 Collection、schema、向量维度、主键、标量字段。

在 Attu 网页界面可视化操作,观察集合、索引、数据。

学习不同索引:HNSW / IVF_FLAT / DiskANN,对比参数 M、efConstruction、ef_search。

学习标量过滤查询、混合检索。

学习官方 bootcamp Jupyter 示例项目。

八、官方参考文档链接

Milvus 3.x 官方中文文档:https://milvus.io/docs/zh

Milvus Bootcamp 实战案例:https://milvus.org.cn/bootcamp

pymilvus 3.x API 文档:https://milvus.io/api-reference/pymilvus/v3.0.x/About.md

posted on 2026-11-07 21:23  昌哥IT课堂  阅读(12)  评论(0)    收藏  举报

导航