Milvus 迁移升级攻略



Milvus 自 2019 年 10 月 15 号开源以来,从刚开始 的 0.5.0 版本已经更新迭代到了如今的 0.10.2 版本, 间大大小小一共经历了十几个版本。面对这么多版本,不少朋友可能都会有这些疑惑:
  • 哪些版本之间能够进行平滑升级?nginx

  • 可以平滑升级的版本之间具体又该如何升级?git


此外,一些朋友进行功能测试的时候是在有网环境里,可是最终上线的时候因为场景的特殊性以及数据的保密性,他们只能在无网环境中部署。因而不由会问:
  • 如何将 Milvus 从有网环境迁移到无网环境?github



针对以上这些问题,本文将一一为你们解答。



| Milvus 数据目录介绍

不管是版本的升级仍是有网环境到无网环境的迁移,都是围绕着 Milvus 的四个文件夹(conf、db、wal、logs)进行的。因此在开始以前对这四个文件夹作一下介绍是十分必要的。
  • confsql

conf 目录用来存放 Milvus 的配置文件。
在 Milvus v0.8.0 及以前版本中,conf 目录里包含两个配置文件:server_config.yaml 和 log_config.confserver_config.yaml 设置的是 Milvus server 的配置参数,log_config.conf 设置的是 Milvus 日志的配置参数。
在 Milvus v0.8.0 以后的版本中,conf 目录里只包含一个配置文件:server_config.yaml。关于日志的参数设置放到了 server_config.yaml 中的 logs 区域。
  • dbdocker

db 目录用来存放 Milvus 的数据文件和索引文件。若是使用 SQLite 来存储元数据,那么 db 目录下还会存放 Milvus 的元数据。db 目录是进行 Milvus 版本升级和数据迁移时须要重点关注的文件夹。一个 db 目录的结构可参考下图示例:
meta.sqlite: SQLite 数据库用来存储 Milvus 元数据的文件。
meta.sqlite-shm: SQLite 数据库的共享内存文件。
meta.sqlite-wal: SQLite 数据库的 WAL (Write-Ahead Logging) 文件。



⚠️注意 : 如需将 Milvus 部署在生产环境,必须使用 MySQL 替代 SQLite 管理元数据。具体替代方法参考 使用 MySQL 管理元数据:
https://milvus.io/cn/docs/v0.10.2/data_manage.md



tables:存储 Milvus 全部集合和分区的文件夹。shell

test_table:存储名为 “test_table” 的集合内的全部数据段文件。数据库

test_partition:存储名为 “test_partition” 的分区内的全部数据段文件。微信




⚠️注意:
  • Milvus 中集合(collection)和分区(partition)在逻辑上是父子级,可是在文件结构上是平级的。
  • 集合与分区的关系能够在 meta 文件中找到。



1591254355070376000: 存储集合中一个数据段(segment)文件的全部数据的目录。
1591254355070376000.rv: 存储当前数据段(segment)的原始向量。
1591254355070376000.uid: 存储当前数据段(segment)的全部向量 ID。
1591254661450955000: 存储当前数据段(segment)的索引文件。
bloom_filter: 布隆过滤器,用来判断一个向量 ID 是否存在于该数据段(segment)中。
deleted_docs: 用来记录删除的向量 ID。
  • walapp

wal 目录用来存储 Milvus 的预写式日志(Write-Ahead Logging)文件,通常不影响版本升级和数据迁移。
  • logs测试

logs 目录用来存储 Milvus 的日志文件,通常不影响版本升级和数据迁移。



| Milvus 版本升级指南


Milvus 版本升级通常可概括为三个步骤:数据兼容性判断、升级服务端、升级客户端。
  • 数据兼容性判断

Milvus 版本升级以前,咱们第一步须要判断两个版本的数据是否兼容。若是数据不兼容,这两个版本是没法直接升级的,只能从新导入数据进行升级。通常来说,若是两个版本的 Milvus 的元数据没有修改,那么这两个版本的数据就是兼容的。
若是两个版本的 Milvus 数据兼容,升级时能够直接将老版本 Milvus 的 db 目录拷贝出来,在启动新版本 Milvus 时,直接映射老版本的 db 目录。
从开源时的 0.5.0 版本到如今最新的 0.10.2 版本,根据数据兼容性能够将这些版本分红三个阶段,每一个阶段的版本数据相互兼容,不一样阶段的版本数据不能兼容:

