基於 JuiceFS 搭建 Milvus 分散式叢集
:pencil2: 作者介紹:
賈晶晶, Zilliz 資料工程師,畢業於西安交通大學電信學部。加入到 Zilliz 之後的主要工作內容為資料預處理、AI 模型部署以及與 Milvus 相關的技術調研。
高昌健,Juicedata 解決方案架構師,十年網際網路行業從業經歷,曾在知乎、即刻、小紅書多個團隊擔任架構師職位,專注於分散式系統、大資料、AI 領域的技術研究。
JuiceFS 【1】 是一款針對雲原生環境設計的共享檔案系統,支援所有型別資料的管理、分析、歸檔和備份,被廣泛應用於大資料、人工智慧、日誌收集等場景。JuiceFS 支援多端資料共享,可以直接作為 Milvus 底層的共享儲存。本文詳細介紹瞭如何基於 JuiceFS 共享儲存搭建 Milvus 分散式叢集。
JuiceFS 介紹
JuiceFS 是一款基於雲原生環境設計的高效能開源 POSIX 檔案系統。在資料和所對應的元資料分別持久化至物件儲存和 Redis 後,JuiceFS 將作為無狀態的中介軟體,使得不同應用能夠以標準的檔案系統介面無縫對接,從而實現資料共享。JuiceFS 依靠 Redis 來儲存檔案的元資料。Redis 是一個開源的記憶體資料庫,可以保障元資料操作的原子性和高效能。所有檔案的資料通過客戶端儲存到物件儲存中,架構圖如下:
Milvus 介紹
Milvus 【2】是一款開源的向量相似度搜索引擎,可與多種 AI 模型相結合。Milvus 提供向量化的非結構資料檢索服務,目前廣泛應用於影象處理、計算機視覺、自然語言處理、語音識別、推薦系統以及新藥研發等領域。
Milvus 適用於多種場景,與深度學習相融合的架構如下圖所示:
採用 Milvus 的資料處理流程包括以下幾個步驟:
-
與深度學習模型相結合,將非結構化資料轉化為特徵向量;
-
將特徵向量儲存到 Milvus 並建立索引;
-
返回向量相似性搜尋結果。
基本架構
結合 JuiceFS 搭建 Milvus 分散式叢集的架構如下圖所示,其中 Mishards 負責將上游請求拆分並路由到內部各細分子服務。插入資料時,Mishards 會將請求分配到 Milvus 寫節點上,通過寫節點將插入的資料儲存到 JuiceFS 中;讀取資料時,Mishards 就會通過 Milvus 讀節點從 JuiceFS 中讀取資料到記憶體中進行處理,最後將處理結果進行彙總,返回給上游。
搭建步驟
1. 安裝並啟動 MySQL 服務
MySQL 服務只需要在叢集中任意一臺裝置上啟動即可,具體參考 Milvus 文件: 使用 MySQL 管理元資料【3】 。
2. 安裝 JuiceFS
本文中選擇的是 JuiceFS 的預編譯版本【4】,使用者可以直接下載,詳細安裝過程參考 JuiceFS 安裝教程 【5】 。JuiceFS 需要先安裝 Redis,如果你使用的是公有云,建議直接使用公有云託管的 Redis 服務。JuiceFS 也需要配置物件儲存(詳細步驟參考文章 【6】 ) ,文中使用的是 Azure Blob Storage。JuiceFS 現已支援所有主流的物件儲存,使用者可自行選擇適合的物件儲存服務。
配置好 Redis 服務及物件儲存之後,需要格式化一個新的檔案系統,然後將 JuiceFS 掛載到本地目錄中:
$ export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
$ ./juicefs format \
--storage wasb \
--bucket http://<container> \
... \
localhost test #格式化
$ ./juicefs mount -d localhost ~/jfs #掛載
注:如果 Redis 服務不在本地,需要將 localhost 替換成如下完整地址: redis://user:[email protected]:6379/1 。
如下圖所示,成功安裝 JuiceFS 後,即可得到共享儲存的路徑 /root/jfs 。
3. 啟動 Milvus
叢集中的每一臺裝置均需要安裝 Milvus,並分別為不同裝置上的 Milvus 配置讀寫許可權。其中僅可將一臺裝置中的 Milvus 配置為寫入,其餘均為只讀。首先,在 Milvus 的系統配置檔案 server_config.yaml 中,配置 cluster 區域和 general 區域的引數。
cluster 區域
引數 |
說明 |
引數設定 |
enable |
是否開啟叢集模式 |
tru e |
role |
節點的執行模式 |
rw (ro) |
general 區域
引數 |
說明 |
引數設定 |
meta_uri |
元資料儲存的 URI。使用 MySQL(Milvus 分散式版本)作為元資料的儲存後端。URI 格式為 mysql://username:[email protected]:port/database。 |
mysql://root:[email protected]:3306/milvus |
Milvus 安裝過程中, /root/jfs/milvus/db 對映是已配置完成的 JuiceFS 共享儲存路徑。
sudo docker run -d --name milvus_gpu_1.0.0 --gpus all \
-p 19530:19530 \
-p 19121:19121 \
-v /root/jfs/milvus/db:/var/lib/milvus/db \ #/root/jfs/milvus/db為共享儲存的路徑
-v /home/$USER/milvus/conf:/var/lib/milvus/conf \
-v /home/$USER/milvus/logs:/var/lib/milvus/logs \
-v /home/$USER/milvus/wal:/var/lib/milvus/wal \
milvusdb/milvus:1.0.0-gpu-d030521-1ea92e
安裝完成後,啟動 Milvus,並檢驗 Milvus 是否啟動成功。
最後,參考 GitHub 中教程 【7】 ,在叢集中任意一臺裝置上啟動 Mishards 服務。下圖表示 Mishards 啟動成功。
共享儲存方案通常使用 Network-attached Storage(NAS)系統實現,常用的協議包括 Network File System(NFS)、Server Message Block(SMB) 等。公有云上一般也會提供相容這些協議的託管儲存服務,例如 Amazon Elastic File System(EFS)。
區別於傳統的 NAS 系統,JuiceFS 基於 Filesystem in Userspace(FUSE)實現,資料讀寫都直接發生在應用端,因此能進一步降低訪問延遲。此外,JuiceFS 還提供一些 NAS 系統不具備的特性,如資料壓縮、資料快取等,效能也有大幅提升。在與 EFS 的對比測試中,JuiceFS 表現出了較大優勢。如圖 1 所示,在原資料操作效能上,JuiceFS 的表現明顯優於 EFS,差距最大時 JuiceFS 的效能可優於 EFS 十倍之多。圖 2 記錄了在順序寫與順序讀測試中 JuiceFS 與 EFS 的 I/O 吞吐效能資料:無論在單任務或是多工的測試中,JuiceFS 相比 EFS 都有較大的效能提升。
圖 1
圖 2
除了 JuiceFS 與 EFS 的對比測試,我們還測試了結合 JuiceFS 搭建的 Milvus 分散式叢集的第一次檢索時間。第一次檢索時間指將新匯入的資料從磁碟載入到記憶體的耗時。將 100 萬條 128 維的資料以每 10 萬條為單位分批插入,每間隔 1 至 8 秒進行檢索,測試結果顯示平均檢索時間為 0.032 秒,表明從磁碟載入到記憶體的耗時較少。上述測試證明了 JuiceFS 作為共享儲存裝置的穩定性,基於 JuiceFS 搭建 Milvus 分散式叢集能兼顧高效能和彈性儲存容量。
參考連結:
【1】
JuiceFS:http://github.com/juicedata/juicefs
【2】Milvus:http://github.com/milvus-io/milvus
【3】使用 MySQL 管理元資料:http://milvus.io/cn/docs/v1.0.0/data_manage.md
【4】JuiceFS 的預編譯版本:http://github.com/juicedata/juicefs/releases
【5】JuiceFS 安裝教程:http://github.com/juicedata/juicefs/blob/main/README_CN.md
【6】配置物件儲存:http://github.com/juicedata/juicefs/blob/main/docs/zh_cn/how_to_setup_object_storage.md
【7】 GitHub 教程:http://github.com/milvus-io/bootcamp/tree/new-bootcamp/deployments/juicefs
- JuiceFS 資料讀寫流程詳解
- 如何在 Kubernetes 叢集中玩轉 Fluid JuiceFS
- 如何在 Kubernetes 叢集中玩轉 Fluid JuiceFS
- 如何利用 JuiceFS 的效能工具做檔案系統分析和調優
- 知乎利用 JuiceFS 給 Flink 容器啟動加速實踐
- JuiceFS 在大搜車資料平臺的實踐
- 環球易購資料平臺如何做到既提速又省錢?
- JuiceFS CSI Driver 的最佳實踐
- JuiceFS CSI Driver 的最佳實踐
- 百億級小檔案儲存,JuiceFS 在自動駕駛行業的最佳實踐
- JuiceFS 如何幫助趣頭條超大規模 HDFS 降負載
- ClickHouse 存算分離架構探索
- Elasticsearch 儲存成本省 60%,稿定科技乾貨分享
- Elasticsearch 儲存成本省 60%,稿定科技乾貨分享
- 常見開源分散式檔案系統架構對比
- 如何藉助 JuiceFS 為 AI 模型訓練提速 7 倍
- 如何藉助 JuiceFS 為 AI 模型訓練提速 7 倍
- JuiceFS 使用 TiKV 資料庫上手指南
- JuiceFS CSI Driver v0.10 全新架構解讀
- 基於 JuiceFS 搭建 Milvus 分散式叢集