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

Milvus 从 v2.4.12 升级到 v2.5.11 的实施方案

目录

一、数据备份方案

1. 安装 Milvus Backup 工具

2. 备份所有集合数据

3. 验证备份是否成功

二、升级前准备

三、版本升级

1. 停止并移除旧服务

2. 拉取新版本镜像

3. 启动新版本服务

4. 验证升级


一、数据备份方案

1. 安装 Milvus Backup 工具

pip install milvus-backup

2. 备份所有集合数据

mkdir -p /root/milvus_backup
milvus_backup create -c all -o /root/milvus_backup/backup_$(date +%Y%m%d) --host 127.0.0.1 --port 19530

3. 验证备份是否成功

milvus_backup list -i /root/milvus_backup/backup_$(date +%Y%m%d)

二、升级前准备

提示: 此操作非必须执行,目的是为了数据备份,防止后续版本升级过程中发生数据丢失

查看当前集合信息(便于升级后验证)

pip3 install pymilvus && python3 -c "from pymilvus import connections, utility; connections.connect('default', host='127.0.0.1', port='19530'); print(utility.list_collections())"

看到输出结果

WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1747385665.884511  104933 http_proxy_mapper.cc:130] cannot parse value of 'http_proxy' env var. Error: INVALID_ARGUMENT: Could not parse 'scheme' from uri '192.168.1.87:7890'. Scheme must begin with an alpha character [A-Za-z].
['text_search_db5', 'image_search_db5', 'innovation_strategy_text_search', 'strategy_text_search']

2. 备份数据 ,查看Milvus容器的挂载卷信息

docker inspect milvus-standalone | grep -A 10 "Mounts"

看到如下输出

