Milvus部署架构选择和Docker部署实战指南
导读:向量数据库作为AI时代的核心基础设施,Milvus凭借其强大的性能和灵活的架构设计在市场中占据重要地位。然而,许多开发者在部署Milvus时面临架构选择困惑和配置复杂性挑战,导致项目进展受阻。
本文将为您提供一套完整的Milvus部署解决方案,从架构选择策略到Docker实战部署的全流程技术指导。文章深入解析了Milvus Lite、Standalone和Distributed三种部署架构的适用场景,帮助您根据项目规模和数据量级做出最优选择。特别值得关注的是,我们将重点介绍Milvus Standalone部署方案,它能够在单机环境下支持高达1亿向量规模的数据处理能力。
通过阅读本文,您将掌握生产级Milvus服务的完整部署流程,包括网络安全配置、自动化部署脚本使用和Web管理界面操作。文章还提供了经过验证的Shell脚本,实现一键式服务管理功能。无论您是初次接触Milvus的开发者,还是需要优化现有部署方案的架构师,这份实战指南都将为您的向量数据库项目提供有力的技术支撑。
概述
本文将深入探讨Milvus向量数据库的部署架构选择策略以及基于Docker的实际部署操作,为不同规模的项目提供完整的技术解决方案。
部署架构选择策略
架构选择原则
选择合适的Milvus部署架构主要取决于项目的发展阶段和数据规模需求。Milvus为从快速原型开发到大规模企业级部署的各种应用场景提供了灵活且强大的解决方案。
三种主要部署架构
Milvus Lite
- 适用场景:适合小规模数据集处理,支持数百万级向量数据
- 系统要求:不支持Windows操作系统
- 推荐用途:快速原型验证、小型测试项目
Milvus Standalone
- 适用场景:中等规模数据集处理,可扩展至1亿向量规模
- 部署特点:单机服务器部署,所有组件集成在统一Docker镜像中
- 优势:部署简便,适合中小型生产环境
Milvus Distributed
- 适用场景:大规模企业级部署,处理从1亿到数百亿级向量数据集
- 架构特点:分布式设计,支持水平扩展
- 推荐用途:大型企业生产环境,高并发查询场景
Milvus分层架构详解
Milvus采用分层架构设计,在Docker部署中包含以下核心组件:
核心组件功能
| Coordinator | → 管理元数据、负载均衡 |
| Query Node | → 处理查询与数据存储 |
| Data Node | → 处理查询与数据存储 |
| Object Storage (S3) | → 持久化存储(可选MinIO、AWS S3) |
Coordinator层:负责管理系统元数据和实现负载均衡策略
Query Node:专门处理向量查询请求与数据存储管理
Data Node:负责处理数据查询操作与存储管理
Object Storage:提供持久化存储服务,支持S3兼容存储(可选择MinIO或AWS S3)
架构优势
Milvus Standalone将所有组件打包到单个Docker镜像中,大大简化了部署复杂度,特别适合快速部署和测试环境搭建。
云服务解决方案
对于预算充足的企业用户,建议直接采购云厂商提供的托管服务,例如阿里云的Milvus服务(详细信息请参考:https://help.aliyun.com/zh/milvus)。
Linux服务器Docker部署实战
网络配置要求
在阿里云等云平台部署时,需要在网络安全组中开放以下关键端口:
- 2379:etcd服务端口
- 9091:Web UI访问端口
- 19530:Milvus服务主端口
安全提醒:默认配置未启用权限校验机制。生产环境部署时,建议配置内网访问并结合IP白名单策略以确保安全性。
自动化部署脚本
以下是完整的Milvus Standalone自动化部署脚本:
#!/usr/bin/env bash# Licensed to the LF AI & Data foundation under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.run_embed() {cat << EOF > embedEtcd.yaml
listen-client-urls: http://0.0.0.0:2379
advertise-client-urls: http://0.0.0.0:2379
quota-backend-bytes: 4294967296
auto-compaction-mode: revision
auto-compaction-retention: '1000'
EOFcat << EOF > user.yaml
# Extra config to override default milvus.yaml
EOFif [ ! -f "./embedEtcd.yaml" ]thenecho "embedEtcd.yaml file does not exist. Please try to create it in the current directory."exit 1fiif [ ! -f "./user.yaml" ]thenecho "user.yaml file does not exist. Please try to create it in the current directory."exit 1fisudo docker run -d \--name milvus-standalone \--security-opt seccomp:unconfined \-e ETCD_USE_EMBED=true \-e ETCD_DATA_DIR=/var/lib/milvus/etcd \-e ETCD_CONFIG_PATH=/milvus/configs/embedEtcd.yaml \-e COMMON_STORAGETYPE=local \-v $(pwd)/volumes/milvus:/var/lib/milvus \-v $(pwd)/embedEtcd.yaml:/milvus/configs/embedEtcd.yaml \-v $(pwd)/user.yaml:/milvus/configs/user.yaml \-p 19530:19530 \-p 9091:9091 \-p 2379:2379 \--health-cmd="curl -f http://localhost:9091/healthz" \--health-interval=30s \--health-start-period=90s \--health-timeout=20s \--health-retries=3 \milvusdb/milvus:v2.5.6 \milvus run standalone 1> /dev/null
}wait_for_milvus_running() {echo "Wait for Milvus Starting..."while truedores=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`if [ $res -eq 1 ]thenecho "Start successfully."echo "To change the default Milvus configuration, add your settings to the user.yaml file and then restart the service."breakfisleep 1done
}start() {res=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`if [ $res -eq 1 ]thenecho "Milvus is running."exit 0fires=`sudo docker ps -a|grep milvus-standalone|wc -l`if [ $res -eq 1 ]thensudo docker start milvus-standalone 1> /dev/nullelserun_embedfiif [ $? -ne 0 ]thenecho "Start failed."exit 1fiwait_for_milvus_running
}stop() {sudo docker stop milvus-standalone 1> /dev/nullif [ $? -ne 0 ]thenecho "Stop failed."exit 1fiecho "Stop successfully."}delete_container() {res=`sudo docker ps|grep milvus-standalone|wc -l`if [ $res -eq 1 ]thenecho "Please stop Milvus service before delete."exit 1fisudo docker rm milvus-standalone 1> /dev/nullif [ $? -ne 0 ]thenecho "Delete milvus container failed."exit 1fiecho "Delete milvus container successfully."
}delete() {delete_containersudo rm -rf $(pwd)/volumessudo rm -rf $(pwd)/embedEtcd.yamlsudo rm -rf $(pwd)/user.yamlecho "Delete successfully."
}upgrade() {read -p "Please confirm if you'd like to proceed with the upgrade. The default will be to the latest version. Confirm with 'y' for yes or 'n' for no. > " checkif [ "$check" == "y" ] ||[ "$check" == "Y" ];thenres=`sudo docker ps -a|grep milvus-standalone|wc -l`if [ $res -eq 1 ]thenstopdelete_containerficurl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed_latest.sh && \bash standalone_embed_latest.sh start 1> /dev/null && \echo "Upgrade successfully."elseecho "Exit upgrade"exit 0fi
}case $1 inrestart)stopstart;;start)start;;stop)stop;;upgrade)upgrade;;delete)delete;;*)echo "please use bash standalone_embed.sh restart|start|stop|upgrade|delete";;
esac
部署操作指令
完成脚本文件准备后,可使用以下命令进行服务管理:
# 启动Milvus服务
bash standalone_embed.sh start# 停止Milvus服务
bash standalone_embed.sh stop# 删除Milvus服务及相关数据
bash standalone_embed.sh delete# 升级Milvus至最新版本
bash standalone_embed.sh upgrade# 重启Milvus服务
bash standalone_embed.sh restart
部署完成后的系统状态
服务组件状态
成功执行安装脚本后,系统将建立以下服务状态:
- Milvus主服务容器在19530端口启动并运行
- 嵌入式etcd服务集成在同一容器中,监听2379端口
- Milvus数据卷自动映射到当前目录的volumes/milvus文件夹
Web管理界面访问
可通过浏览器访问Milvus内置的Web管理界面:
http://${MILVUS_PROXY_IP}:9091/webui
例如:http://192.168.11.161:9091/webui/
Web UI功能说明
重要提醒:Milvus Web UI与Attu等第三方可视化管理工具存在功能差异。Web UI是系统内置的轻量级管理工具,主要提供以下基础功能:
- 运行环境状态监控
- 数据库和Collections基本信息查看
- 系统任务执行状态跟踪
- 慢查询请求分析
功能限制:该Web UI不支持数据库的创建、删除等管理操作,也不提供复杂的数据操作任务功能。
参考资源
更多详细的技术文档和配置说明,请参考Milvus官方文档:
https://milvus.io/docs/zh/milvus-webui.md
总结
本文提供了从架构选择到实际部署的完整Milvus解决方案。通过合理选择部署架构并遵循标准化的部署流程,可以快速搭建稳定可靠的向量数据库服务环境。在生产环境中,建议结合具体的业务需求和安全要求,对配置参数进行适当的优化调整。
相关文章:

