官方提供的milvus_backup工具暂不完善,通过自己的方式来实现数据跨服务器的备份和还原
自己在一台服务器上部署了docker版本milvus,因业务需要,需要将单机上保存的数据迁移到其他服务器上。 官方提供了milvus_backup组件用于提供数据的备份和迁移。而且介绍里有说可以跨服迁移数据,但是未看到具体例子,而且也没有相关设置。用milvus_backup只能实现在同一个存储实例上跨不同存储桶的数据备份和还原。
milvus_backup备份原理是备份时将元数据导出成json以及具体业务数据统一备份到配置指定的备份桶的特定目录上。这里包含了完整的数据。
milvus数据还原思路:
- 先备份好服务器A上的milvus数据
- 在目标服务器B上通过docker安装好milvus
- 因为备份的数据使用minIO存储,我们可以通过minIO的mc工具,将minIO指定桶的数据从服务器A同步到服务器B
- 通过milvus-backup工具,在服务器B上执行restore的操作,将数据还原。
备份数据
按milvus_backup的bakcup.yaml说明配置好milvus和minIO相关的地址端口账号密码,在备份命令./milvus-backup create -n backup_0518 --config "configs/backup_old.yaml"执行后会将数据备份到自己设置的目标桶和路径:
这些是整个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的数据迁移。理论上这个是一个很基础的功能,后续官方工具应该会完善。