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