当前位置: 首页 > news >正文

Ubuntu 22.04下Milvus集群部署实战:从Docker提取二进制文件的完整指南

Ubuntu 22.04下Milvus集群部署实战:从Docker提取二进制文件的完整指南

在向量数据库领域,Milvus凭借其出色的性能和可扩展性已成为众多AI应用的首选存储引擎。虽然官方推荐使用Docker或Kubernetes进行部署,但在某些生产环境中,直接使用二进制文件部署能带来更精细的资源控制和更高的性能调优空间。本文将带你深入探索如何从Docker容器中提取Milvus二进制文件,并在Ubuntu 22.04系统上构建一个稳定可靠的集群环境。

1. 环境准备与依赖管理

1.1 系统基础配置

在开始之前,确保你的Ubuntu 22.04系统满足以下最低要求:

  • 硬件配置

    • CPU:至少4核(推荐8核以上)
    • 内存:16GB(大规模部署建议32GB+)
    • 存储:SSD硬盘,至少50GB可用空间
  • 系统优化

    # 更新系统并安装基础工具 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential git curl wget

1.2 依赖项安装

Milvus运行需要特定的系统库支持,以下是必须安装的依赖项:

sudo apt install -y --no-install-recommends \ curl ca-certificates \ libaio-dev libgomp1 \ libopenblas-dev

注意--no-install-recommends参数可以避免安装不必要的推荐包,保持系统简洁。

2. 从Docker容器提取二进制文件

2.1 获取官方Docker镜像

首先拉取官方Milvus镜像(以v2.4.10为例):

docker pull milvusdb/milvus:v2.4.10

2.2 启动临时容器

运行一个临时容器用于文件提取:

docker run -d --name milvus_temp milvusdb/milvus:v2.4.10

2.3 提取关键文件

从容器中复制整个/milvus目录到宿主机:

docker cp milvus_temp:/milvus ./milvus_bin

提取完成后,可以停止并删除临时容器:

docker stop milvus_temp && docker rm milvus_temp

2.4 文件结构整理

建议将提取的文件移动到标准位置:

sudo mv milvus_bin /opt/milvus sudo chown -R $USER:$USER /opt/milvus

3. 环境变量与系统配置

3.1 关键环境变量设置

编辑~/.bashrc文件,添加以下内容:

export MILVUS_HOME=/opt/milvus export PATH=$MILVUS_HOME/bin:$PATH export LD_LIBRARY_PATH=$MILVUS_HOME/lib:$LD_LIBRARY_PATH:/usr/lib export LD_PRELOAD=$MILVUS_HOME/lib/libjemalloc.so export MALLOC_CONF=background_thread:true

使配置立即生效:

source ~/.bashrc

3.2 系统限制调整

为支持高并发,需要修改系统限制:

# 编辑limits.conf sudo tee -a /etc/security/limits.conf <<EOF * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535 EOF

4. 集群组件部署与集成

4.1 分布式依赖服务部署

虽然我们采用二进制方式部署Milvus,但依赖服务仍建议使用容器化方案:

服务推荐镜像端口范围
etcdquay.io/coreos/etcd2379-2380
Pulsarapachepulsar/pulsar6650, 8080
MinIOminio/minio9000, 9001

启动基础服务容器:

docker run -d --name etcd \ -p 2379:2379 -p 2380:2380 \ quay.io/coreos/etcd:latest \ etcd --advertise-client-urls=http://0.0.0.0:2379 \ --listen-client-urls=http://0.0.0.0:2379 docker run -d --name pulsar \ -p 6650:6650 -p 8080:8080 \ apachepulsar/pulsar:latest \ bin/pulsar standalone docker run -d --name minio \ -p 9000:9000 -p 9001:9001 \ minio/minio:latest \ server /data --console-address ":9001"

4.2 Milvus配置文件调整

修改/opt/milvus/configs/milvus.yaml关键参数:

etcd: endpoints: - 127.0.0.1:2379 pulsar: address: 127.0.0.1 port: 6650 minio: address: 127.0.0.1 port: 9000 accessKeyID: minioadmin secretAccessKey: minioadmin

5. 集群启动与验证

5.1 启动Milvus组件

Milvus由多个组件构成,需要分别启动:

# 启动协调节点 nohup /opt/milvus/bin/milvus run coordinator > coordinator.log 2>&1 & # 启动查询节点 nohup /opt/milvus/bin/milvus run querynode > querynode.log 2>&1 & # 启动数据节点 nohup /opt/milvus/bin/milvus run datanode > datanode.log 2>&1 &

5.2 服务健康检查

验证各组件状态:

curl -X GET "http://localhost:9091/api/v1/health"

预期输出应包含所有组件的健康状态:

{ "status": "SERVING", "components": { "querycoord": "HEALTHY", "datanode": "HEALTHY", "indexnode": "HEALTHY" } }

5.3 性能基准测试

使用Milvus自带的基准测试工具:

