从零搭建向量数据库Milvus:安装配置与避坑实战
先搞懂 Milvus 是什么,能解决什么问题
很多刚接触的朋友会把向量数据库Milvus和MySQL、Redis混为一谈,其实它们处理的场景完全不同。
MySQL存的是结构化表格数据,Redis存的是键值对缓存,而Milvus专门用来存储和搜索向量——也就是把图片、文本、语音等非结构化数据转换成数学上的高维数组,然后通过计算向量之间的距离来做相似性匹配。
举个例子,你用一张照片去搜淘宝同款,背后就可能是向量数据库在干活。
如果你打算做图片搜索、推荐系统、文本语义匹配或者RAG这类应用,Milvus是目前成熟度比较高的开源选择。
部署前需要准备什么
部署Milvus最推荐的方式是用Docker Compose,因为组件多——Milvus本身依赖etcd、minio等,手动搭容易漏东西。
你的服务器需要满足以下条件:
- 操作系统:Linux,建议Ubuntu 20.04或CentOS 7+
- Docker:20.10以上版本
- Docker Compose:v2以上
- 硬件:最低2核4G内存,生产环境建议4核8G起步
确保Docker和Docker Compose已经安装好,没装的话先执行基础安装命令。
用 Docker Compose 安装 Milvus(新手推荐)
第一步,从Milvus官方仓库下载docker-compose.yml文件。
建议先创建一个专用目录:
mkdir ~/milvus && cd ~/milvus
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
然后直接启动:
docker compose up -d
第一次启动会拉取镜像,时间取决于网络,通常5到15分钟。
启动后看一眼容器状态:
docker compose ps
如果三个服务(etcd、minio、milvus)的状态都是Up,说明Milvus已经跑起来了。
默认端口是19530,客户端通过这个端口连接。
新手最容易踩的坑
- 端口冲突:如果你服务器上已经跑了etcd或MinIO,或者19530端口被占用,Milvus会启动失败。这时可以编辑docker-compose.yml,把端口映射改成其他值,比如改成19531:19530。
- 内存不足:Milvus启动后三个容器加起来大概占用1.5G到2G内存,如果你的服务器只有2G内存,很可能会OOM导致容器退出。建议用
free -h先看一眼内存余量,不够的话加Swap或者升级配置。 - 防火墙没放行:如果客户端连不上Milvus,检查服务器防火墙有没有放行19530端口。Ubuntu用
ufw status,CentOS用firewall-cmd --list-all。
验证 Milvus 能否正常使用
最简单的验证方式是安装pymilvus客户端,写几行Python代码连一下。
先装客户端:
pip install pymilvus
然后创建一个测试脚本test.py:
from pymilvus import connections
connections.connect(host='你的服务器IP', port='19530')
print("连接成功")
如果没报错,说明Milvus服务端正常。
你还可以用Milvus自带的GUI工具Attu通过浏览器查看数据状态,但这步不作为必选项。
如果你按照上面的步骤走下来,应该已经跑起了一个可用的Milvus实例。
下一步可以尝试创建集合、插入向量数据并做搜索测试,遇到报错先看日志docker compose logs milvus,大部分问题都能通过日志定位。