搬瓦工 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 可以与 LangChainLlamaIndex 无缝集成作为向量存储后端:

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 都能提供高性能的向量检索能力。同类工具还有 WeaviateChromaDB。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。