Milvus跨集群数据迁移

news2024/11/27 5:33:53

318f2ffc762c76730724131de0d774be.png

将 Milvus 数据从 A 集群(K8S集群)迁到 B 集群(K8S集群),解决方案很多,这里提供一个使用官方 milvus-backup 工具进行数据迁移的方案。

注意:此方案为非实时同步方案,但借助 MinIO 客户端的数据同步功能,应该也是可以做到实时同步迁移。

9ca1361fc42757c5d3680bc305a8c17e.jpeg

步骤概览

  • 制作 milvus-backup 镜像,方便备份工具在 K8S 集群中使用 service name 访问 milvus 和 minio

  • 创建 milvus-backup 工作负载

  • 进入 milvus-backup 容器,修改 configs/backup.yaml 配置

  • 备份集群数据到本地存储中

  • 将数据拷贝到新集群中进行恢复

01. 

制作 milvus-backup 镜像

注意:如果是在两个单机版的 milvus 之间迁移数据,是不需要 milvus-backup 镜像的,又或者,如果 k8s 集群部署了 milvus, minio 的 nodeport 服务,也是可以不用镜像的。可以到官方 release 中下载一个二进制应用程序即可。

由于当前官方暂未提供 milvus-backup 的镜像,但官方提供了 Dockerfile,因此可以 git clone 一下官方代码仓库后使用 docker build 制作镜像。

#制作 milvus-backup 镜像
git clone git@github.com:zilliztech/milvus-backup.git

cd milvus-backup
docker build -t milvus/milvus-backup:main .

c30401012baf71230c8dbd3c0ce14e3c.jpeg

在 build 之前可以修改一下 Dockerfile,加快 build 速度,请参考:

#Build 加速,并添加 minio 客户端工具
FROM golang:1.18 AS builder

ENV CGO_ENABLED=0
ENV GOPROXY https://goproxy.cn,direct
WORKDIR /app
COPY . .
RUN go mod tidy
RUN go build -ldflags="-s -w" -o /app/milvus-backup
RUN wget -P /app https://dl.minio.org.cn/client/mc/release/linux-amd64/mc
RUN chmod +x /app/mc

FROM alpine:3.17
WORKDIR /app
COPY --from=builder /app/milvus-backup .
COPY --from=builder /app/configs ./configs
COPY --from=builder /app/mc .
EXPOSE 8080
ENTRYPOINT ["/app/milvus-backup", "server"]

镜像制作好之后推送到 Docker Registry 以方便后续在 K8S 上创建工作负载。

9c19ee534626aea292a77e1c85eec823.jpeg

02. 

在 K8S 集群中创建 milvus-backup 工作负载(Deployment)

可以使用 kubectl 创建工作负载,也可以使用 K8S 管理后台(Kuboard / Kubesphere)创建,使用云端 K8S 的也一样,这里不展开。

注意一下,由于需要在两个集群间迁移,因此创建工作负载的时候挂载一个共享存储(/backup),方便迁移 MinIO 备份后的数据。

91488132a3517774f1e84babf9df7c78.jpeg

03. 

修改 configs/backup.yaml 文件

使用 kubectl 或者 K8S 管理后台进入 milvus-backup 容器,这里有一点要注意,milvus-backup 容器里没有 bash,只有 sh,所以请使用正确的 shell(/bin/sh)。

在容器的工作目录(/app)中有 milvus-backup 和 mc 2个二进制包和 configs 文件夹,mc 即 MinIO 客户端程序,configs 目录下 backup.yaml 即 milvus-backup 的默认配置文件。接下修改 backup.yaml 以适配当前集群的 milvus 和 minio,需要修改的项目有:

#backup.yaml
milvus:
  address: localhost
...
minio:
  address: localhost # Address of MinIO/S3
  ...
  bucketName: "a-bucket" # Milvus Bucket name in MinIO/S3, make it the same as your milvus instance
  rootPath: "files" # Milvus storage root path in MinIO/S3, make it the same as your milvus instance
  ...
backup:
  ...
  gcPause:
    ...
    address: http://localhost:9091

接下来,详细说明一下需要修改的配置:

milvus.address:对应 K8S 中 milvus 服务,milvus 默认会创建一个 xxx-milvus 类型为 ClusterIP 的服务,这里可使用服务名填写,比如:milvus-cluster-1-milvus,“milvus-cluster-1”是部署 milvus 时的 release name,有映像的话,官方叫:my-release;

