如何高效安装部署向量数据库Milvus?
摘要:1 概述:Milvus 向量数据库之安装部署篇 前置知识: Milvus 向量数据库 [向量数据库AI] Milvus: 开源向量数据库 - 博客园千千寰宇 硬件要求 Milvus Standalone 部署模式的最低硬件要求为 4 核
1 概述:Milvus 向量数据库之安装部署篇
前置知识: Milvus 向量数据库
[向量数据库/AI] Milvus: 开源向量数据库 - 博客园/千千寰宇
硬件要求
Milvus Standalone 部署模式的最低硬件要求为 4 核 CPU 和 8 GB 内存
端口占用情况
端口占用情况
Milvus (Standalone / Distributed ) 支持 19530 和 9091 两个端口
端口 19530 : 用于 gRPC 和 RESTful API。
这是您使用不同 Milvus SDK 或 HTTP 客户端连接到 Milvus 服务器时的默认端口。
端口 9091 : 作为管理端口,用于 Kubernetes 内的指标收集、pprof 分析和运行状况探测。
部署模式
部署模式
维护状态
适用场景
数据规模
Milvus Lite
✅ 活跃维护
快速原型开发、Jupyter Notebook、边缘设备
数百万向量以内
Milvus Standalone
✅ 活跃维护
中小规模生产环境、早期产品阶段
最高可达1亿向量
Milvus Distributed
✅ 活跃维护
大规模生产、企业级部署
数亿至数百亿向量
Milvus Lite:作为 Python 库集成在 pymilvus 中,持续更新。最新版本可通过 pip install pymilvus 直接安装使用,无需额外启动服务端,数据持久化通过本地文件实现。
仅适用于小规模原型设计(通常少于 100 万个矢量)或边缘设备。
适合场景: Jupyter Notebook / 谷歌 Colab; 笔记本 电脑; 边缘设备
Milvus Standalone:所有组件打包在单个 Docker 镜像中,支持主备模式实现高可用,适合生产环境部署。官方文档明确说明该模式仍在持续维护,并支持扩展到1亿向量的规模。
Milvus Distributed:采用云原生架构,支持 Kubernetes 部署。最新版本(如 v2.5.x)仍在积极开发和维护中,社区讨论显示用户正在使用 v2.5.2-gpu 等较新版本进行部署测试
Milvus Lite
Milvus Lite 是 Milvus 的轻量级版本
Milvus 是一个高性能矢量数据库,通过矢量相似性搜索为 AI 应用程序提供支持。
该存储库包含 Milvus Lite 的核心组件。
使用 Milvus Lite,您可以在几分钟内开始构建具有向量相似性搜索的 AI 应用程序!Milvus Lite 适合在以下环境中运行:
Jupyter Notebook / 谷歌 Colab
笔记本 电脑
边缘设备
Milvus Lite 可以导入到您的 Python 应用程序中,提供 Milvus 的核心矢量搜索功能。
Milvus Lite 已经包含在 Milvus 的 Python SDK 中。
要使用它,您只需要: pip install pymilvus
Milvus Lite 使用与 Milvus Standalone 和 Distributed 相同的 API,提供跨环境的一致体验。
只需开发一次 GenAI 应用程序,即可在任何地方运行它们:
在笔记本电脑或 Jupyter Notebook 上使用 Milvus Lite,
在 Docker 容器中使用 Milvus Standalone,
或者在 K8s 集群上使用 Milvus Distributed 进行大规模生产。
Milvus Lite 仅适用于小规模原型设计(通常少于 100 万个矢量)或边缘设备。
对于大规模生产,我们建议使用 Milvus Standalone 或 Milvus Distributed。
您还可以考虑 Zilliz Cloud 上的完全托管的 Milvus。
Milvus-Lite
https://pypi.org/project/milvus-lite/
Milvus Lite 目前支持以下环境:
Ubuntu >= 20.04(x86_64 和 arm64)
MacOS >= 11.0(Apple Silicon M1/M2 和 x86_64)
注意:尚不支持 Windows。
Milvus Standalone
Milvus Distributed
Milvus Lite + Pip 安装方式 (Milvue-Lite:2.2.16) 【不推荐/未亲测成功】
Step0 安装 conda 虚拟环境管理器,并创建、启用虚拟环境
安装 conda 虚拟环境管理器
参考文献
[Python/虚拟环境/包管理] conda:多环境管理与包管理器 - 博客园/千千寰宇
[Python] Miniforge: 开源版conda环境管理器 - 博客园/千千寰宇
创建、启用虚拟环境
例如: ai-env
//添加第三方源,避免 python=3.12 及部分依赖包不支持、下载官方源的速度太慢等问题
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda create --name ai-env python=3.12
conda activate ai-env
C:\Users\xxx\.conda\envs\ai-env\python.exe
环境验证
(ai-env) C:\Users\Xxx> python --version
Python 3.12.11
(ai-env) C:\Users\Xxx> pip --version
pip 25.2 from C:\Users\EDY\.conda\envs\ai-env\Lib\site-packages\pip (python 3.12)
Step1 基于 pip 安装 milvus-lite
本地任意位置新建一个空文件夹作为服务器的存储位置
例如: D:\data\milvus-server\
基于 pip 安装 milvus 服务端
其一,会默认安装较低版本的 2.2.16;其二, pip的milvus项目已被弃用(https://pypi.org/project/milvus/),其建议使用milvus-lite项目(https://pypi.org/project/milvus-lite/)
不建议使用此命令
(ai-env) C:\Users\Xxx> pip install milvus
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting milvus
Downloading https://mirrors.aliyun.com/pypi/packages/ab/8f/2a24d629f194c1bc83725652a9341794fbab09d0de978d5e5ec72e1f80e4/milvus-2.2.16-py3-none-win_amd64.whl (38.6 MB)
---------------------------------------- 38.6/38.6 MB 13.0 MB/s 0:00:03
Installing collected packages: milvus
Successfully installed milvus-2.2.16
【补充】卸载命令
pip uninstall milvus
卸载完成后,上一步创建的 milvus-server(即 milvus-lite) 的数据目录不会自动删除,需要自己手动移除。
Step2 启动 milvus-server
(ai-env) C:\Users\Xxx> milvus-server --data D:\code\serve\milvus
Milvus 数据库服务已正常启用(如图)
Step3 Milvus客户端(应用程序): 连接、验证
安装依赖包: pymilvus
安装Python应用程序的Milvus客户端依赖包
(ai-env) C:\Users\Xxx> pip install pymilvus
查看详情
(ai-env) C:\Users\Xxx> pip install pymilvus
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting pymilvus
Downloading https://mirrors.aliyun.com/pypi/packages/d9/78/ab628de53ae36c2a4519e8d56e09604b2ff6e8084538cb058cdbff42a564/pymilvus-2.6.2-py3-none-any.whl (258 kB)
Requirement already satisfied: setuptools>69 in c:\users\edy\.conda\envs\ai-env\lib\site-packages (from pymilvus) (80.9.0)
Collecting grpcio!=1.68.0,!=1.68.1,!=1.69.0,!=1.70.0,!=1.70.1,!=1.71.0,!=1.72.1,!=1.73.0,>=1.66.2 (from pymilvus)
Downloading https://mirrors.aliyun.com/pypi/packages/ff/14/e1309a570b7ebdd1c8ca24c4df6b8d6690009fa8e0d997cb2c026ce850c9/grpcio-1.75.0-cp312-cp312-win_amd64.whl (4.6 MB)
---------------------------------------- 4.6/4.6 MB 11.2 MB/s 0:00:00
Collecting protobuf>=5.27.2 (from pymilvus)
Downloading https://mirrors.aliyun.com/pypi/packages/8c/f3/6f58f841f6ebafe076cebeae33fc336e900619d34b1c93e4b5c97a81fdfa/protobuf-6.32.1-cp310-abi3-win_amd64.whl (435 kB)
Requirement already satisfied: python-dotenv<2.0.0,>=1.0.1 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pymilvus) (1.0.1)
Collecting ujson>=2.0.0 (from pymilvus)
Downloading https://mirrors.aliyun.com/pypi/packages/44/1b/27c05dc8c9728f44875d74b5bfa948ce91f6c33349232619279f35c6e817/ujson-5.11.0-cp312-cp312-win_amd64.whl (43 kB)
Requirement already satisfied: pandas>=1.2.4 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pymilvus) (2.2.3)
Requirement already satisfied: typing-extensions~=4.12 in c:\users\edy\appdata\roaming\python\python312\site-packages (from grpcio!=1.68.0,!=1.68.1,!=1.69.0,!=1.70.0,!=1.70.1,!=1.71.0,!=1.72.1,!=1.73.0,>=1.66.2->pymilvus) (4.12.2)
Requirement already satisfied: numpy>=1.26.0 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pandas>=1.2.4->pymilvus) (2.2.4)
Requirement already satisfied: python-dateutil>=2.8.2 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pandas>=1.2.4->pymilvus) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pandas>=1.2.4->pymilvus) (2024.2)
Requirement already satisfied: tzdata>=2022.7 in c:\users\edy\appdata\roaming\python\python312\site-packages (from pandas>=1.2.4->pymilvus) (2024.2)
Requirement already satisfied: six>=1.5 in c:\users\edy\appdata\roaming\python\python312\site-packages (from python-dateutil>=2.8.2->pandas>=1.2.4->pymilvus) (1.17.0)
Installing collected packages: ujson, protobuf, grpcio, pymilvus
Successfully installed grpcio-1.75.0 protobuf-6.32.1 pymilvus-2.6.2 ujson-5.11.0
连接与验证
另开一窗口,进入 python 环境
(ai-env) C:\Users\Xxx> python
代码验证
import logging
from pymilvus import connections, Collection, CollectionSchema, FieldSchema, DataType
# 配置日志记录
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 连接到 Milvus 服务
try:
connections.connect(alias="default", uri="http://localhost:19530")
logging.info("成功连接到Milvus服务")
except Exception as e:
logging.error(f"连接Milvus服务失败: {e}")
raise
出现"成功连接到Milvus服务",即说明连接/验证成功
Milvue Lite + Pip 安装方式 (Milvue-Lite:2.5.1) 【不推荐/亲测未成功】
操作系统: CENTOS 7.9 (亲测: 尚不支持 Windows)
Step0 安装 conda 虚拟环境管理器,并创建、启用虚拟环境
参考 : Pip 安装方式 (Milvue-Lite:2.2.16)
Step1 基于 pip 安装 milvus-lite
(ai-env) [root@xxx ~]# pip install milvus-lite>=2.5.1
(ai-env) [root@xxx ~]# pip list | grep "milvus"
milvus-lite 2.5.1
Step2 启动 milvus-server(milvus-lite) 【无需此步骤】
Step2 Milvus客户端(应用程序): 连接、验证
Milvus Standalone + Docker 容器方式 【推荐/亲测成功】
以 ubuntu 24 (阿里云ECS, 4c 8gb)为例
step1 安装 Docker 和 Docker Compose
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# 添加阿里云 Docker 镜像源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 配置阿里云镜像加速(重要)
## 解释: https://<你的阿里云镜像加速器地址>.mirror.aliyuncs.com 的获取方法:
### 方法1: 登录阿里云容器镜像服务控制台获取专属镜像加速器地址
#### 访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
### 方法2: 通过阿里云CLI命令获取相关信息
#### aliyun cr GetInstance endpoint=<your-region-id>
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://<你的阿里云镜像加速器地址>.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io"
]
}
EOF
# 注:这样 docker pull milvusdb/milvus:v2.5.21 会自动走华为云镜像等指定的第三方镜像仓库,而无需修改 Compose 文件或手动打标签。
sudo systemctl daemon-reload
sudo systemctl restart docker
💡 获取阿里云镜像加速器:登录阿里云控制台 → 容器镜像服务 → 镜像加速器
补充: 基于国内服务器安装完成 docker 后,如何验证能够正常下载国外镜像?
# step1 直接拉取镜像
## 注: 成功标志:看到 `Status: Downloaded newer image for xxx` 或 `Status: Image is up to date for xxx`
# 拉取一个轻量级国外官方镜像进行测试
docker pull hello-world
# 或拉取 Alpine Linux(体积小,速度快)
docker pull alpine:latest
# 或拉取 Nginx 官方镜像
docker pull nginx:latest
# step2 验证镜像是否成功下载
docker images | grep alpine
# step3 运行测试容器验证完整性
docker run --rm alpine:latest echo "镜像运行正常"
step2 下载 Milvus 配置文件(使用国内代理)
milvus
https://milvus.io/
GitHub - milvus-io/milvus: Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search · GitHub
GitHub - zilliztech/attu: The Best GUI for Milvus · GitHub
# 创建工作目录
mkdir -p ~/milvus && cd ~/milvus
# 下载 docker-compose.yml(使用 GitHub 代理或手动下载)
# 方案A:使用 ghproxy 代理
wget https://ghproxy.com/https://github.com/milvus-io/milvus/releases/download/v2.5.21/milvus-standalone-docker-compose.yml -O docker-compose.yml
# 如果上面失败,使用方案B:手动创建
cat > docker-compose.yml << 'EOF'
version: '3.5'
services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.18
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2024-05-28T17-19-04Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
ports:
- "9001:9001"
- "9000:9000"
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
command: minio server /minio_data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.5.21
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
MINIO_REGION: us-east-1
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
ports:
#- "127.0.0.1:19530:19530" # 仅本地回环接口
#- "127.0.0.1:9091:9091" # 仅本地回环接口
#- "0.0.0.0:19530:19530" # 接收所有来源IP(同下)
#- "0.0.0.0:9091:9091" # 接收所有来源IP(同下)
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"
networks:
default:
name: milvus
EOF
step3 启用 账号密码认证(可选)
编辑 docker-compose.yml
在 standalone.volumes 下编辑,新增
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
# 新增如下4行配置项:
# 挂载自定义配置文件(关键步骤)
# - ${DOCKER_VOLUME_DIRECTORY:-.}/milvus.yaml:/milvus/configs/milvus.yaml # 官方配置模板: https://raw.githubusercontent.com/milvus-io/milvus/master/configs/milvus.yaml
# 或使用额外的用户配置
- ${DOCKER_VOLUME_DIRECTORY:-.}/user.yaml:/milvus/configs/user.yaml
新增并编辑user.yaml
cat > ~/milvus/user.yaml << 'EOF'
common:
security:
authorizationEnabled: true
EOF
重启 milvus
# 重启 Milvus 服务
docker compose restart standalone
# 或完全重新创建容器
docker compose down
docker compose up -d
连接方式变更
启用认证后,默认账户信息为:
用户名: root / 密码: Milvus
python sdk 示例
from pymilvus import MilvusClient
# 方式1:使用 token(推荐)
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus" # 格式:用户名:密码
)
# 方式2:使用 user/password 参数
client = MilvusClient(
uri="http://localhost:19530",
user="root",
password="Milvus"
)
密码错误时将报错: "auth check failure, please check username and password are correct"
修改默认密码
from pymilvus import connections, utility
# 使用默认账户连接
connections.connect(
alias='default',
host='localhost',
port='19530',
user='root',
password='Milvus'
)
# 修改 root 密码
utility.reset_password('root', 'Milvus', 'YourNewStrongPassword', using='default')
创建新用户(可选)
以 root 身份登录后,可以创建更多用户:
# 创建新用户
client.create_user(
user_name="user_1",
password="P@ssw0rd",
)
# 验证用户
client.describe_user("user_1")
step4 启动 Milvus
基于 docker-compose.yaml 拉取指定镜像
# 拉取镜像(国内环境可能需要多次尝试)
sudo docker compose pull
# 注:可仅拉取指定服务,跳过 milvus 等镜像 (了解即可)
# docker compose pull etcd minio
# 注:可仅拉取指定服务,跳过 milvus 等镜像 (了解即可)
# docker compose up -d --no-deps --pull never milvus
docker images
若 minio 镜像拉取失败,可尝试:
docker pull quay.io/minio/minio:RELEASE.2024-05-28T17-19-04Z
# 新增镜像标签
docker tag quay.io/minio/minio:RELEASE.2024-05-28T17-19-04Z minio/minio:RELEASE.2024-05-28T17-19-04Z
注: MinIO 官方主要将镜像发布在 Quay.io 仓库,而非 Docker Hub
根本原因:RELEASE.2024-05-28T17-19-04Z 这个特定标签在 Docker Hub 上可能已被删除或从未推送,MinIO 官方主要维护 quay.io 仓库。
若 milvus 镜像拉取失败,可尝试:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.5.21
# 新增镜像标签
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/milvusdb/milvus:v2.5.21 docker.io/milvusdb/milvus:v2.5.21
从华为云等处拉取(但可能最新版镜像是缺乏的)
启动服务
# 启动服务
## 启动方式1: 默认行为/本地存在目标镜像,则不再从远程仓库拉取
sudo docker compose up -d
## 启动方式2: 明确指定不从远程仓库拉取镜像
### always:总是拉取(默认行为) missing / if_not_present:本地不存在时才拉取 ⭐推荐 / never:永远不拉取,必须本地已存在 / build:优先使用本地构建的镜像
# sudo docker compose up -d --pull missing
查看运行状态/日志等
# 查看状态
sudo docker compose ps
docker compose ls
> out:
NAME STATUS CONFIG FILES
milvus running(3) /root/milvus/docker-compose.yml
# 查看日志
sudo docker logs milvus-standalone -f
step5 验证/使用
端口验证
curl http://127.0.0.1:19530 -v
数据库服务验证 by python
# 安装 Python 客户端测试
pip3 install pymilvus
# 测试连接
python3 << 'EOF'
from pymilvus import MilvusClient, connections, utility
# 连接 Milvus
client = MilvusClient("http://localhost:19530")
# 检查版本
print(f"Milvus 版本: {client.get_server_version()}")
# 创建测试集合
client.create_collection(
collection_name="test_collection",
dimension=128,
metric_type="COSINE"
)
print("集合创建成功!")
# 查看集合
print(f"集合列表: {client.list_collections()}")
EOF
Milvus Distributed + Kubernetes 安装方式(未亲测/适用于生产环境)
# 安装 kubectl 和 helm
curl -LO "https://dl.k8s/release/$(curl -L -s https://dl.k8s/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 添加 Milvus Helm 仓库
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
# 安装 Milvus(指定国内镜像)
helm install my-milvus milvus/milvus --set cluster.enabled=false --set etcd.replicaCount=1 --set minio.mode=standalone --set image.repository=registry.cn-hangzhou.aliyuncs.com/milvusdb/milvus
2 WEB 管理工具: Attu / Milvus WEB-UI(9091)
[AI/向量数据库/GUI] Attu : Milvus 的图形化与一体化管理工具 - 博客园/千千寰宇
https://github.com/zilliztech/attu/releases/download/v2.4.5/attu-docker-compose.yml -O attu-docker-compose.yml
Z FAQ for Milvus 安装部署
常见问题解决
问题
解决方案
镜像拉取失败
确认 Docker 镜像加速器配置正确,或手动 docker pull 替代镜像
端口被占用
sudo lsof -i :19530 查看占用,或修改 docker-compose.yml 端口映射
内存不足
Milvus 建议至少 8GB 内存,修改 docker-compose.yml 限制资源使用
防火墙问题
sudo ufw allow 19530/tcp 开放端口
Y 推荐文献
Milvus
https://milvus.io
快速入门 Milvus Lite - Milvus
https://github.com/milvus-io/milvus
https://github.com/milvus-io/milvus/releases
阿里云
容器镜像服务 - Aliyun
https://your-mirror-url.mirror.aliyuncs.com
华为云
https://mirrors.huaweicloud.com/home
X 参考文献
