背景
将 milvus 数据从 A 集群(K8S集群)迁到 B 集群(K8S集群),解决方案很多,这里提供一个使用官方 milvus-backup 工具进行数据迁移的方案。
注意:此方案为非实时同步方案,但借助 MinIO 客户端的数据同步功能,应该也是可以做到实时同步迁移。
1.png
步骤概览
- 制作 milvus-backup 镜像,方便备份工具在 K8S 集群中使用 service name 访问 milvus 和 minio
- 创建 milvus-backup 工作负载
- 进入 milvus-backup 容器,修改 configs/backup.yaml 配置
- 备份集群数据到本地存储中
- 将数据拷贝到新集群中进行恢复
步骤1:制作 milvus-backup 镜像
注意:如果是在两个单机版的 milvus 之间迁移数据,是不需要 milvus-backup 镜像的,又或者,如果 k8s 集群部署了 milvus, minio 的 nodeport 服务,也是可以不用镜像的。可以到官方 release 中下载一个二进制应用程序即可。
由于当前官方暂未提供 milvus-backup 的镜像,但官方提供了 Dockerfile,因此可以 git clone 一下官方代码仓库后使用 docker build 制作镜像。
git clone git@github.com:zilliztech/milvus-backup.git
cd milvus-backup
docker build -t milvus/milvus-backup:main .
2.png
在 build 之前可以修改一下 Dockerfile,加快 build 速度,请参考:
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 上创建工作负载。
3.png
步骤2:在 K8S 集群中创建 milvus-backup 工作负载(Deployment)
可以使用 kubectl 创建工作负载,也可以使用 K8S 管理后台(Kuboard / Kubesphere)创建,使用云端 K8S 的也一样,这里不展开。
注意一下,由于需要在两个集群间迁移,因此创建工作负载的时候挂载一个共享存储(/backup),方便迁移 MinIO 备份后的数据。
4.png
步骤3:修改 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,需要修改的项目有:
...
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 检查一下。
5.png
步骤4:备份当前集群数据到本地存储中
使用 milvus-backup 工具备份数据,这里可以直接参考 ./milvus-backup -h,milvus 系列的文档还是非常棒的。
6.png
如果数据量不大,备份速度很快,原理官方文档也讲了,这里不再介绍。备份好的之后,就可以使用 MinIO 客户端来查看数据了。
配置 MinIO 客户端
./mc config host add minio_1 http://my-release-minio:9000 minioadmin minioadmin
7.png
查看备份好的目录
./mc ls minio_1/a-bucket/backup
这里会列出上面使用 milvus-backup create 创建的备份
将备份好的文件拷贝到本地存储中
./mc cp -r minio_1/a-bucket/backup/mydb-20240510 /backup
这里的 /backup 目录是挂载的共享存储。
8.png
步骤5:恢复数据到新的集群中
进入新的集群(B)执行步骤 2和步骤 3,在步骤 3 中将 backup.yaml 中的配置修改成集群 B 的链接信息。 可以把 backup-cluster-a.yaml, backup-cluster-b.yaml 放到共享存储 /backup 中,防止 pod 重启配置丢失。 然后将共享目录中备份好的文件拷贝到新集群的 MinIO 中,使用 milvus-backup 恢复即可!
10.png
注意,记得恢复的时候带上 --restore_index 参数,这样恢复的时候会带索引一起恢复出来。恢复好之后使用 Attu 加载一下 collection,就可以正常使用了
9.png
技术干货
高级检索增强生成(RAG)应用与LlamaIndex
在最近由Zilliz(旧金山)主办的非结构化数据聚会上,LlamaIndex的开发者关系副总裁Laurie Voss发表了一场关于“使用LlamaIndex构建高级RAG应用”的演讲。他分享了如何使检索增强生成(RAG)框架更简单、更易于生产准备的知识,并通过LlamaIndex实现。
2024-07-26技术干货
改善行为科学实验与LLMs和Milvus
探索的重点是发现图片中的什么允许这种转变以及如何寻找它。这就是多维图像嵌入和向量数据库发挥作用的地方。
2024-07-26技术干货
向量嵌入简介:它们是什么以及如何使用它们
理解向量嵌入以及何时以及如何使用它们。探索使用Milvus和Zilliz Cloud向量数据库的现实世界应用。
2024-07-26