第一阶段

v0.5.0 ~ v0.5.3

第二阶段

v0.6.0

第三阶段

v0.7.0 ~ v0.10.2

在作版本升级时,除了 db 目录能够复用以外,Milvus 目录下的其余文件夹基本上都没法复用,尤为是配置文件。 请务必使用对应版 本的配置文件,不然没法成功启动 Milvus。
  • 升级服务端

服务端升级,主要是指对 Milvus Docker 进行升级,经过拉取官方提供的对应版本的 Milvus Docker 镜像,利用docker run命令启动 Milvus 服务端。
  • 升级客户端

Milvus 目前提供了 Python、Java、C++ 和 Go 语言的 SDK。服务端升级以后,客户端也要升级至对应的版本。客户端与服务端的版本对应关系能够查看  Milvus 发版说明:https://milvus.io/cn/docs/v0.10.2/release_notes.md。



| Milvus 从有网环境迁移到内网环境


对于在有网环境测试但须要在内网环境部署的场景,能够经过内网安装 Milvus 服务端、内网安装 Milvus 客户端、拷贝 Milvus 目录三个步骤来实现有网环境到内网环境的迁移。
  • 内网安装 Milvus 服务端

官方推荐使用 Docker 的方式部署 Milvus 服务端,因此本文主要介绍如何内网安装 Docker 版本的 Milvus。内网安装的关键步骤是获取 Milvus Docker 的镜像,有了 Docker 镜像,就能够经过docker run轻松启动 Milvus 服务端了。
由于 Docker 提供了docker savedocker load命令来帮助咱们打包和加载 Docker 镜像,因此能够经过在有网机器上拉取 Milvus Docker 镜像,用docker save将其压缩成一个 TAR 包,利用移动存储介质将镜像 TAR 包拷贝到内网机器上,最后利用docker load来加载镜像。整个过程能够用下面的流程图来描述:       
                 
相应的 Docker 指令以下:
  
  
  
   
   
            
   
   

  
  
  
   
   
            
   
   
$ docker save milvusdb/milvus > milvus_image.tar $ docker load < milvus_image.tar


  • 内网安装 Milvus 客户端

Milvus 提供了多种语言的客户端,如下主要介绍如何在内网环境中安装 Milvus Python 客户端 pymilvus。
第一步:从有网机器上下载 pymilvus 包(多个 WHL 文件)到指定文件夹。
  
  
  
   
   
            
   
   

  
  
  
   
   
            
   
   
pip3 download -d <your path> pymilvus
第二步:将下载好的 pymilvus 包拷贝到内网的机器,进行安装。
  
  
  
   
   
            
   
   

  
  
  
   
   
            
   
   
经过上述两个步骤就能够在内网环境中安装好 Milvus 的 Python 客户端了。

pip3 install <your path>/*.whl
  • 拷贝 Milvus 目录

从有网环境迁移到内网环境的最后一步就是将有网机器上的 Milvus 文件夹拷贝到内网机器上。拷贝完成以后为了保证顺利启动 Milvus Docker,还须要手动删除 Milvus 目录下的 wal 文件夹。
将上述全部准备工做作好以后,就能够在内网机器上经过docker run映射拷贝过来的 db 目录、logs 目录以及 conf 目录来启动 Milvus 了。


以上是一些 Milvus 迁移和升级策略的粗浅介绍。欢迎更多有志推广非结构化数据搜索的朋友一块儿加入 Milvus 开源社区,共同见证 Milvus 的成长!


| 欢迎加入 Milvus 社区
github.com/milvus-io/milvus  | 源码
milvus.io  |  官网
milvusio.slack.com  |  Slack 社区
zhihu.com/org/zilliz-11/columns |  知乎
zilliz.blog.csdn.net   |   CSDN 博客
space.bilibili.com/478166626 |  Bilibili

本文分享自微信公众号 - ZILLIZ(Zilliztech)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。