Milvus 安装:Milvus简介,为什么选择 Milvus,Milvus 部署方式选择,Docker Compose 运行 Milvus,Milvus 常见配置参数查询
本文简要介绍 Milvus 向量数据库的部署与使用流程,包括 Milvus 的基本概念、部署方式及 Standalone 架构。重点说明如何通过 Docker Compose 部署 Milvus,并结合 .env、milvus.yaml 和 docker-compose.yml 完成环境配置。同时介绍 etcd 与 MinIO 等依赖组件的作用,并给出启动步骤和访问地址,帮助快速搭建 Milvus
Milvus 安装:Milvus简介,为什么选择 Milvus,Milvus 部署方式选择,Docker Compose 运行 Milvus,Milvus 常见配置参数查询
Milvus 安装与使用
1. Milvus 简介
GitHub:https://github.com/milvus-io/milvus
1.1 Milvus 是什么
关于 Milvus:https://milvus.io/docs/zh/overview.md#What-is-Milvus
Milvus 是一个开源的高性能向量数据库,专门用于存储、索引和搜索大规模向量数据,广泛应用于:
- AI 知识库(RAG)
- 语义搜索
- 推荐系统
- 图像/视频检索
- 多模态 AI
Milvus 支持:
- 十亿级向量存储
- 多种向量索引算法(HNSW / IVF / FLAT)
- GPU 加速
- 分布式部署
1.2 为什么选择 Milvus




