打造AI应用基础设施:Milvus向量数据库部署与运维

news2025/4/16 14:42:50

目录

  • 打造AI应用基础设施:Milvus向量数据库部署与运维
    • 1. Milvus介绍
      • 1.1 什么是向量数据库?
      • 1.2 Milvus主要特点
    • 2. Milvus部署方案对比
      • 2.1 Milvus Lite
      • 2.2 Milvus Standalone
      • 2.3 Milvus Distributed
      • 2.4 部署方案对比表
    • 3. Milvus部署操作命令实战
      • 3.1 Milvus Lite部署
      • 3.2 Milvus Standalone Docker部署
      • 3.3 Milvus Distributed Kubernetes部署
        • 3.3.1 使用Helm安装Milvus Operator
        • 3.3.2 使用kubectl安装Milvus Operator
        • 3.3.3 部署Milvus集群
        • 3.3.4 检查Milvus集群状态
        • 3.3.5 端口转发以便本地访问
        • 3.3.6 卸载Milvus集群
    • 4. Milvus部署后的使用
      • 4.1 基本概念
        • 4.1.1 集合(Collection)
        • 4.1.2 模式(Schema)和字段(Fields)
        • 4.1.3 主键(Primary Key)和自动ID(AutoId)
      • 4.2 Python代码示例
      • 4.3 基本操作流程
      • 4.4 高级功能
    • 5. Milvus运维方案
      • 5.1 Prometheus监控
        • 5.1.1 部署Prometheus监控服务
        • 5.1.2 为Milvus启用ServiceMonitor
      • 5.2 可视化和管理工具
      • 5.3 备份和恢复
      • 5.4 集群扩容
      • 5.5 升级Milvus版本
    • 6. 总结
    • 参考资料

打造AI应用基础设施:Milvus向量数据库部署与运维

1. Milvus介绍

Milvus是一款高性能、可扩展的开源向量数据库,专为管理和检索向量数据而设计。它支持从Jupyter Notebook本地演示到处理数十亿向量的大规模Kubernetes集群的各种规模用例。

1.1 什么是向量数据库?

向量数据库是专门设计用于存储、管理和检索向量嵌入(embeddings)的数据库系统。在AI和机器学习领域,向量嵌入是将文本、图像、音频等转换为数值向量的过程,这些向量可以用于相似性搜索。Milvus可以高效地执行相似性搜索操作,是AI应用(如语义搜索、推荐系统、图像识别等)的理想选择。

1.2 Milvus主要特点

  • 高性能:支持数十亿规模的向量管理和高效的相似性搜索
  • 可扩展:提供从轻量级到分布式集群的多种部署方案
  • 多模态支持:支持多种数据类型,包括稠密向量、稀疏向量、二进制向量等
  • 高级搜索能力:支持ANN搜索、元数据过滤、范围搜索、混合搜索等
  • 灵活部署:提供多种部署模式,适应不同规模和场景的需求
  • 开源生态:拥有丰富的工具和集成选项,如WebUI、备份工具等

2. Milvus部署方案对比

目前,Milvus提供了三种主要的部署选项:Milvus Lite、Milvus Standalone和Milvus Distributed。

2.1 Milvus Lite

Milvus Lite是一个Python库,可以直接导入到应用程序中。作为Milvus的轻量级版本,它非常适合在Jupyter Notebook中快速原型设计或在资源有限的智能设备上运行。

特点:

  • 轻量级,仅需通过pip安装
  • 适用于小型数据集(建议不超过几百万向量)
  • 简单易用,适合快速原型设计和学习
  • 与其他Milvus部署模式共享相同的API

适用场景:

  • 快速原型开发(RAG演示、AI聊天机器人、多模态搜索等)
  • Jupyter Notebook或Google Colab环境
  • 边缘设备上的本地搜索
  • 处理私密或敏感数据

2.2 Milvus Standalone

Milvus Standalone是单机服务器部署。所有组件都打包到一个Docker镜像中,便于部署。

特点:

  • 单一Docker镜像,部署简便
  • 适合中等规模数据集(可扩展至1亿向量)
  • 通过主从复制支持高可用性
  • 比集群部署需要更少的DevOps工作

适用场景:

  • 早期生产环境
  • 产品市场适应性测试阶段
  • 灵活性比可扩展性更重要的场景
  • 中等规模的生产部署