root@milvus-114:~# docker inspect milvus-standalone | grep -A 10 "Mounts"

        "Mounts": [

            {

                "Type": "bind",

                "Source": "/data/volumes/milvus",

                "Destination": "/var/lib/milvus",

                "Mode": "rw",

                "RW": true,

                "Propagation": "rprivate"

            }

        ],

        "Config": {

root@milvus-114:~#

 Milvus的所有数据存储在宿主机的 /data/volumes/milvus 目录,对应容器内的 /var/lib/milvus 目录。

停止Milvus服务(确保数据写入完成):

docker stop milvus-standalone

创建数据文件备份目录:

mkdir -p /root/milvus_full_backup_$(date +%Y%m%d_%H%M%S)

 复制所有Milvus数据文件到备份目录:

cp -r /data/volumes/milvus/* /root/milvus_full_backup_20250516_183710/ && echo "备份完成!"

检测备份文件大小和完整性:

du -sh /root/milvus_full_backup_20250516_183710/

三、版本升级

提供了一个自动化更新脚本

bash /root/milvus_full_backup_20250516_183710/upgrade.sh

 /root/milvus_full_backup_20250516_183710/upgrade.sh脚本内容

# Milvus 升级脚本: v2.4.12 到 v2.5.11
# 此脚本在执行前会先备份当前数据echo "=== Milvus 升级脚本 ==="
echo "此脚本将升级 Milvus 从 v2.4.12 到 v2.5.11"
echo "警告: 升级前请确保已备份所有重要数据!"
echo# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; thenecho "错误: Docker 服务未运行!"exit 1
fi# 确认继续
read -p "是否继续升级? (y/n): " confirm
if [ "$confirm" != "y" ]; thenecho "升级操作已取消"exit 0
fi# 检查备份文件
if [ ! -d "/root/milvus_full_backup_20250516_183710" ]; thenecho "错误: 备份目录不存在!"exit 1
fi# 检查etcd和minio服务是否正常运行
if ! docker ps | grep -q milvus-etcd; thenecho "错误: etcd 服务未在运行!"exit 1
fiif ! docker ps | grep -q milvus-minio; thenecho "错误: MinIO 服务未在运行!"exit 1
fi# 获取Docker网络信息
NETWORK_NAME="milvus"
if ! docker network inspect $NETWORK_NAME > /dev/null 2>&1; thenecho "错误: milvus 网络不存在!"exit 1
fiecho "使用 Docker 网络: $NETWORK_NAME"# 停止当前服务
echo "停止 Milvus 服务..."
docker stop milvus-standalone || true# 备份容器配置
echo "备份容器配置..."
docker inspect milvus-standalone > /root/milvus_full_backup_20250516_183710/milvus-container-config.json || true# 删除当前容器(保留数据)
echo "删除当前容器..."
docker rm milvus-standalone || true# 拉取新版本镜像
echo "拉取 Milvus v2.5.11 镜像..."
docker pull milvusdb/milvus:v2.5.11# 创建新容器 - 使用正确的启动命令和网络配置
echo "创建新版本容器..."
docker run -d --name milvus-standalone \--network $NETWORK_NAME \--network-alias milvus-standalone \-p 19530:19530 \-p 9091:9091 \-v /data/volumes/milvus:/var/lib/milvus \-e ETCD_ENDPOINTS=etcd:2379 \-e MINIO_ADDRESS=minio:9000 \milvusdb/milvus:v2.5.11 milvus run standalone# 等待容器启动
echo "等待 Milvus 服务启动..."
sleep 30# 检查状态
echo "检查容器状态..."
if docker ps | grep -q milvus-standalone; thenecho "Milvus v2.5.11 容器已启动"# 检查日志是否有错误if docker logs milvus-standalone | grep -i "panic\|error\|fail" | grep -v "level=info"; thenecho "警告: 发现错误日志,请检查容器日志!"elseecho "服务日志检查通过"fi
elseecho "错误: Milvus 容器未能正常启动!"echo "请使用 'docker logs milvus-standalone' 检查错误"exit 1
fiecho
echo "升级完成! Milvus 已从 v2.4.12 升级到 v2.5.11"
echo "请使用以下命令测试连接:"
echo "python3 -c \"from pymilvus import connections; connections.connect('default', host='127.0.0.1', port='19530'); print('连接成功')\""
echo
echo "如果升级出现问题,请使用 restore.sh 脚本恢复" 

简单执行方式:

1. 停止并移除旧服务

# 停止旧容器
docker stop milvus-standalone# 移除旧容器(保留数据卷)
docker rm milvus-standalone

2. 拉取新版本镜像

# 拉取新镜像
docker pull milvusdb/milvus:v2.5.11

3. 启动新版本服务

# 启动新容器
docker run -d --name milvus-standalone \--network milvus \--network-alias milvus-standalone \-p 19530:19530 \-p 9091:9091 \-v /data/volumes/milvus:/var/lib/milvus \-e ETCD_ENDPOINTS=etcd:2379 \-e MINIO_ADDRESS=minio:9000 \milvusdb/milvus:v2.5.11 milvus run standalone

4. 验证升级

# 检查容器状态
docker ps | grep milvus-standalone# 验证连接和版本
python3 -c "from pymilvus import connections, utility; \connections.connect('default', host='127.0.0.1', port='19530'); \print('连接成功,版本:', utility.get_server_version())"

http://www.xdnf.cn/news/7350.html

相关文章:

  • 基于Qt的app开发第九天
  • disryptor和rabbitmq
  • 【notes】VScode 使用总结
  • 数据仓库面试题合集②】ETL 设计与调度策略详解
  • MYSQL故障排查和环境优化
  • kotlin flow的写法
  • 【Pandas】pandas DataFrame pct_change
  • 24、钢铁厂峰谷电价策略优化分析 - /能源管理组件/steel-plant-tou-optimization
  • ngx_http_scgi_module 技术指南
  • Python60日基础学习打卡D30
  • 从技术层⾯来说深度SEO优化的⽅式有哪些?
  • CEF源码历史版本编译避坑指南
  • 基于 Keil 的 STM32 全模块开发
  • Windows系统编译Qt使用的kafka(librdkafka)
  • vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
  • 47、C#可否对内存进⾏直接的操作?
  • 【Unity网络编程知识】Unity的 UnityWebRequest相关类学习
  • 测试自动化开发框架全解析
  • winfrom中创建webapi
  • VTK|显示三维图像的二维切片
  • 【2025最新】Spring Boot + Spring AI 玩转智能应用开发
  • WPF中资源(Resource)与嵌入的资源(Embedded Resource)的区别及使用场景详解
  • UE5在C++项目中判断不同平台
  • 调研函模板可参考,以无人机职业技能调研为例
  • RSA(公钥加密算法)
  • 机器学习(14)——模型调参
  • Redis 学习笔记 5:分布式锁
  • 软件工程-项目管理
  • 嵌入式(C语言篇)Day12
  • ubuntu 20.04 运行和编译LOAM_Velodyne