搬瓦工 VPS 部署 Milvus 向量数据库教程
Milvus 是一款开源的高性能向量数据库,专门为 AI 应用中的向量相似度搜索而设计。它能够高效存储、索引和检索数十亿级别的向量数据,是构建推荐系统、语义搜索、图像检索和 RAG 应用的核心基础设施。本教程将介绍如何在搬瓦工 VPS 上部署 Milvus 并进行基本的向量操作。
一、Milvus 简介
Milvus 提供两种部署模式:
- Milvus Lite:嵌入式模式,以 Python 库形式运行,适合开发和小规模应用。
- Milvus Standalone:独立部署模式,通过 Docker 运行,适合生产环境。
核心特点包括:毫秒级向量搜索、支持多种索引类型(IVF、HNSW、DiskANN)、混合标量和向量查询、水平扩展能力。
二、环境要求
- 操作系统:Ubuntu 20.04 或更高版本。
- 内存:Milvus Lite 至少 2GB,Standalone 至少 4GB。
- Docker:Standalone 模式需要 Docker 和 Docker Compose。
选购搬瓦工 VPS 请参考 全部方案。
三、方式一:Milvus Lite(嵌入式)
最简单的方式,无需 Docker,直接作为 Python 库使用:
apt update && apt upgrade -y
apt install python3 python3-pip python3-venv -y
mkdir -p /opt/milvus-app && cd /opt/milvus-app
python3 -m venv venv
source venv/bin/activate
pip install pymilvus
cat > /opt/milvus-app/milvus_lite_demo.py <<'EOF'
from pymilvus import MilvusClient
# Milvus Lite 模式 - 数据存储在本地文件
client = MilvusClient("./milvus_lite.db")
# 创建集合
if not client.has_collection("demo_collection"):
client.create_collection(
collection_name="demo_collection",
dimension=384 # 向量维度,与嵌入模型匹配
)
# 插入示例向量数据
import random
data = [
{"id": i, "vector": [random.random() for _ in range(384)], "text": f"文档 {i}"}
for i in range(100)
]
client.insert(collection_name="demo_collection", data=data)
# 向量搜索
query_vector = [random.random() for _ in range(384)]
results = client.search(
collection_name="demo_collection",
data=[query_vector],
limit=5,
output_fields=["text"]
)
print("搜索结果:", results)
EOF
python3 milvus_lite_demo.py
四、方式二:Milvus Standalone(Docker)
生产环境推荐使用 Docker 部署,需先安装 Docker(参考 Docker 安装教程):
mkdir -p /opt/milvus && cd /opt/milvus
# 下载 Docker Compose 配置
wget https://github.com/milvus-io/milvus/releases/download/v2.4.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
也可以手动创建配置文件:
cat > /opt/milvus/docker-compose.yml <<'EOF'
version: '3.5'
services:
etcd:
image: quay.io/coreos/etcd:v3.5.5
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
volumes:
- etcd_data:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
restart: unless-stopped
minio:
image: minio/minio:latest
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
volumes:
- minio_data:/minio_data
command: minio server /minio_data
restart: unless-stopped
milvus:
image: milvusdb/milvus:v2.4-latest
command: ["milvus", "run", "standalone"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
volumes:
- milvus_data:/var/lib/milvus
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- etcd
- minio
restart: unless-stopped
volumes:
etcd_data:
minio_data:
milvus_data:
EOF
docker compose up -d
4.1 验证部署
# 检查服务状态
docker compose ps
# 检查 Milvus 健康状态
curl http://localhost:9091/healthz
五、Python 客户端操作
cat > /opt/milvus-app/milvus_client.py <<'EOF'
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility
# 连接 Milvus 服务器
connections.connect("default", host="localhost", port="19530")
# 定义集合 Schema
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=1000),
]
schema = CollectionSchema(fields, description="文档向量集合")
# 创建集合
collection_name = "documents"
if utility.has_collection(collection_name):
utility.drop_collection(collection_name)
collection = Collection(collection_name, schema)
# 创建索引
index_params = {
"metric_type": "COSINE",
"index_type": "IVF_FLAT",
"params": {"nlist": 128}
}
collection.create_index("embedding", index_params)
print(f"集合 {collection_name} 创建成功")
# 加载集合到内存
collection.load()
print("集合已加载到内存")
EOF
python3 milvus_client.py
六、安装 Attu 管理界面
Attu 是 Milvus 的官方图形管理界面:
docker run -d --name attu \
-p 3000:3000 \
-e MILVUS_URL=http://host.docker.internal:19530 \
zilliz/attu:latest
访问 http://your-ip:3000 即可使用可视化界面管理 Milvus 数据。
七、与 RAG 应用集成
Milvus 可以与 LangChain 和 LlamaIndex 无缝集成作为向量存储后端:
pip install langchain-milvus
# LangChain 集成示例
from langchain_milvus import Milvus
from langchain_community.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Milvus(
embedding_function=embeddings,
collection_name="langchain_docs",
connection_args={"host": "localhost", "port": "19530"}
)
八、性能调优
- 索引选择:IVF_FLAT 平衡精度和速度,HNSW 适合高召回率场景。
- 内存管理:及时释放不用的集合,使用
collection.release()。 - 批量操作:插入数据时使用批量操作,每批 1000-10000 条。
九、常见问题
内存不足
Milvus Standalone 至少需要 4GB 内存。如果内存有限,建议使用 Milvus Lite 或选择 ChromaDB 这样更轻量的替代方案。
总结
Milvus 是构建 AI 应用不可或缺的向量数据库基础设施。无论是语义搜索、推荐系统还是 RAG 应用,Milvus 都能提供高性能的向量检索能力。同类工具还有 Weaviate 和 ChromaDB。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。