2.3 Milvus Distributed

Milvus Distributed可以部署在Kubernetes集群上,具有云原生架构,摄取负载和搜索查询由独立节点单独处理,允许关键组件冗余。

特点:

  • 高可扩展性和高可用性
  • 灵活定制每个组件的资源分配
  • 适合大规模数据集(从1亿到数百亿向量)
  • 企业级生产环境的首选

适用场景:

  • 大规模生产部署
  • 数据规模超出单台服务器容量的业务
  • 需要定制化负载处理的环境(如高读取、低写入或高写入、低读取)

2.4 部署方案对比表

特性Milvus LiteMilvus StandaloneMilvus Distributed
部署方式Python库Docker容器Kubernetes集群
适用数据规模数百万向量高达1亿向量1亿至数百亿向量
SDK支持Python、gRPCPython、Go、Java、Node.js、C#、RESTfulPython、Java、Go、Node.js、C#、RESTful
资源要求最低中等
运维复杂度简单中等复杂
一致性级别强一致性强一致性、有界陈旧、会话一致性、最终一致性强一致性、有界陈旧、会话一致性、最终一致性
高级数据管理不支持访问控制、分区、分区键访问控制、分区、分区键、物理资源分组

Select deployment option for your use case

3. Milvus部署操作命令实战

3.1 Milvus Lite部署

Milvus Lite作为Python库,部署非常简单:

# 安装pymilvus(包含Milvus Lite)
pip install -U pymilvus

# 在Python代码中使用
from pymilvus import MilvusClient

# 使用本地文件初始化Milvus Lite实例
client = MilvusClient("./milvus_demo.db")

3.2 Milvus Standalone Docker部署

Milvus提供了一个安装脚本,可以轻松地将其作为Docker容器安装:

# 下载安装脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# 启动Docker容器
bash standalone_embed.sh start

安装后:

  • Milvus容器在端口19530上启动
  • 一个嵌入式etcd与Milvus一起安装在同一容器中,端口为2379
  • 可通过修改当前文件夹中的user.yaml文件来更改默认Milvus配置
  • Milvus数据卷映射到当前文件夹中的volumes/milvus目录

停止和删除Milvus:

# 停止Milvus
bash standalone_embed.sh stop

# 删除Milvus数据
bash standalone_embed.sh delete

升级Milvus版本:

# 升级Milvus
bash standalone_embed.sh upgrade

3.3 Milvus Distributed Kubernetes部署

使用Milvus Operator在Kubernetes上部署Milvus集群:

3.3.1 使用Helm安装Milvus Operator
helm install milvus-operator \
  -n milvus-operator --create-namespace \
  --wait --wait-for-jobs \
  https://github.com/zilliztech/milvus-operator/releases/download/v1.2.0/milvus-operator-1.2.0.tgz
3.3.2 使用kubectl安装Milvus Operator
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/deploy/manifests/deployment.yaml
3.3.3 部署Milvus集群
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_cluster_default.yaml
3.3.4 检查Milvus集群状态
kubectl get milvus my-release -o yaml
3.3.5 端口转发以便本地访问
# 转发Milvus服务端口
kubectl port-forward service/my-release-milvus 27017:19530

# 转发WebUI端口
kubectl port-forward service/my-release-milvus 27018:9091
3.3.6 卸载Milvus集群
kubectl delete milvus my-release

4. Milvus部署后的使用

4.1 基本概念

4.1.1 集合(Collection)

集合是Milvus中的基本数据组织单位,类似于关系数据库中的表。集合是具有固定列和可变行的二维表。每列代表一个字段,每行代表一个实体。

4.1.2 模式(Schema)和字段(Fields)

模式定义了集合中字段的属性(如数据类型、向量维度等)。每个字段都有各种约束属性,如数据类型和向量字段的维度。

4.1.3 主键(Primary Key)和自动ID(AutoId)

主键字段用于区分实体,每个值在全局范围内是唯一的。主键字段只接受整数或字符串。如果启用了AutoId,Milvus将在数据插入时自动生成这些值。

4.2 Python代码示例

以下是使用Milvus进行文本搜索的简单演示:

from pymilvus import MilvusClient
import numpy as np

# 连接到Milvus
client = MilvusClient("./milvus_demo.db")  # Milvus Lite本地文件
# 或者连接到Milvus服务器
# client = MilvusClient(uri="http://localhost:19530", token="username:password")