/opt/milvus/bin/milvus benchmark \ --collection=test_collection \ --dim=128 \ --nb=100000 \ --nq=1000 \ --topk=10

6. 生产环境优化建议

6.1 资源分配策略

根据节点角色调整JVM参数:

节点类型JVM参数推荐
协调节点-Xms4g -Xmx4g -XX:MaxDirectMemorySize=2g
查询节点-Xms8g -Xmx8g -XX:MaxDirectMemorySize=4g
数据节点-Xms8g -Xmx8g -XX:MaxDirectMemorySize=6g

6.2 监控方案部署

推荐使用Prometheus+Grafana监控方案:

  1. 安装Prometheus:

    docker run -d --name prometheus \ -p 9090:9090 \ -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus
  2. 配置Milvus指标采集:

    # prometheus.yml 片段 scrape_configs: - job_name: 'milvus' static_configs: - targets: ['milvus-node1:9091', 'milvus-node2:9091']

6.3 高可用配置

实现多节点集群的关键配置:

# 在每台节点的milvus.yaml中 cluster: enable: true role: [coordinator, querynode, datanode] address: - "node1:19530" - "node2:19530" - "node3:19530"

7. 常见问题排查

7.1 启动失败诊断

检查日志文件的优先级顺序:

  1. /opt/milvus/logs/milvus-*.log
  2. 系统日志:journalctl -u milvus -n 100
  3. 组件特定日志:如querynode.log

7.2 性能问题分析

常见瓶颈及解决方案:

  • CPU瓶颈:优化查询计划,增加查询节点
  • 内存不足:调整cache_size参数,增加物理内存
  • IO延迟:使用高性能SSD,优化MinIO配置

7.3 版本升级策略

二进制升级的推荐流程:

  1. 备份配置和数据
  2. 停止所有Milvus服务
  3. 提取新版本二进制文件
  4. 合并配置文件变更
  5. 滚动重启各节点
http://www.jsqmd.com/news/594026/

相关文章:

  • 基于Simulink的四自由度磁悬浮轴承控制仿真:电流环、位置环、位移解析及磁轴承模型PID控...
  • DSI3协议四大模式(CRM/PDCM/BDM/DM)全解析:从汽车胎压监测到电池管理,看它如何工作
  • 1Panel面板深度体验:比宝塔更轻量的Docker管理方案?CasaOS环境实测对比
  • 为什么要 TCP,IP 层实现控制不行么:从分层哲学到不可逾越的物理限制
  • 2026-4-5
  • Python办公自动化:3种Word转PDF方法实测(附代码对比)
  • 前端必懂:开发环境、构建打包的核心差异,新手再也不踩坑
  • 深度学习检测不准确智能电表案例研究代码功能说明
  • “16QAM调制与解调系统的SystemView仿真及分析”
  • HJ164 太阳系DISCO
  • 手把手教你开发电竞护航系统:从零到上线的小程序全流程
  • 【Matlab 六自由度机器人】从理论到实践:笛卡尔与关节空间规划在复杂避障场景下的MATLAB实现与对比
  • 5个技巧让你高效畅玩Switch游戏:开源Ryujinx模拟器全攻略
  • 永磁同步电机(PMSM)速度电流双闭环FOC矢量控制策略详解
  • 解决GLIBC版本冲突:手动编译libcrypto.so.1.0.0的完整指南
  • 保姆级教程:在CentOS 7.9上从源码编译安装nvtop 3.1.0(含CMake 3.29.7依赖安装)
  • 前端CSS精讲05:Grid网格布局——现代页面最强二维布局方案
  • 你的电脑配置,可能决定了Vivado升级时IP会不会“偷懒”:一次关于IP缓存与硬件资源的观察
  • Ubuntu 20.04忘记密码?5分钟搞定root和用户密码重置(附GRUB菜单截图)
  • Avalonia实战:5分钟搞定无边框窗口自定义(附拖拽功能完整代码)
  • 学生评教|高校评教|基于SpringBoot+vue高校学生评教系统 (源码+数据库+文档)
  • 离谱又惊艳!C++隐藏宝藏库numeric_range深度探索,竟藏着JS彩蛋和隐零点
  • 常见的 HTTP 状态码有哪些:从 1xx 到 5xx 全解及排错流程图
  • 五次多项式换道轨迹规划+MPC轨迹跟踪控制simulink模型(有说明文档) 版本
  • 开发实战:asp.net core + ef core 实现动态可扩展的分页方案
  • 电力电子新手必看:SPWM单极性倍频调制在Simulink中的实现与优化
  • 告别数据孤岛:手把手教你用ArcMap的Join功能,把Excel数据精准‘贴’到地图上
  • 用AirSim和Habitat手把手教你搭建第一个无人机VLN仿真环境(避坑指南)
  • 知新研学 |AlignMamba:AlignMamba:通过局部和全局跨模态对齐增强多模态 Mamba 技术
  • HTTP 请求包含哪些内容:请求行、请求头、请求体三大结构及类型详解