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

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())"

相关文章:

  • FART 自动化脱壳框架简介与脱壳点的选择
  • 【Linux】守护进程
  • 人工智能100问☞第27问:神经网络与贝叶斯网络的关系?
  • 【Spring Boot后端组件】SpringMVC介绍及使用
  • 数据库管理工具(Navicate,DBeaver,HeidiSQL等)
  • 解决 MySQL 错误 1356 (HY000)
  • uniapp-商城-62-后台 商品列表(分类展示商品的布局)
  • uniapp自用辅助类小记
  • 我的食物信使女友
  • 如何git clone下来自定义文件名
  • 部署java项目
  • kafka 问与答
  • 应对WEEE 2025:猎板PCB的区块链追溯与高温基材创新
  • 基于小波包神经网络和D-S理论的滚动轴承故障诊断方法
  • sqli-labs第九关—‘时间盲注
  • 文件夹如何打包成jar包
  • Go语言数组的定义与操作 - 《Go语言实战指南》
  • 47、C#可否对内存进⾏直接的操作?
  • 企业网站架构部署与优化 --web技术与nginx网站环境部署
  • AIGC与数字金融:人工智能金融创新的新纪元
  • 一日双赛“莎头组合”赢得强势,但国乒已开始品尝输球滋味
  • 中国戏剧梅花奖终评结果公示,蓝天和朱洁静等15名演员入选
  • 以色列媒体:以总理称将接管整个加沙
  • 调查:“网约摩的”上线起步价五六元,合规性及安全性引质疑
  • 1块钱解锁2万部微短剧还能日更,侵权盗版难题怎么破?
  • 西域都护府博物馆今日在新疆轮台县开馆