# 创建集合
client.create_collection(
    collection_name="demo_collection",
    dimension=384  # 本例中向量维度为384
)

# 示例文本
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

# 生成示例向量(实际应用中应使用真实的嵌入模型)
vectors = [[ np.random.uniform(-1, 1) for _ in range(384) ] for _ in range(len(docs)) ]
data = [ {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors)) ]

# 插入数据
res = client.insert(
    collection_name="demo_collection",
    data=data
)

# 执行带过滤条件的搜索
res = client.search(
    collection_name="demo_collection",
    data=[vectors[0]],
    filter="subject == 'history'",
    limit=2,
    output_fields=["text", "subject"],
)
print(res)

# 查询匹配过滤表达式的所有实体
res = client.query(
    collection_name="demo_collection",
    filter="subject == 'history'",
    output_fields=["text", "subject"],
)
print(res)

# 删除数据
res = client.delete(
    collection_name="demo_collection",
    filter="subject == 'history'",
)
print(res)

4.3 基本操作流程

  1. 创建集合:定义向量和标量字段的集合模式
  2. 插入数据:将向量和元数据插入集合
  3. 创建索引:为向量字段创建索引以加速搜索
  4. 加载集合:将集合加载到内存中以准备搜索
  5. 执行搜索/查询:执行相似度搜索或基于标量条件的查询
  6. 释放集合:不使用时释放内存资源

4.4 高级功能

  • 分区(Partition):集合的子集,共享相同的字段集,每个分区包含实体的子集
  • 分片(Shard):集合的水平切片,每个分片对应一个数据输入通道
  • 别名(Alias):为集合创建别名,便于管理
  • 一致性级别:定义跨数据节点和副本的数据一致性级别

5. Milvus运维方案

5.1 Prometheus监控

Milvus支持使用Prometheus进行监控,提供了各组件的指标,可通过http://<component-host>:9091/metrics端点导出。

5.1.1 部署Prometheus监控服务

使用kube-prometheus部署监控服务:

# 克隆kube-prometheus仓库
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus

# 创建监控栈
kubectl apply --server-side -f manifests/setup
kubectl wait \
        --for condition=Established \
        --all CustomResourceDefinition \
        --namespace=monitoring
kubectl apply -f manifests/

# 修补prometheus-k8s clusterrole以获取Milvus指标
kubectl patch clusterrole prometheus-k8s --type=json -p='[{"op": "add", "path": "/rules/-", "value": {"apiGroups": [""], "resources": ["pods", "services", "endpoints"], "verbs": ["get", "watch", "list"]}}]'

# 端口转发Prometheus和Grafana服务
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/prometheus-k8s 9090
kubectl --namespace monitoring --address 0.0.0.0 port-forward svc/grafana 3000
5.1.2 为Milvus启用ServiceMonitor

通过Helm参数启用ServiceMonitor:

helm upgrade my-release milvus/milvus --set metrics.serviceMonitor.enabled=true --reuse-values

检查ServiceMonitor资源:

kubectl get servicemonitor

5.2 可视化和管理工具

Milvus提供了多种工具来帮助可视化和管理:

  1. Milvus WebUI:通过浏览器访问的内置GUI工具,提供系统可观察性和简单的界面。可通过http://127.0.0.1:9091/webui/访问。

  2. Milvus Backup:开源工具,用于Milvus数据备份。

  3. Birdwatcher:开源工具,用于调试Milvus和动态配置更新。

  4. Attu:开源GUI工具,用于直观的Milvus管理。

5.3 备份和恢复

Milvus Lite提供了命令行工具,可以将数据导出到JSON文件中:

# 安装带bulk_writer的pymilvus
pip install -U "pymilvus[bulk_writer]"

# 导出数据
milvus-lite dump -d ./milvus_demo.db -c demo_collection -p ./data_dir

使用导出的文件,可以通过以下方式上传数据:

  • 通过数据导入功能上传到Zilliz Cloud
  • 通过批量插入功能上传到Milvus服务器

5.4 集群扩容

对于Milvus Distributed,可以通过修改Kubernetes配置来扩展集群:

  1. 调整资源请求和限制
  2. 增加副本数量
  3. 添加更多节点到Kubernetes集群

