向量数据库Milvus住宅服务器搭建
住宅服务器搭建向量数据库Milvus完整实操教程
如果你正在寻找一个能在自己家里服务器上运行的向量数据库,Milvus 是一个非常主流的选择。
它主要用来存储和搜索非结构化数据的向量表示,比如图像特征、文本嵌入等。
本文会手把手带你在住宅环境中完成 Milvus 的部署,确保每一步都能落地。
家庭服务器也能跑 Milvus?先看硬件门槛
Milvus 分为 Standalone(单机)和 Cluster(集群)模式。
对于住宅服务器,建议使用 Standalone 模式,资源占用相对较低。
- 内存:官方推荐至少 8GB 可用内存(含系统)。如果数据量不大(百万级向量以内),8GB 可以跑起来。
- CPU:2 核以上即可,建议 4 核。
- 磁盘:20GB 以上空余空间,SSD 更佳。
- 操作系统:Ubuntu 20.04/22.04 或 CentOS 7/8,本文以 Ubuntu 22.04 为例。
- Docker 和 Docker Compose:必须安装。
如果你的服务器配置较低,可以在启动时通过环境变量调整内存占用(后面会讲)。
第一步:安装 Docker 与 Docker Compose
Milvus 官方推荐用 Docker Compose 部署。
还没装 Docker 的同学,先执行以下命令:
# 更新包索引
sudo apt update && sudo apt upgrade -y
# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 将当前用户添加到 docker 组(避免每次都要 sudo)
sudo usermod -aG docker $USER
newgrp docker
# 验证 Docker 是否正常
docker --version
接着安装 Docker Compose(如果系统已带 docker compose 插件可跳过):
# 下载最新版 Compose(v2 版本)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
第二步:用 Docker Compose 一键部署 Milvus Standalone
- 创建一个工作目录并进入:
mkdir ~/milvus && cd ~/milvus
- 下载 Milvus 官方提供的 standalone 版 docker-compose.yml:
wget https://raw.githubusercontent.com/milvus-io/milvus/master/deployments/docker-compose-standalone.yml
- 启动容器:
docker-compose up -d
- 检查容器是否全部启动:
docker-compose ps
正常情况下可以看到三个容器:etcd、minio 和 standalone(milvus 本体),状态都是 Up。
- 查看运行日志确认无报错:
docker-compose logs -f standalone
看到类似 milvus is ready 的日志就说明部署成功。
第三步:调整资源配置让 Milvus 更流畅(避坑重点)
住宅服务器通常内存不充裕,默认配置可能占用过高。
你可以修改 docker-compose-standalone.yml 中的 standalone 服务环境变量:
environment:
- "CACHE_SIZE=512" # 缓存大小,单位MB,默认很高,降低到512
- "QUERY_NQ_QUEUE_SIZE=4"
也可以在启动前修改 minio 的内存限制:在 minio 服务下添加 mem_limit: 2g 等。
更简单的方法是在 docker-compose up -d 之前,编辑 yml 文件,在 standalone 服务的 deploy 字段中加入:
deploy:
resources:
limits:
memory: 4g
reservations:
memory: 2g
然后重新启动:
docker-compose down
docker-compose up -d
这样 Milvus 进程最多使用 4GB 内存,保留给系统和其他应用。
第四步:新手最容易踩的坑汇总
- 端口冲突:Milvus 默认占用 19530(gRPC)和 9091(HTTP)。如果这些端口已被占用,可以在
docker-compose-standalone.yml中修改ports映射,比如改成19531:19530。 - 内存不足导致容器退出:如果启动后容器不断重启,先查看日志
docker-compose logs standalone,常见错误是Out of memory。按上一步降低内存限制或给服务器加 swap。 - 系统时间不同步:Milvus 依赖时间戳,如果服务器时间偏差大可能导致数据异常。建议安装
ntp同步时间。 - 防火墙拦截:如果你需要从其他设备连接 Milvus,记得开放对应端口(19530)。
第五步:连上 Milvus 验证数据读写
在本地(或另一台机器)安装 Python 库 pymilvus,然后尝试连接并插入/搜索向量。
pip install pymilvus
创建测试脚本 test_milvus.py:
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility
# 连接 Milvus(默认地址 localhost:19530)
connections.connect(host='localhost', port='19530')
# 创建集合
fields = [
FieldSchema(name='id', dtype=DataType.INT64, is_primary=True),
FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, dim=128)
]
schema = CollectionSchema(fields, description='test collection')
collection = Collection(name='test_collection', schema=schema)
# 插入 10 条随机向量
import random
import numpy as np
vectors = [[random.random() for _ in range(128)] for _ in range(10)]
ids = list(range(10))
collection.insert([ids, vectors])
# 创建索引(可选)
index_params = {
'metric_type': 'L2',
'index_type': 'IVF_FLAT',
'params': {'nlist': 128}
}
collection.create_index(field_name='embedding', index_params=index_params)
# 搜索
collection.load()
search_vector = [random.random() for _ in range(128)]
results = collection.search(data=[search_vector], anns_field='embedding', param={'metric_type': 'L2', 'params': {'nprobe': 10}}, limit=3)
print('搜索结果 IDs:', results[0].ids)
运行:
python test_milvus.py
如果没有报错并打印出 IDs,说明整个 Milvus 服务已搭建成功,可以投入使用了。
结语
本文从零开始,带你在住宅服务器上完成了 Milvus 的搭建、配置和验证。
建议初次使用先按官方默认配置运行,熟悉后再根据内存和性能需求调整参数。
如果你遇到其他奇怪的问题,可以回看避坑部分或查阅 Milvus 官方文档,大部分问题都已有解决方案。