Milvus部署架构选择和Docker部署实战指南
导读:向量数据库作为AI时代的核心基础设施,Milvus凭借其强大的性能和灵活的架构设计在市场中占据重要地位。然而,许多开发者在部署Milvus时面临架构选择困惑和配置复杂性挑战,导致项目进展受阻。 本文将为您提供一套完整的Milvus部…...

高效合并 Excel 表格实用工具
软件介绍 这里介绍一款用于 Excel 合并的软件。 使用反馈与工具引入 之前推荐过 Excel 合并工具,但有小伙伴反馈这些工具对于需要合并单元格的 Excel 文件不太适用,而且无法合并表头。鉴于这些问题,找到了今天要介绍的这款 Excel 合并工具…...
【前端】Vue3 中实现两个组件的动态切换保活
在 Vue3 中实现两个组件的动态切换保活,核心是通过 <component> 动态组件与 <KeepAlive> 缓存组件的组合使用。以下是具体实现方案和进阶技巧: 一、基础实现方案 1. 动态组件 KeepAlive 保活 使用 <component :is> 实现动态切换&am…...

拉取gitlab项目
一、下载nvm管理node 先下载配置好nvm,再用nvm下载node 下载链接:开始 下载nvm - nvm中文官网 情况:npm i 下载依赖缓慢,可能是node版本不对,可能node版本太高 可能得问题:使用nvm 下载低版本的node时,…...