5.5 升级Milvus版本

  • Milvus Standalone:使用bash standalone_embed.sh upgrade命令
  • Milvus Distributed:使用Helm或Milvus Operator进行升级

6. 总结

Milvus是一款功能强大的向量数据库,提供了从轻量级到分布式集群的多种部署选项,适应不同规模和场景的需求。通过本博客,我们介绍了Milvus的基本概念、部署方案对比、部署操作实战、使用方法和运维方案。

无论您是在进行快速原型设计、构建小型生产应用还是需要大规模向量搜索系统,Milvus都能提供灵活而强大的解决方案。根据您的项目阶段和规模选择合适的Milvus部署模式,可以获得最佳的性能和资源利用效率。

参考资料

  • Milvus官方文档
  • Milvus安装概述
  • Milvus Lite文档
  • Milvus集合管理
  • Milvus监控指南

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

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

相关文章

【深度学习与大模型基础】第11章-Bernoulli分布,Multinoulli分布

一、Bernoulli分布 1. 基本概念 想象你抛一枚硬币&#xff1a; 正面朝上&#xff08;记为 1&#xff09;概率是 p&#xff08;比如 0.6&#xff09;。 反面朝上&#xff08;记为 0&#xff09;概率是 1-p&#xff08;比如 0.4&#xff09;。 这就是一个Bernoulli分布&…

基于Windows通过nginx代理访问Oracle数据库

基于Windows通过nginx代理访问Oracle数据库 环境说明&#xff1a; 生产环境是一套一主一备的ADG架构服务器&#xff0c;用户需要访问生产数据&#xff0c;基于安全考虑&#xff0c;生产IP地址不能直接对外服务&#xff0c;所以需要在DMZ部署一个前置机&#xff0c;并在该前置机…

北斗和GPS信号频率重叠-兼容与互操作

越来越多的同学们发现北斗三代信号的B1C&#xff0c;B2a信号居然和美国GPS L1,L5处在同样频率上&#xff1f; 为什么美国会允许这样的事情发生&#xff1f;同频率难道不干扰彼此的信号吗&#xff1f; 思博伦卫星导航技术支持文章TED 这事得从2006年联合国成立全球卫星导航系统…

python爬虫:喜马拉雅案例(破解sign值)

声明&#xff1a; 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 根据上一篇文章&#xff0c;我们破解了本网站的&#xff0c;手机号和密码验证&#x…

51单片机波特率与溢出率的关系

1. 波特率与溢出率的基本关系 波特率(Baud Rate)表示串口通信中每秒传输的位数(bps),而溢出率是定时器每秒溢出的次数。在51单片机中,波特率通常通过定时器的溢出率来生成。 公式关系: 波特率=溢出率/​分频系数 其中,分频系数与定时器的工作模…

摄影测量——单像空间后方交会

空间后方交会的求解是一个非线性问题&#xff0c;通常采用最小二乘法进行迭代解算。下面我将详细介绍具体的求解步骤&#xff1a; 1. 基本公式&#xff08;共线条件方程&#xff09; 共线条件方程是后方交会的基础&#xff1a; 复制 x - x₀ -f * [m₁₁(X-Xₛ) m₁₂(Y-…

基于RV1126开发板的人脸姿态估计算法开发

1. 人脸姿态估计简介 人脸姿态估计是通过对一张人脸图像进行分析&#xff0c;获得脸部朝向的角度信息。姿态估计是多姿态问题中较为关键的步骤。一般可以用旋转矩阵、旋转向量、四元数或欧拉角表示。人脸的姿态变化通常包括上下俯仰(pitch)、左右旋转(yaw)以及平面内角度旋转(r…

鲲鹏+昇腾部署集群管理软件GPUStack,两台服务器搭建双节点集群【实战详细踩坑篇】

前期说明 配置&#xff1a;2台鲲鹏32C2 2Atlas300I duo&#xff0c;之前看网上文档&#xff0c;目前GPUstack只支持910B芯片&#xff0c;想尝试一下能不能310P也部署试试&#xff0c;毕竟华为的集群软件要收费。 系统&#xff1a;openEuler22.03-LTS 驱动&#xff1a;24.1.rc…

机器学习中 提到的张量是什么?

在机器学习中, 张量(Tensor) 是一个核心数学概念,用于表示和操作多维数据。以下是关于张量的详细解析: 一、数学定义与本质 张量在数学和物理学中的定义具有多重视角: 多维数组视角 传统数学和物理学中,张量被定义为多维数组,其分量在坐标变换时遵循协变或逆变规则。例…

