向量数据库Milvus部署使用:零基础部署向量数据库
如果你正在做AI应用开发或相似度搜索,向量数据库Milvus是一个必须掌握的组件。
它能高效存储和检索高维向量,广泛用于推荐系统、图片搜索、自然语言处理场景。
本文从零开始,带你在一台CentOS 7服务器上完成Milvus部署与基本使用,每一步都可直接照做。
环境准备:你需要一台服务器和Docker
Milvus官方推荐通过Docker部署,所以先检查服务器是否已装Docker。
登录服务器(假设IP为192.168.1.100),执行:
docker --version
如果显示版本号,说明Docker已安装。
如果提示command not found,则按下面步骤安装:
# 移除旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker引擎
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
验证Docker是否跑起来:
sudo systemctl status docker | grep Active
# 输出应为 Active: active (running)
避坑:如果服务器内存不足4GB,Milvus运行可能会很慢。建议使用2C4G以上的配置。另外确保/var/lib/docker分区有至少20GB剩余空间。
拉取Milvus镜像并启动服务
Milvus提供两种模式:Standalone(单机)和Cluster(集群)。
单机模式足够学习和小项目测试。
我们先在服务器上下载最新Milvus镜像:
docker pull milvusdb/milvus:latest
启动Milvus之前,需要准备配置文件。
官方提供了一个快速启动脚本,直接复制以下命令到服务器执行:
# 创建目录存放Milvus数据
mkdir -p /home/milvus
cd /home/milvus
# 下载docker-compose.yml和配置文件
wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/docker/standalone/docker-compose.yml
如果你没有wget,可以用curl -O代替。
下一步启动所有容器:
docker-compose up -d
等待几分钟,第一次启动要拉取依赖的etcd和minio镜像。
完成后检查容器状态:
docker-compose ps
确保milvus-etcd、milvus-minio、milvus-standalone三个容器状态都是Up。
如果某个容器一直重启或启动失败,可以查看日志:
docker logs milvus-standalone --tail 50
常见错误是端口冲突(默认端口19530、9091、19531等),可以编辑docker-compose.yml里的端口映射改成你想用的端口。
安装客户端工具并连接Milvus
Milvus启动后,我们通过Python客户端来操作。
在另一台机器(或本机)上安装pymilvus:
pip install pymilvus==2.3.0
如果提示pip未安装,先yum install python3-pip。
编写一个简单的测试脚本test_milvus.py:
from pymilvus import connections, CollectionSchema, FieldSchema, DataType, Collection
# 连接Milvus(你的服务器IP或localhost)
connections.connect(host='192.168.1.100', port='19530')
print('连接成功')
# 定义向量字段和主键字段
fields = [
FieldSchema(name='id', dtype=DataType.INT64, is_primary=True, auto_id=False),
FieldSchema(name='vector', dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, '测试集合')
# 创建集合
collection = Collection('hello_milvus', schema)
print('集合创建成功')
# 插入100条随机向量
import random
vectors = [[random.random() for _ in range(128)] for _ in range(100)]
ids = [i for i in range(100)]
collection.insert([ids, vectors])
print('插入100条数据成功')
# 创建索引(加速检索)
index = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 128},
'metric_type': 'L2'
}
collection.create_index('vector', index)
print('索引创建成功')
# 加载集合到内存
collection.load()
# 执行一次向量检索
search_vectors = [vectors[0]] # 用第一条向量作为查询
result = collection.search(search_vectors, 'vector', param={'nprobe': 10}, limit=3)
print('检索结果:', result)
运行脚本:
python test_milvus.py
如果一切正常,你会看到“连接成功”、“集合创建成功”、“插入100条数据成功”、“索引创建成功”和检索结果。
避坑指南:新手常见问题
- 连接超时:检查防火墙是否开放19530端口。CentOS临时开放:
sudo firewall-cmd --add-port=19530/tcp --permanent && sudo firewall-cmd --reload。 - 内存不足:Milvus启动时默认使用多个容器,可编辑
docker-compose.yml限制资源,或关闭其他非必要服务。 - 向量维度不一致:定义Collection时必须指定dim,插入的数据维度必须完全匹配。
- 索引构建失败:如果数据量太小(几十条),可以跳过索引。检索时去掉
param={'nprobe': 10}也能运行,但速度慢。
效果验证:确认向量检索正确
上面脚本已经完成了一次检索,结果会展示最相似的3条向量的ID和距离。
为了更直观,你可以将检索结果的距离值与手动计算做对比:
import numpy as np
dist = np.linalg.norm(np.array(vectors[0]) - np.array(vectors[1]))
print('手动计算距离:', dist)
应该和Milvus返回的第一个结果距离基本一致(浮点误差可忽略)。
至此,你已经完成了向量数据库Milvus的部署与使用全过程。
后续你可以修改集合名、向量维度、索引参数,或者将真实的文本向量(如BERT输出)插入Milvus实现语义搜索。
记得每次用完Milvus,通过docker-compose down停止服务,避免长时间占用资源。
如果你在部署过程中遇到其他报错,不妨先查看Milvus官方文档,或者回来对照本文的排错部分——大部分问题都出在环境配置和端口开放上。