树莓派(Raspberry Pi)安装Docker教程
本章教程,主要介绍如何在树莓派上安装Docker。 一、安装步骤 # 卸载旧版本(如果有): for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg;...

计算机视觉---YOLOv4
YOLOv4(You Only Look Once v4)于2020年由Alexey Bochkovskiy等人提出,是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术,实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…...

在雄性小鼠自发脑网络中定位记忆巩固的因果中枢
目录 简要总结 摘要 1 引言 2 方法 3 结果 简要总结 这篇文章主要研究了雄性小鼠在自发脑网络中记忆巩固的因果中枢定位。记忆巩固涉及学习后休息和睡眠期间全脑网络的自发重组,但具体机制尚不清楚。目前理论认为海马体在这一过程中至关重要,但其他…...

刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB
有时候我们会遇到一些机型被屏幕锁 账号锁等锁定。无法进入系统界面。也没有开启usb调试的情况下如何通过一些操作来开启adb调试。然后通过adb指令来禁用对应的app顺利进入系统。以此来操作保数据等操作. 通过博文了解💝💝💝 1💝💝💝----了解一些品牌机型锁定状态…...

Selenium 测试框架 - Kotlin
🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…...
docker运行centos提示Operation not permitted
在使用Docker运行CentOS容器时,遇到"Operation not permitted"错误,通常是由于权限问题或容器安全策略引起的。以下是详细的排查和解决步骤: 步骤一:检查Docker版本和系统更新 首先,确保你的Docker和系统软…...

010501上传下载_反弹shell-渗透命令-基础入门-网络安全
文章目录 1 上传下载2 反弹shell命令1. 正向连接(Forward Connection)正向连接示例(nc) 2. 反向连接(Reverse Connection)反向连接示例(反弹 Shell) 对比表格实际应用中的选择防御建…...

Flask集成Selenium实现网页截图
先看效果 程序实现的功能为:截取目标网址对应的页面,并将截取后的页面图片返回到用户端,用户可自由保存该截图。 支持的url参数如下: url:目标网址(必填项),字符串类型,…...
机顶盒CM311-5s纯手机免拆刷机,全网通,当贝桌面
需要用到的工具 安卓手机一台 甲壳虫adb助手(安卓app) OTG转换线一个(或者用usb,typec双头的U盘一个,未测试) 8g U盘一个 用到的刷机文件 1.放入手机中的文件 misc recovery 2. 放入U盘根目录 upda…...

知识图谱:AI时代语义认知的底层重构逻辑
在生成式人工智能(GEO)的技术架构中,知识图谱已从辅助性工具演变为驱动机器认知的核心神经中枢。它通过结构化语义网络的重构,正在突破传统数据处理的线性逻辑,建立机器对复杂业务场景的深度理解能力。 一、语义解构&a…...
centos7安装MySQL(保姆级教学)
在 Linux 系统的软件管理中,YUM(Yellowdog Updater, Modified)包管理器是不可或缺的工具,而 YUM 源的选择与配置直接影响着软件安装与更新的效率。本文将深入解析网络 YUM 源的分类,详细介绍如何使用知名平台提供的 YU…...
2025.5.23 【ZR NOI模拟赛 T3】高速公路 题解(容斥,高维前缀和,性质)
非常牛的题,记录一下思路。 传送门 题意 有一张 n n n 个点的无向图,每个点有一个颜色 c i c_i ci,满足 c i ∈ [ 1 , k ] c_i \in [1, k] ci∈[1,k]。 图是由 m m m 条链组成,满足任意一个点恰好只在一条链上。对于一…...

QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)
QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出) 目录 QGIS新手教程:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)📌 引言第一部分࿱…...
nova14 ultra,是如何防住80°C热水和10000KPa水压冲击的?
暴雨突袭,手忙脚乱护住背包,却担心手机被雨水浸湿;泳池里想记录美好时刻,却担心手机掉入水中 ;厨房里充满了高温水汽,近距离拍摄美食瞬间,手机屏幕花屏,让人失去了对美食的兴趣…… …...
Spring Boot项目中实现单点登录(SSO)完整指南
单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。 一、单点登录的核心原理 SSO的核心原理使集中认证、分散授权,主要流程如下: 1.用户访问应用A 2.应用A检查本地会话&a…...

Windows环境下Redis的安装使用与报错解决
最近在做项目的时候需要用到Redis,本来没觉得是什么麻烦,下载安装使用一步到位的事,但紧随而来的问题,让我开始怀疑人生,再加上代码跑不出来,我还专门找人给我看看怎么个是,结果就是单纯的Redis…...

鸿蒙完整项目-仿盒马App(一)首页静态页面
跟着鸿蒙小林博主,练习下项目~记录下首页的搭建,后续继续完善和整体项目完成会进行布局修改,先按照博主的跟做,后续在改 1.分为底部整体框架搭建 2.首页布局(顶部搜索、新人专享、金刚区(两个不同集合数据)…...
大模型(4)——Agent(基于大型语言模型的智能代理)
大模型Agent是一种基于大型语言模型(LLM)的智能系统,能够自主感知环境、规划任务、调用工具并完成复杂目标。其核心原理是将大模型的推理能力与外部行动能力结合,实现从“思考”到“行动”的闭环。以下是其原理详解与实现方法&…...

39-居住证管理系统(小程序)
技术栈: springBootVueMysqlUni-app 功能点: 群众端 警方端 管理员端 群众端: 1.首页: 轮播图展示、公告信息列表 2.公告栏: 公告查看及评论 3.我的: 联系我们: 可在线咨询管理员问题 实时回复 居住证登记申请 回执单查看 领证信息查看 4.个人中心: 个人信息查看及修改…...

WPF【11_4】WPF实战-重构与美化(MVVM 架构)
11-9 【理论】MVVM 架构 在 WPF 项目中,我们主要采用的是一种类似 MVC 的架构,叫做 MVVM。 MVVM 继承了 MVC 的理念,是 Model-View-ViewModel 的缩写,中文意思是模型、视图、视图模型。这三个词分开看我们都能看懂,不…...

计算逆时针夹角(有向角度)——CAD c# 实现两条线(向量)的逆时针夹角
效果如下: 附部分代码如下: public void 逆时针夹角Demo(){// 获取当前 CAD 文档和编辑器Document doc Application.DocumentManager.MdiActiveDocument;Editor ed doc.Editor;Database db doc.Database;try{Point3d vec1Start, vec1End;if (!GetTwoP…...
鸿蒙OSUniApp 开发带有通知提示的功能组件#三方框架 #Uniapp
使用 UniApp 开发带有通知提示的功能组件 在移动应用开发中,通知提示(Notification/Toast/Alert)是提升用户体验和交互效率的重要手段。无论是表单校验、操作反馈、系统消息还是营销推送,合理的通知提示都能帮助用户及时获取关键…...
前端EXCEL插件智表ZCELL数据源功能详解
一、数据源功能介绍 前端EXCEL插件智表ZCELL提供了强大的数据源管理功能,使开发者能够灵活地在电子表格中集成和管理结构化数据。数据源功能主要分为两种类型: 卡片式数据源:适合展示和编辑单个数据记录 表格式数据源:适合处理表…...
打卡第31天:模块和库的导入
重复内容 知识点回顾: 1.导入官方库的三种手段 2.导入自定义库/模块的方式 3.导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 导入机制的核…...
LLM Coding
AI Coding 深度解析:探索编程新范式与未来趋势 | w3cschool笔记https://www.phodal.com/blog/ai-friendly-architecture/bmadcode/BMAD-METHOD: Breakthrough Method for Agile Ai Driven Development...
Qt 的多线程
Qt 中的多线程主要用于处理耗时操作,避免阻塞主线程(UI 线程),从而提高程序的响应性和运行效率。以下是 Qt 多线程的相关技术总结: 常见的多线程实现方式 继承 QThread 类 :最基础的实现方式,具体步骤为继承 QThread 类,重写其 run() 函数,在 run() 函数中编写线程要…...