edge 更新到135后,Clash 打开后,正常网页也会自动跳转

发现了一个有意思的问题&#xff1a;edge 更新135后&#xff0c;以前正常使用的clash出现了打开deepseek也会自动跳转&#xff1a; Search Resultshttps://zurefy.com/zu1.php#gsc.tab0&gsc.qdeepseek &#xff0c;也就是不需要梯子的网站打不开了&#xff0c;需要的一直正…

prime 1 靶场笔记(渗透测试)

环境说明&#xff1a; 靶机prime1和kali都使用的是NAT模式&#xff0c;网段在192.168.144.0/24。 Download (Mirror): https://download.vulnhub.com/prime/Prime_Series_Level-1.rar 一.信息收集 1.主机探测&#xff1a; 使用nmap进行全面扫描扫描&#xff0c;找到目标地址及…

第16届蓝桥杯单片机模拟试题Ⅲ

试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…

打造现代数据基础架构:MinIO对象存储完全指南

目录 打造现代数据基础架构&#xff1a;MinIO对象存储完全指南1. MinIO介绍1.1 什么是对象存储&#xff1f;1.2 MinIO核心特点1.3 MinIO使用场景 2. MinIO部署方案对比2.1 单节点单驱动器(SNSD/Standalone)2.2 单节点多驱动器(SNMD/Standalone Multi-Drive)2.3 多节点多驱动器(…

OOM问题排查和解决

问题 java.lang.OutOfMemoryError: Java heap space 排查 排查手段 jmap命令 jmap -dump,formatb,file<file-path> <pid> 比如 jmap -dump:formatb,file./heap.hprof 44532 使用JVisualVM工具&#xff1a; JVisualVM是一个图形界面工具&#xff0c;它可以帮…

「出海匠」借助CloudPilot AI实现AWS降本60%,支撑AI电商高速增长

&#x1f50e;公司简介 「出海匠」&#xff08;chuhaijiang.com&#xff09;是「数绘星云」公司打造的社交内容电商服务平台&#xff0c;专注于为跨境生态参与者提供数据支持与智能化工作流。平台基于大数据与 AI 技术&#xff0c;帮助商家精准分析市场趋势、优化运营策略&…

【Python爬虫】简单案例介绍3

本文继续接着我的上一篇博客【Python爬虫】简单案例介绍2-CSDN博客 目录 3.3 代码开发 3.3 代码开发 编写代码的步骤&#xff1a; request请求科普中国网站地址url&#xff0c;解析得到类名为"list-block"的div标签。 for循环遍历这个div列表里的每个div&#xff0…

swift菜鸟教程6-10(运算符,条件,循环,字符串,字符)

一个朴实无华的目录 今日学习内容&#xff1a;1.Swift 运算符算术运算符比较运算符逻辑运算符位运算符赋值运算区间运算符其他运算符 2.Swift 条件语句3.Swift 循环4.Swift 字符串字符串属性 isEmpty字符串常量let 变量var字符串中插入值字符串连接字符串长度 String.count使用…

如何通过技术手段降低开发成本

通过技术手段降低开发成本的关键在于&#xff1a; 自动化工具的使用、优化开发流程、云计算资源的利用、开发技术栈的精简与创新、团队协作平台的高效管理。 其中&#xff0c;自动化工具的使用是最为有效的技术手段之一。自动化工具通过减少人工干预和重复性工作&#xff0c;大…

Ubuntu上docker、docker-compose的安装

今天来实践下Ubuntu上面安装docker跟docker-compose&#xff0c;为后面安装dify、fastgpt做准备。 一、安装docker sudo apt-get updatesudo apt-get install docker.io 然后系统输入 docker --version 出现下图即为docker安装成功。 二、安装docker-compose 我先看下系统…

OpenCV图像处理进阶教程:几何变换与频域分析全解析

OpenCV图像处理进阶教程&#xff1a;几何变换与频域分析全解析 &#x1f4da; 本文提供了OpenCV图像处理的核心操作详解&#xff0c;从基础的几何变换到高级的频域分析&#xff0c;代码示例清晰易懂&#xff0c;实用性强。完整代码已开源至GitHub&#xff1a;https://github.co…