minio.address:对应用 K8S 中 minio 服务,同上;

minio.buketName:  参考集群容器中/milvus/configs/milvus.yaml文件中的 minio 节点,默认也是:my-release;

minio.rootPath:同上,使用 milvus operator 集群部署时,默认为:files;

backup.gcPause.address:同 milvus.address;

还有 2 个配置需要注意:

minio.backupBucketName

minio.backupRootPath

这 2 个是备份文件存放的目录,后续我们需要使用 MinIO 客户端将文件拷贝到本地存储中。

修改好之后使用 ./milvus-backup check 检查一下。

7d603fe5b77efc65f237fd6a228c3353.jpeg

04. 

备份当前集群数据到本地存储中

使用 milvus-backup 工具备份数据,这里可以直接参考 ./milvus-backup -h,milvus 系列的文档还是非常棒的。

3942bdd26f5323fd1f57706175b71dfa.jpeg

如果数据量不大,备份速度很快,原理官方文档也讲了,这里不再介绍。备份好的之后,就可以使用 MinIO 客户端来查看数据了。

配置 MinIO 客户端

#添加 host
./mc config host add minio_1 http://my-release-minio:9000 minioadmin minioadmin

bb39ab29a9e191b710e65efb69932b59.jpeg

查看备份好的目录

#查看备份目录
./mc ls minio_1/a-bucket/backup

这里会列出上面使用 milvus-backup create 创建的备份

将备份好的文件拷贝到本地存储中

./mc cp -r minio_1/a-bucket/backup/mydb-20240510 /backup

这里的 /backup 目录是挂载的共享存储。

aef4c2545b1573638b0604f3647137e0.jpeg

05. 

恢复数据到新的集群中

进入新的集群(B)执行步骤 2和步骤 3,在步骤 3 中将 backup.yaml 中的配置修改成集群 B 的链接信息。可以把 backup-cluster-a.yaml, backup-cluster-b.yaml 放到共享存储 /backup 中,防止 pod 重启配置丢失。然后将共享目录中备份好的文件拷贝到新集群的 MinIO 中,使用 milvus-backup 恢复即可!

d0b9579b1b269322df344a4e0ba729d8.jpeg

注意,记得恢复的时候带上--restore_index参数,这样恢复的时候会带索引一起恢复出来。恢复好之后使用 Attu 加载一下 collection,就可以正常使用了。

d7f594784a9de3bf582a03d2afec352e.jpeg

推荐阅读

c7cde79095490178ab7e43cb44667d5f.png

ef8ceeb030bb32e947c074ca81ac1df0.png

d83cecfc82770b8ba35fa15b109a55ad.png

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

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

相关文章

嵌入式技术学习——c51——串口

一、串口介绍。 串口是一个 通讯接口。成本低,容易使用,通信线路简单,可实现两个设备的相互通信 单片机的串口可以实现单片机于单片机,单片机与电脑,单片机与其他模块相互通信。 51单片机内部自带UART,通…

AI训练Checkpoint对存储的影响

检查点(Checkpoints)是机器学习和深度学习训练过程中的一个重要机制,旨在定期保存训练状态,以便在训练过程中遇到失败或中断时能够从中断处恢复训练,而无需从头开始。 随着模型参数量的剧增,Checkpoint文件…

智慧档案库房建设费用大概多少

智慧档案库房建设费用因地区、规模和具体需求而异,以下是一些常见费用项: 1. 建筑物建设费用:包括设计、施工、装修、材料等费用。 2. 设备费用:包括服务器、网络设备、存储设备、十防等硬件设备的费用。 3. 软件费用:…

Aeron:两个代理之间的单向IPC(One-way IPC between two agents)

一、概述 本例展示了如何通过 IPC 在调度于不同线程的两个代理之间传输缓冲区。在继续学习本示例之前,最好先复习一下Simplest Full Example ,因为该示例展示的是 IPC 通信,没有增加代理的复杂性。读者还应熟悉Media Driver 流程构建如下&…

Maya 2024 mac/win版:创意无界,设计新生

Maya 2024是一款由Autodesk推出的业界领先的三维计算机图形软件,广泛应用于电影、游戏、广告等创意产业。这款软件以其强大的功能和卓越的性能,为艺术家们提供了一个实现创意梦想的平台。 Maya 2024 mac/win版获取 在建模方面,Maya 2024提供…

Linux_理解程序地址空间和页表