2 Milvus 部署
2.1 Milvus 部署方式选择
Milvus 部署选项概述:https://milvus.io/docs/zh/install-overview.md#Overview-of-Milvus-Deployment-Options
目前,Milvus 有三种部署选项:Milvus Lite、Milvus Standalone 和 Milvus Distributed。
- Milvus Lite:Milvus Lite是一个 Python 库,可导入到您的应用程序中。作为 Milvus 的 轻量级版本,它非常适合在 Jupyter 笔记本或资源有限的智能设备上运行快速原型。
- Milvus 单机版:Milvus Standalone 是 单机服务器部署。Milvus Standalone 的所有组件都打包到一个Docker 镜像中,部署起来非常方便。如果你有生产工作负载,但又不想使用 Kubernetes,在内存充足的单机上运行 Milvus Standalone 是个不错的选择。
- Milvus Distributed:Milvus Distributed 可部署在Kubernetes 集群 上。这种部署采用云原生架构,摄取负载和搜索查询分别由独立节点处理,允许关键组件冗余。它具有最高的可扩展性和可用性,并能灵活定制每个组件中分配的资源。Milvus Distributed 是在生产中运行大规模向量搜索系统的企业用户的首选。
部署模式的选择通常取决于应用程序的开发阶段:
-
用于快速原型开发或学习
如果您想 快速构建原型 或 用于学习,如检索增强生成(RAG)演示、人工智能聊天机器人、多模态搜索,Milvus Lite 本身或 Milvus Lite 与 Milvus Standalone 的组合都很适合。您可以在笔记本中使用 Milvus Lite 进行快速原型开发,并探索各种方法,如 RAG 中的不同分块策略。您可能希望在小规模生产中部署用 Milvus Lite 构建的应用程序,为真正的用户提供服务,或在更大的数据集(例如超过几百万个向量)上验证想法。Milvus Standalone 是合适的选择。Milvus Lite 的应用逻辑仍可共享,因为所有 Milvus 部署都有相同的客户端应用程序接口。Milvus Lite 中存储的数据也可以通过命令行工具移植到 Milvus Standalone 中。
-
小规模生产部署
对于早期生产阶段,当项目仍在寻求产品与市场的契合,敏捷性比可扩展性更重要时,Milvus Standalone 是最佳选择。只要有足够的机器资源,它仍然可以扩展到 1 亿向量,同时对 DevOps 的要求也比维护 K8s 集群低得多。
-
大规模生产部署
当你的业务快速增长,数据规模超过单台服务器的容量时,是时候考虑 Milvus Distributed 了。你可以继续使用Milvus Standalone作为开发或暂存环境,并操作运行Milvus Distributed的K8s集群。这可以支持你处理数百亿个向量,还能根据你的特定工作负载(如高读取、低写入或高写入、低读取的情况)灵活调整节点大小。
-
边缘设备上的本地搜索
对于在边缘设备上通过私有或敏感信息进行搜索,您可以在设备上部署 Milvus Lite,而无需依赖基于云的服务来进行文本或图像搜索。这适用于专有文档搜索或设备上对象检测等情况。
Milvus 部署模式的选择取决于项目的阶段和规模。Milvus 为从快速原型开发到大规模企业部署的各种需求提供了灵活而强大的解决方案。
- Milvus Lite:建议用于较小的数据集,多达几百万个向量。
- Milvus Standalone:适用于中型数据集,可扩展至 1 亿向量。
- Milvus Distributed:专为大规模部署而设计,能够处理从一亿到数百亿向量的数据集。
| 功能 | Milvus Lite | Milvus 单机版 | 分布式 Milvus |
|---|---|---|---|
| SDK / 客户端软件 | Python gRPC |
Python Go Java Node.js C# RESTful |
Python Java Go Node.js C# RESTful |
| 数据类型 | 密集向量 稀疏向量 二进制向量 布尔值 整数 浮点 VarChar 数组 JSON |
密集向量 稀疏向量 二进制向量 布尔型 整型 浮点型 VarChar 数组 JSON |
密集向量 稀疏向量 二进制向量 布尔值 整数 浮点 VarChar 数组 JSON |
| 搜索功能 | 向量搜索(ANN 搜索) 元数据过滤 范围搜索 标签查询 通过主键获取实体 混合搜索 |
向量搜索(ANN 搜索) 元数据过滤 范围搜索 标签查询 通过主键获取实体 混合搜索 |
向量搜索(ANN 搜索) 元数据过滤 范围搜索 标签查询 通过主键获取实体 混合搜索 |
| CRUD 操作符 | ✔ | ✔ | ✔ |
| 高级数据管理 | 不适用 | 访问控制 分区 分区密钥 |
访问控制 分区 分区密钥 物理资源分组 |
| 一致性级别 | 强 | 强 有界停滞 会话 最终 |
强 有界稳定性 会话 最终 |
2.2 Milvus Standalone 安装要求
在安装 Milvus Standalone 实例之前,请检查您的硬件和软件是否符合要求。
- 硬件要求:https://milvus.io/docs/zh/prerequisite-docker.md#Hardware-requirements
- 软件要求:https://milvus.io/docs/zh/prerequisite-docker.md#Software-requirements
- 磁盘要求:磁盘性能对 etcd 至关重要。强烈建议使用本地 NVMe SSD。较慢的磁盘响应速度可能会导致频繁的群集选举,最终降低 etcd 服务的性能。
2.3. 部署架构
Milvus standalone 依赖三个组件:
- Milvus:向量数据库
- etcd:元数据存储
- MinIO:向量文件对象存储
架构:
Client (SpringBoot / Python)
│
▼
Milvus
┌─────┴─────┐
etcd MinIO
2.4 Docker Compose 运行 Milvus
使用 Docker Compose 在 Docker 中启动 Milvus 实例:https://milvus.io/docs/zh/install_standalone-docker-compose.md#Run-Milvus-with-Docker-Compose-Linux
GitHub compose.yml:https://github.com/milvus-io/milvus/blob/master/deployments/docker/standalone/docker-compose.yml

v 2.6.11 版本的如下:
version: '3.5'
services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.25
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.6.11
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:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"
networks:
default:
name: milvus
2.5 Milvus 常见配置参数查询
通过调整 milvus.yaml 中的相应参数,配置你的 Milvus 实例,以适应你的应用场景。
有关各参数的详细信息,请查看以下链接。https://milvus.io/docs/zh/configure-docker.md#Modify-the-configuration-file
默认配置缺少很多安全方面的配置,如用户名和密码,也可以通过搜索的方式来找到对应的配置信息
建议添加下面的安全配置
2.6 实施
2.6.1 目录结构(推荐)
milvus-deploy/
│
├─ docker-compose.yml # docker compose 主配置
├─ .env # 环境变量,挂载目录 + 密码
├─ milvus.yaml # Milvus 配置文件,开启认证
└─ data/ # 持久化数据目录
├─ etcd
├─ minio
└─ milvus

