Milvus 自 2019 年 10
月 15 號開源以來,從剛開始
的 0.5.0 版本已經更新迭代到了如今的 0.10.2 版本,
其
間大大小小一共經歷了十幾個版本。面對這麼多版本,不少朋友可能都會有這些疑惑:
哪些版本之間能夠進行平滑升級?nginx
可以平滑升級的版本之間具體又該如何升級?git
此外,一些朋友進行功能測試的時候是在有網環境裏,可是最終上線的時候因爲場景的特殊性以及數據的保密性,他們只能在無網環境中部署。因而不由會問:
不管是版本的升級仍是有網環境到無網環境的遷移,都是圍繞着 Milvus 的四個文件夾(conf、db、wal、logs)進行的。因此在開始以前對這四個文件夾作一下介紹是十分必要的。
conf 目錄用來存放 Milvus 的配置文件。
在 Milvus v0.8.0 及以前版本中,conf 目錄裏包含兩個配置文件:server_config.yaml 和 log_config.conf。server_config.yaml 設置的是 Milvus server 的配置參數,log_config.conf 設置的是 Milvus 日誌的配置參數。
在 Milvus v0.8.0 以後的版本中,conf 目錄裏只包含一個配置文件:server_config.yaml。關於日誌的參數設置放到了 server_config.yaml 中的 logs 區域。
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)在邏輯上是父子級,可是在文件結構上是平級的。
-
1591254355070376000:
存儲集合中一個數據段(segment)文件的全部數據的目錄。
1591254355070376000.rv:
存儲當前數據段(segment)的原始向量。
1591254355070376000.uid:
存儲當前數據段(segment)的全部向量 ID。
1591254661450955000:
存儲當前數據段(segment)的索引文件。
bloom_filter:
布隆過濾器,用來判斷一個向量 ID 是否存在於該數據段(segment)中。
deleted_docs:
用來記錄刪除的向量 ID。
wal 目錄用來存儲 Milvus 的預寫式日誌(Write-Ahead Logging)文件,通常不影響版本升級和數據遷移。
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 目錄三個步驟來實現有網環境到內網環境的遷移。
官方推薦使用 Docker 的方式部署 Milvus 服務端,因此本文主要介紹如何內網安裝 Docker 版本的 Milvus。內網安裝的關鍵步驟是獲取 Milvus Docker 的鏡像,有了 Docker 鏡像,就能夠經過docker run輕鬆啓動 Milvus 服務端了。
由於 Docker 提供了docker save和docker load命令來幫助咱們打包和加載 Docker 鏡像,因此能夠經過在有網機器上拉取 Milvus Docker 鏡像,用docker save將其壓縮成一個 TAR 包,利用移動存儲介質將鏡像 TAR 包拷貝到內網機器上,最後利用docker load來加載鏡像。整個過程能夠用下面的流程圖來描述:
$ docker save milvusdb/milvus > milvus_image.tar $ docker load < milvus_image.tar
Milvus 提供了多種語言的客戶端,如下主要介紹如何在內網環境中安裝 Milvus Python 客戶端 pymilvus。
第一步:從有網機器上下載 pymilvus 包(多個 WHL 文件)到指定文件夾。
pip3 download -d <your path> pymilvus
第二步:將下載好的 pymilvus 包拷貝到內網的機器,進行安裝。
經過上述兩個步驟就能夠在內網環境中安裝好 Milvus 的 Python 客戶端了。
pip3 install <your path>/*.whl
從有網環境遷移到內網環境的最後一步就是將有網機器上的 Milvus 文件夾拷貝到內網機器上。拷貝完成以後爲了保證順利啓動 Milvus Docker,還須要手動刪除 Milvus 目錄下的 wal 文件夾。
將上述全部準備工做作好以後,就能夠在內網機器上經過docker run映射拷貝過來的 db 目錄、logs 目錄以及 conf 目錄來啓動 Milvus 了。
以上是一些 Milvus 遷移和升級策略的粗淺介紹。歡迎更多有志推廣非結構化數據搜索的朋友一塊兒加入 Milvus 開源社區,共同見證 Milvus 的成長!
github.com/milvus-io/milvus
| 源碼
milvusio.slack.com
|
Slack 社區
zhihu.com/org/zilliz-11/columns |
知乎
zilliz.blog.csdn.net
|
CSDN 博客
space.bilibili.com/478166626 |
Bilibili