news 2026/7/23 17:43:30

向量数据库实战:选型、调优与落地~系列文章16:Milvus 分布式部署实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
向量数据库实战:选型、调优与落地~系列文章16:Milvus 分布式部署实战

Milvus 分布式部署实战:从单机到集群的完整踩坑记录 🏗️

🔥本文是《向量数据库实战:选型、调优与落地》专栏第 16 篇

⏱️阅读时间:约 15 分钟


🎯 开篇:什么时候需要分布式?

单机 Milvus 的极限

指标单机极限
数据量~5000 万条(受内存限制)
QPS~5000(取决于硬件)
可用性单点故障

当你的需求超过这些数字时,就必须上分布式了👇

  • 数据量 > 5000 万条
  • QPS > 5000
  • 需要高可用(不能宕机)
  • 需要在线扩缩容

🏗️ Milvus 分布式架构

┌─────────────────────────────────────────────────────────────┐ │ Milvus Cluster 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 接入层(Access Layer) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ Proxy 1 │ │ Proxy 2 │ │ Proxy 3 │ ← 负载均衡 │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ┌───────────┬───────────┼───────────┬───────────┐ │ │ ▼ ▼ ▼ ▼ ▼ │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐ │ │ │Query │ │Data │ │Index │ │Coord │ │ etcd │ │ │ │Node │ │Node │ │Node │ │ZK │ │ (元数据) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │搜索执行│ │数据管理│ │索引构建│ │调度协调│ │ 3节点集群 │ │ │ └──────┘ └──────┘ └──────┘ └──────┘ └──────────┘ │ │ │ │ │ ┌──────────┐ │ │ │ MinIO │ │ │ │ (对象存储) │ │ │ └──────────┘ │ │ │ │ 各组件均可独立扩缩容! │ │ │ └─────────────────────────────────────────────────────────────┘

四大组件

组件职责扩缩容建议
Proxy接入层,处理客户端请求按 QPS 扩,通常 2-5 个
Query Node执行搜索查询按数据量和 QPS 扩
Data Node管理数据写入和持久化按写入 QPS 扩
Index Node构建向量索引按索引构建需求扩

🛠️ Kubernetes 部署(推荐)

Step 1:安装 Milvus Operator

# 添加 Helm 仓库helm repoaddmilvus https://zilliztech.github.io/milvus-helm/ helm repo update# 安装 Milvus Operatorkubectl apply-fhttps://raw.githubusercontent.com/milvus-io/milvus-operator/main/deploy/manifests/deployment.yaml

Step 2:部署 Milvus Cluster

# milvus-cluster.yamlapiVersion:milvus.io/v1beta1kind:Milvusmetadata:name:my-milvusspec:mode:clusterconfig:dataNode:concurrency:4queryNode:scheduler:cpuRatio:0.9components:proxy:replicas:2resources:limits:cpu:"2"memory:"4Gi"queryNode:replicas:3resources:limits:cpu:"4"memory:"16Gi"dataNode:replicas:2resources:limits:cpu:"2"memory:"8Gi"indexNode:replicas:2resources:limits:cpu:"4"memory:"8Gi"dependencies:etcd:replicas:3minio:replicas:3pulsar:replicas:3
# 部署kubectl apply-fmilvus-cluster.yaml# 查看状态kubectl get milvus my-milvus

集群资源估算

数据量Query NodeData NodeIndex Node总内存
100 万2×8GB2×4GB2×4GB~32GB
1000 万3×16GB3×8GB2×8GB~104GB
5000 万5×32GB5×16GB3×16GB~368GB
1 亿8×64GB8×32GB4×32GB~960GB

⚙️ 关键配置调优

消息队列选择

消息队列优点缺点推荐场景
Pulsar功能全,多层存储资源消耗大生产推荐🏆
Kafka生态好,性能高需要自己运维已有 Kafka 的团队
Rockemq轻量功能较少小规模集群

负载均衡策略

# Proxy 层负载均衡配置proxy:maxTaskNum:1024# 最大并发任务数timeTickInterval:200# 时间戳间隔(ms)# 前端 Nginx 负载均衡upstream milvus_proxy{least_conn;# 最少连接数策略server proxy-1:19530; server proxy-2:19530; server proxy-3:19530;}

