Milvus部署架构选择和Docker部署实战指南

news2025/5/31 15:14:42

导读:向量数据库作为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'
EOF

    cat << EOF > user.yaml
# Extra config to override default milvus.yaml
EOF
    if [ ! -f "./embedEtcd.yaml" ]
    then
        echo "embedEtcd.yaml file does not exist. Please try to create it in the current directory."
        exit 1
    fi

    if [ ! -f "./user.yaml" ]
    then
        echo "user.yaml file does not exist. Please try to create it in the current directory."
        exit 1
    fi

    sudo 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 true
    do
        res=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`
        if [ $res -eq 1 ]
        then
            echo "Start successfully."
            echo "To change the default Milvus configuration, add your settings to the user.yaml file and then restart the service."
            break
        fi
        sleep 1
    done
}

start() {
    res=`sudo docker ps|grep milvus-standalone|grep healthy|wc -l`
    if [ $res -eq 1 ]
    then
        echo "Milvus is running."
        exit 0
    fi

    res=`sudo docker ps -a|grep milvus-standalone|wc -l`
    if [ $res -eq 1 ]
    then
        sudo docker start milvus-standalone 1> /dev/null
    else
        run_embed
    fi

    if [ $? -ne 0 ]
    then
        echo "Start failed."
        exit 1
    fi

    wait_for_milvus_running
}

stop() {
    sudo docker stop milvus-standalone 1> /dev/null

    if [ $? -ne 0 ]
    then
        echo "Stop failed."
        exit 1
    fi
    echo "Stop successfully."

}

delete_container() {
    res=`sudo docker ps|grep milvus-standalone|wc -l`
    if [ $res -eq 1 ]
    then
        echo "Please stop Milvus service before delete."
        exit 1
    fi
    sudo docker rm milvus-standalone 1> /dev/null
    if [ $? -ne 0 ]
    then
        echo "Delete milvus container failed."
        exit 1
    fi
    echo "Delete milvus container successfully."
}

delete() {
    delete_container
    sudo rm -rf $(pwd)/volumes
    sudo rm -rf $(pwd)/embedEtcd.yaml
    sudo rm -rf $(pwd)/user.yaml
    echo "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. > " check
    if [ "$check" == "y" ] ||[ "$check" == "Y" ];then
        res=`sudo docker ps -a|grep milvus-standalone|wc -l`
        if [ $res -eq 1 ]
        then
            stop
            delete_container
        fi

        curl -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."
    else
        echo "Exit upgrade"
        exit 0
    fi
}

case $1 in
    restart)
        stop
        start
        ;;
    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解决方案。通过合理选择部署架构并遵循标准化的部署流程,可以快速搭建稳定可靠的向量数据库服务环境。在生产环境中,建议结合具体的业务需求和安全要求,对配置参数进行适当的优化调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2391640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效合并 Excel 表格实用工具

软件介绍 这里介绍一款用于 Excel 合并的软件。 使用反馈与工具引入 之前推荐过 Excel 合并工具&#xff0c;但有小伙伴反馈这些工具对于需要合并单元格的 Excel 文件不太适用&#xff0c;而且无法合并表头。鉴于这些问题&#xff0c;找到了今天要介绍的这款 Excel 合并工具…

拉取gitlab项目

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

树莓派(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&#xff08;You Only Look Once v4&#xff09;于2020年由Alexey Bochkovskiy等人提出&#xff0c;是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术&#xff0c;实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…

在雄性小鼠自发脑网络中定位记忆巩固的因果中枢

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

刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB

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

Selenium 测试框架 - Kotlin

🚀Selenium Kotlin 实践指南:以百度搜索为例的完整测试示例 随着测试自动化的普及,Selenium 已成为 Web 自动化测试的事实标准,而 Kotlin 凭借其简洁语法和高安全性,越来越受到开发者欢迎。本指南将通过一个完整的实战案例——在百度中执行搜索操作,来展示如何使用 Sele…

010501上传下载_反弹shell-渗透命令-基础入门-网络安全

文章目录 1 上传下载2 反弹shell命令1. 正向连接&#xff08;Forward Connection&#xff09;正向连接示例&#xff08;nc&#xff09; 2. 反向连接&#xff08;Reverse Connection&#xff09;反向连接示例&#xff08;反弹 Shell&#xff09; 对比表格实际应用中的选择防御建…

Flask集成Selenium实现网页截图

先看效果 程序实现的功能为&#xff1a;截取目标网址对应的页面&#xff0c;并将截取后的页面图片返回到用户端&#xff0c;用户可自由保存该截图。 支持的url参数如下&#xff1a; url&#xff1a;目标网址&#xff08;必填项&#xff09;&#xff0c;字符串类型&#xff0c…

知识图谱:AI时代语义认知的底层重构逻辑

在生成式人工智能&#xff08;GEO&#xff09;的技术架构中&#xff0c;知识图谱已从辅助性工具演变为驱动机器认知的核心神经中枢。它通过结构化语义网络的重构&#xff0c;正在突破传统数据处理的线性逻辑&#xff0c;建立机器对复杂业务场景的深度理解能力。 一、语义解构&a…

QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)

QGIS新手教程&#xff1a;线图层与多边形图层基础操作指南&#xff08;点线互转、中心点提取与WKT导出&#xff09; 目录 QGIS新手教程&#xff1a;线图层与多边形图层基础操作指南&#xff08;点线互转、中心点提取与WKT导出&#xff09;&#x1f4cc; 引言第一部分&#xff1…

Windows环境下Redis的安装使用与报错解决

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

鸿蒙完整项目-仿盒马App(一)首页静态页面

跟着鸿蒙小林博主&#xff0c;练习下项目~记录下首页的搭建,后续继续完善和整体项目完成会进行布局修改&#xff0c;先按照博主的跟做&#xff0c;后续在改 1.分为底部整体框架搭建 2.首页布局&#xff08;顶部搜索、新人专享、金刚区&#xff08;两个不同集合数据&#xff09…

39-居住证管理系统(小程序)

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

WPF【11_4】WPF实战-重构与美化(MVVM 架构)

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

计算逆时针夹角(有向角度)——CAD c# 实现两条线(向量)的逆时针夹角

效果如下&#xff1a; 附部分代码如下&#xff1a; public void 逆时针夹角Demo(){// 获取当前 CAD 文档和编辑器Document doc Application.DocumentManager.MdiActiveDocument;Editor ed doc.Editor;Database db doc.Database;try{Point3d vec1Start, vec1End;if (!GetTwoP…

【Linux】进程 信号的产生

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、掌握Linux信号的基本概念 &#x1f320;前台进程 VS 后台进程 &#x1f320; 小贴士&#xff1a; &#x1fa84;⼀个系统函数 --- signal() &#x1fa84;查看信号 --- man 7 sign…

机器学习中的维度、过拟合、降维

1. 维度灾难 当我们谈论机器学习模型在处理数据时遇到的困难&#xff0c;一个常常被提及的词便是“维度灾难”&#xff08;Curse of Dimensionality&#xff09;。这不是科幻小说里的情节&#xff0c;而是数学和计算世界里真实存在的困境。它指的正是&#xff1a;当数据集的特…

关于git的使用

下载git 可以去git的官网下载https://git-scm.com/downloads 也可以去找第三方的资源下载&#xff0c;下载后是一个exe应用程序&#xff0c;直接点开一直下一步就可以安装了 右键任意位置显示这两个就代表成功&#xff0c;第一个是git官方的图形化界面&#xff0c;第二个是用…

预约按摩小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的预约按摩小程序源码&#xff0c;ThinkPHP作为后端框架&#xff0c;以其高效稳定著称&#xff0c;能妥善处理数据逻辑与业务规则。FastAdmin作为后台管理框架&#xff0c;极大简化了后台管理系统的搭建与维护。UniApp则让小程序具备跨平台…