milvus的docker/单机版跨机器数据迁移记录

1,760 阅读3分钟

官方提供的milvus_backup工具暂不完善,通过自己的方式来实现数据跨服务器的备份和还原

自己在一台服务器上部署了docker版本milvus,因业务需要,需要将单机上保存的数据迁移到其他服务器上。 官方提供了milvus_backup组件用于提供数据的备份和迁移。而且介绍里有说可以跨服迁移数据,但是未看到具体例子,而且也没有相关设置。用milvus_backup只能实现在同一个存储实例上跨不同存储桶的数据备份和还原。

milvus_backup备份原理是备份时将元数据导出成json以及具体业务数据统一备份到配置指定的备份桶的特定目录上。这里包含了完整的数据。

milvus数据还原思路:

  1. 先备份好服务器A上的milvus数据
  2. 在目标服务器B上通过docker安装好milvus
  3. 因为备份的数据使用minIO存储,我们可以通过minIO的mc工具,将minIO指定桶的数据从服务器A同步到服务器B
  4. 通过milvus-backup工具,在服务器B上执行restore的操作,将数据还原。

备份数据

按milvus_backup的bakcup.yaml说明配置好milvus和minIO相关的地址端口账号密码,在备份命令./milvus-backup create -n backup_0518 --config "configs/backup_old.yaml"执行后会将数据备份到自己设置的目标桶和路径:

image.png

这些是整个milvus跑起来的完整数据了。我们有了这些数据,就可以尝试在新的机器上还原milvus的所有数据了。

将服务器A的minIO桶数据镜像到服务器B

在服务器B上安装好docker版本的milvus。milvus自带了minIO。同时安装minIO的控制台工具minIO client. 通过mc命令执行数据同步,将前面备份好的桶数据同步过来。

mc alias set m1 http://a:9000 minioadmin minioadmin
mc alias set m2 http://b:9000 minioadmin minioadmin
#同步数据到m2
#目标桶需要提前建好
mc mirror m1/a-bucket-backup m2/a-bucket-backup

执行数据镜像之后,我们在服务器B就有了备份的完整数据了。

在服务器B上还原数据

在服务器B上安装好milvus_backup工具。并配置好backup.yaml。注意这里配置指向的milvus和minIO都是服务器B上新的目标对象了,同时注意备份路径跟之前服务器A备份时的保持一致。然后通过备份工具执行还原:

milvus-backup restore -n backup_0518 --restore_index --config "configs/restore_new.yaml"

注意这里在还原时需要加--restore_index参数以重构索引。milvus备份工具是不会备份索引的,如果不加这个参数,数据导入后,原来查询也代码逻辑可能无法正常工作直接报错。

至此,实现了milvus从服务器A到服务器B的数据迁移。理论上这个是一个很基础的功能,后续官方工具应该会完善。