📊 分布式性能实测

测试环境:K8s 集群,6 节点,1 亿条 1024 维向量

配置QPSP50 延迟P99 延迟召回率
单机(128GB)32005.2ms12ms96.8%
集群(3 Query)85004.8ms10ms96.8%
集群(5 Query)140004.5ms9ms96.8%
集群(8 Query)180004.2ms8ms96.8%

关键发现

  • 🟢Query Node 数量与 QPS 近似线性关系
  • 🟢延迟几乎不随节点增加而增加
  • 🟢召回率保持一致

⚠️ 踩坑记录

坑 1:etcd 磁盘 IO 瓶颈

问题:etcd 对磁盘 IO 非常敏感,慢磁盘会导致整个集群不稳定 解决:etcd 必须用 SSD,推荐 NVMe

坑 2:Segment 数量过多

问题:大量小 Segment 导致查询性能下降 解决: - 批量写入(每次 > 1000 条) - 定期 compaction - 监控 segment 数量

坑 3:内存 OOM

问题:Query Node 加载数据时 OOM 解决: - 合理估算内存需求 - 配置 loadMemoryLimit - 使用分段加载策略

坑 4:索引构建阻塞查询

问题:大量数据写入后,索引构建占用资源导致查询变慢 解决: - Index Node 独立部署 - 配置索引构建的资源限制 - 错峰构建索引

🔑 本篇核心要点回顾

要点说明
何时上分布式数据量>5000万 或 QPS>5000
推荐部署方式Kubernetes + Milvus Operator
核心组件Proxy/Query/Data/Index Node
消息队列生产推荐 Pulsar
关键坑etcd 用 SSD、批量写入、内存估算

📌下篇预告:《向量数据库性能调优:索引参数、batch_size、并发数的黄金配置 ⚙️》

💬有问题欢迎评论区讨论,觉得有用请点赞收藏 👍

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 17:43:08

C++引用、左值和右值

目录 一,引用 1,函数参数引用传递 2,引用型变量 3,函数返回引用型 二,左值和右值 1,左值和右值 2,常见的左值和右值 (1)变量、字面量 (2&#xff09…

作者头像 李华
网站建设 2026/7/23 17:42:12

在VMWare虚拟机下创建Openwrt LEDE软路由系统

1. 准备工作 安装VMWare WorkStation 15 Pro(傻瓜式安装, 就不写过程了)下载好Openwrt koolshare镜像 2. 开始操作啦 下载Openwrt koolshare镜像 openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-combined-squashfs.vmdk 打开VMWare, 点击创建新的虚拟机, 选择自定义…

作者头像 李华
网站建设 2026/7/23 17:41:28

深度解析TM4C129LNCZAD:从数据手册修订看工业MCU实战应用

1. 项目概述:从一份修订记录看一颗工业级MCU的深度解析在嵌入式开发领域,尤其是工业控制、网络通信和物联网网关这类对稳定性和性能有严苛要求的场景,一颗强大的微控制器(MCU)是系统的“大脑”。而理解这颗“大脑”最权…

作者头像 李华
网站建设 2026/7/23 17:39:34

软路由:AdGuardHome + OpenWRT 让你家的网络无广告无跟踪

目录 一、AdGuardHome 简介 二、先展示一下我家使用 AdGuardHome 一个月内的成果 二、如何使用AdGuardHome & AdGuardHome 拦截规则 1、DNS封锁清单 2、目前我订阅的规则 3、自定义过滤规则 一、AdGuardHome 简介 关于软路由如何搭建部署,可阅读我的上一…

作者头像 李华
网站建设 2026/7/23 17:36:43

小程序协同过滤菜谱推荐系统系统

背景随着移动互联网的普及和人们生活节奏的加快,饮食健康与个性化需求日益受到重视。传统的菜谱推荐方式往往基于静态分类或简单搜索,难以满足用户对个性化、多样化的需求。协同过滤算法作为一种成熟的推荐技术,能够通过分析用户历史行为数据…

作者头像 李华