目录 1、进程地址空间示意图 2、验证进程地址空间的结构 3、验证进程地址空间是虚拟地址 4、页表-虚拟地址与物理地址 5、什么是进程地址空间 6、进程地址空间和页表的存在意义 6.1 原因一(效率性) 6.2 原因二(安全性) …

Langchain中使用Ollama提供的Qwen大模型进行Function Call实现天气查询、网络搜索

Function Call,或者叫函数调用、工具调用,是大语言模型中比较重要的一项能力,对于扩展大语言模型的能力,或者构建AI Agent,至关重要。 Function Call的简单原理如下: 按照特定规范(这个一般是L…

TensorRT的循环样例代码

官方文档地址 https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#define-loops 非顺序结构,其内容确实有点乱,而且没有完整可运行的样例。 可以有多个IIteratorLayer, IRecurrenceLayer, and ILoopOutputLayer 层,…

wondershaper 一款限制 linux 服务器网卡级别的带宽工具

文章目录 一、关于奇迹整形器二、文档链接三、源码下载四、限流测试五、常见报错1. /usr/local/sbin/wondershaper: line 145: tc: command not found2. Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs.. 一、关于奇迹整形…

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言: 一、抖音矩阵系统有哪些功能? 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布,智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题? 总结&#xff…

【MySQL基础随缘更系列】AB复制

文章目录 mysql AB复制实战一、mysql AB复制二、AB复制原理三、master服务器设置3.1、安装mysql并启动3.2、关闭防火墙,selinux3.3、设置时间服务器3.4、修改配置文件 设置server-idN3.5、创建slave连接master的账号,用于取SQL语句 四、slave设置4.3、修改配置文件 …

C#调用OpenCvSharp和SkiaSharp绘制图像直方图

最近在B站上学习OpenCv教程,学到图像直方图,后者描述的是不同色彩在整幅图像中所占的比例(统计不同色彩在图像中的出现次数),可以对灰度图、彩色图等计算并绘制图像直方图。本文学习OpenCvSharp中与计算直方图相关的函…

MySQL-DDL(Data Definition Language)

078-对表结构进行增删改操作 增删改表结构DDL(Data Definition Language) 创建一个学生表 create table t_student( no bigint, name varchar(255), age int comment 年龄 );查看建表语句 show create table t_student;修改表名 alter table 表名 r…

手写操作系统

对喜欢操作系统的伙伴强推一门课程 从0开始实现了支持文件系统、任务切换和网络协议栈的操作系统。 具体见 :http://www.ziyuanwang.online/977.html

Part 4.2 背包动态规划

->背包模型模板(0/1,分组&#xff0c;完全&#xff0c;多重)<- [NOIP2018 提高组] 货币系统 题目背景 NOIP2018 提高组 D1T2 题目描述 在网友的国度中共有 n n n 种不同面额的货币&#xff0c;第 i i i 种货币的面额为 a [ i ] a[i] a[i]&#xff0c;你可以假设每…

RocketMQ源码学习笔记:NameServer启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、NameServer启动流程2.1、总结2.2、NamesrvController2.2.1、主要职责2.2.2、关键的成员变量2.2.3、核心代码2.2.4、值得注意的点 1、Overview NameServer主要就做三件事 Nam…

DoIP——step2:车辆发现

文章目录 前言一、IP地址配置1.1 AutoIP1.2 DHCP1.3 DoIP实体的IP地址配置流程二、车辆发现车辆声明报文内容如下:前言 完成诊断设备到车辆的物理连接并通过激活线使能诊断连接后边缘节点将会将连接状态传递至应用层,在开始车辆发现过程之前,需要先进行各自的IP地址配置,获…

CTFshow之RCE代码命令远程执行第49关详细讲解。可私信!

棺材里伸手&#xff0c;死要钱&#xff01; --古吉拉特邦 莫迪大仙 引言&#xff1a;由于有些题目实在是让人抓挠&#xff0c;我看完题解后难以接受知识机械的执行获取flag&#xff0c;所以我想着尽可能用我的语言去进行解释&#xff01; 由于是验证猜想实验&#xff0c;所以…

【数据结构与算法 刷题系列】判断链表是否有环(图文详解)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法 经典例题》C语言 期待您的关注 ​ ​ 目录 一、问题描述 二、解题思路 1.解题思路: 2.快慢指针的移动分三个…

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-ABKDE卷积神经网络自适应…