2.6.2 .env 文件(跨平台挂载目录常量 + Milvus root 密码)
.env 与 docker-compose.yml 同目录:
# =====================================================
# Docker Compose Project Name
# =====================================================
# 用于指定 docker compose 的项目名称
#
# 作用:
# 所有资源(network / volume / container)都会加此前缀
#
# 例如:
# network -> milvus_milvus
# volume -> milvus_xxx
#
# 默认值是当前目录名
# =====================================================
COMPOSE_PROJECT_NAME=milvus
# =====================================================
# 数据目录
# =====================================================
# Linux
# VOLUME_ROOT=/data/milvus
#
# Windows
# VOLUME_ROOT=D:/milvus
#
# 默认当前目录
VOLUME_ROOT=./data
# =====================================================
# 端口配置
# =====================================================
MILVUS_PORT=19530
MILVUS_HEALTH_PORT=9091
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
ATTU_PORT=3000
# =====================================================
# MinIO 账号
# =====================================================
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
# =====================================================
# 镜像版本
# =====================================================
ETCD_IMAGE=quay.io/coreos/etcd:v3.5.25
MINIO_IMAGE=minio/minio:RELEASE.2024-05-28T17-19-04Z
MILVUS_IMAGE=milvusdb/milvus:v2.6.3
ATTU_IMAGE=zilliz/attu:latest
说明:
| 系统 | 示例 |
|---|---|
| Linux | /data/milvus |
| Windows | D:/milvus |
| 开发环境 | ./data |
Docker Compose 会自动加载 .env。
2.6.3 milvus.yaml(开启 Milvus 认证)
common:
security:
# =====================================================
# 是否开启 Milvus 用户认证
# =====================================================
authorizationEnabled: true
# =====================================================
# 自定义 root 用户密码
# 任何客户端或 UI 登录都必须使用 token
# token 格式:username:password
# =====================================================
defaultRootPassword: Pass@8520
Milvus 不会自动解析 env,Milvus 配置文件是 静态配置,更推荐 使用 milvus.yaml。
要在 Milvus 中启用认证并使用自定义用户名和密码,需要理解一个关键点:
Milvus 的认证不是通过 docker-compose 直接设置用户名密码,而是通过 Milvus 内部 RBAC(Role-Based
Access Control)系统 和 token 机制实现。
默认用户: root / Milvus
2.6.4 docker-compose.yml(完整注释版)
# =====================================================
# Milvus Standalone 部署
#
# 组件:
# 1 etcd -> 元数据存储
# 2 MinIO -> 对象存储(存储向量数据)
# 3 Milvus -> 向量数据库
# 4 Attu -> Milvus 图形化管理界面
#
# =====================================================
# Milvus Architecture
#
# +----------------------+
# | Attu UI |
# | Milvus 管理界面 |
# +----------+-----------+
# |
# |
# +------------------+ +------v-------+
# | Application | -> | Milvus |
# | 向量检索系统 | | Vector DB |
# +------------------+ +------+-------+
# |
# +--------------+--------------+
# | |
# +----v-----+ +------v------+
# | etcd | | MinIO |
# |元数据存储| | 向量对象存储|
# +----------+ +-------------+
#
# 认证流程:
#
# Attu / Application
# |
# | token: username:password
# v
# Milvus
#
# =====================================================
services:
# =====================================================
# etcd
# =====================================================
# 分布式 key-value 数据库
#
# 在 Milvus 中用于存储:
# - collection 元信息
# - segment 状态
# - 索引信息
# - 系统元数据
#
# 不对外暴露端口,只在 docker 内部网络使用
# =====================================================
etcd:
container_name: milvus-etcd
image: ${ETCD_IMAGE}
restart: unless-stopped
environment:
# 自动压缩历史 revision
# 防止 etcd 数据无限增长
ETCD_AUTO_COMPACTION_MODE: revision
# 保留最近 1000 个 revision
ETCD_AUTO_COMPACTION_RETENTION: 1000
# etcd 数据库存储上限
# 4GB
ETCD_QUOTA_BACKEND_BYTES: 4294967296
# 每 50000 次写入创建一次 snapshot
ETCD_SNAPSHOT_COUNT: 50000
volumes:
# =================================================
# etcd 数据持久化
#
# ${VOLUME_ROOT:-./data}
#
# 含义:
# 如果定义了 VOLUME_ROOT 就使用 VOLUME_ROOT
# 否则默认使用 ./data
#
# 示例:
#
# Linux
# /data/milvus/etcd
#
# Windows
# D:/milvus/etcd
# =================================================
- ${VOLUME_ROOT:-./data}/etcd:/etcd
command: >
etcd
--advertise-client-urls=http://etcd:2379
--listen-client-urls=http://0.0.0.0:2379
--data-dir=/etcd
healthcheck:
# 检查 etcd 是否健康
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
networks:
- milvus
# =====================================================
# MinIO
# =====================================================
#
# 对象存储系统(兼容 S3)
#
# 在 Milvus 中存储:
# - 向量数据
# - segment 文件
# - index 文件
#
# =====================================================
minio:
container_name: milvus-minio
image: ${MINIO_IMAGE}
restart: unless-stopped
environment:
# MinIO root 用户
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
# MinIO root 密码
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
# MinIO 数据存储目录
- ${VOLUME_ROOT:-./data}/minio:/minio_data
command: minio server /minio_data --console-address ":9001"
ports:
# S3 API
- "${MINIO_API_PORT}:9000"
# MinIO 控制台
- "${MINIO_CONSOLE_PORT}:9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
networks:
- milvus
# =====================================================
# Milvus
# =====================================================
#
# 向量数据库核心服务
#
# Standalone 模式适用于:
# - 开发
# - 中小规模生产
#
# 如果是超大规模生产
# 推荐 Milvus Cluster 模式
# =====================================================
milvus:
container_name: milvus-standalone
image: ${MILVUS_IMAGE}
restart: unless-stopped
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
# etcd 地址
ETCD_ENDPOINTS: etcd:2379
# MinIO 地址
MINIO_ADDRESS: minio:9000
# MinIO access key
MINIO_ACCESS_KEY_ID: ${MINIO_ROOT_USER}
# MinIO secret key
MINIO_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
# S3 region
MINIO_REGION: us-east-1
volumes:
# Milvus 本地存储
# 存储 WAL、缓存等
- ${VOLUME_ROOT:-./data}/milvus:/var/lib/milvus
ports:
# Milvus gRPC API
- "${MILVUS_PORT}:19530"
# 健康检查接口
- "${MILVUS_HEALTH_PORT}:9091"
depends_on:
- etcd
- minio
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 90s
timeout: 20s
retries: 3
networks:
- milvus
# =====================================================
# Attu
# =====================================================
#
# Milvus 官方图形管理界面
#
# 可以进行:
# - collection 管理
# - 向量插入
# - 向量搜索
# - index 创建
# =====================================================
attu:
container_name: milvus-attu
image: ${ATTU_IMAGE}
restart: unless-stopped
ports:
- "${ATTU_PORT}:3000"
environment:
# Milvus 地址
MILVUS_URL: milvus:19530
depends_on:
- milvus
networks:
- milvus
# =====================================================
# Docker 网络
# =====================================================
# 所有服务运行在同一个 bridge 网络
# 可以通过 service name 互相访问
#
# 例如:
# milvus -> etcd:2379
# milvus -> minio:9000
# =====================================================
networks:
milvus:
name: milvus-network
driver: bridge
2.6.5 启动
进入当前目录:
docker compose up -d

查看:
docker ps

查看网络:
docker network ls

2.6.6 访问地址
使用默认的端口号
| 服务 | 地址 | 说明 | 类型 |
|---|---|---|---|
| Attu | http://localhost:3000 | Milvus Web 管理界面 | Web UI |
| MinIO Console | http://localhost:9001 | 对象存储管理界面 | Web UI |
| Milvus gRPC | localhost:19530 |
向量数据库 API | gRPC 是一种 RPC 通信协议: • 基于 HTTP/2• 使用 Protocol Buffers• 供程序调用(Python / Java / Go / Node) • 不能通过浏览器直接访问 |


更多推荐
所有评论(0)