Milvus 1.x 版本支持 S3 存儲的部署


技術分享|Milvus 1.x 版本支持 S3 存儲的部署


背景

Milvus 1.1.1 版本開始比較完整地支持了 S3 作為存儲後端,在此之前,我們在 1.1 及之前版本部署分布式方案的時候,只能採用 NFS 的方案。相比來說 S3 有著更加接地氣的雲原生表現。

本文簡單記錄了使用 Milvus 1.x 版本,通過官方的 Helm Chart 在 Kubernetes 環境中部署基於 S3 存儲的 Milvus 集群。

測試環境

  • 州長:1.22.0
  • S3:Ceph Radosgw(Ceph 16.2.5)

部署準備

這兒我們使用已經搭建好的 Ceph Radosgw 提供的 S3 服務作為測試環境。

測試環境相關的參數如下:

  • S3 服務的 IP位址 192.168.18.13,這個參數也支持主機名/域名的方式的
  • S3 服務的埠 80
  • S3 服務使用的 access_key WQDU43IQ8YEPS2UDRT4S
  • S3 服務使用的 secret_key 3tS9vSKY4gGOEeRmVQGzRcxKAWAAHq2zuwMI9d9l
  • 預先創建好給 Milvus 使用的 Bucket,這裡我們使用 milvus-test:s3cmd mb s3://milvus-test

如果你正在參考此文搭建,需要注意在示例代碼中替換這些替換這些參數。

部署過程

添加Helm

    • 添加Milvus 官方的Helm Repo:
helm repo add milvus https://milvus-io.github.io/milvus-helm/helm repo update
    • 當然也可以從官方的 Helm Chart 的代碼倉庫下載 1.1 分支的 Helm Chart,地址:

需要配置的參數

  • 開啟集群:cluster.enabled 需要設置為 true。
  • S3 相關的參數:
storage:
      s3:
        enabled: true
        address: 192.168.18.13
        port: 80
        access_key: WQDU43IQ8YEPS2UDRT4S
        secret_key: 3tS9vSKY4gGOEeRmVQGzRcxKAWAAHq2zuwMI9d9l
        bucket: milvus-test

MySQL 存儲的設置

在我們的測試中,因為 MySQL 還是使用的是非共享持久化存儲(通過 PV 提供),並且 Kubernetes 集群預先沒有配置默認的 StorageClass,因此也需要指定 mysql.persistence.storageClass。當然如果僅是測試,你也可以關閉 MySQL 的數據持久化,配置 mysql.persistence.enabled 為 false。

相關文章  如何合理選配音響器材 序言(2018)

安裝部署

確認好參數之後,我們就可以直接基於 Helm 進行部署了:

helm install milvus-test milvus/milvus 
    --version 1.1.6 
    --set cluster.enabled=true 
    --set storage.s3.enabled=true 
    --set storage.s3.address=192.168.18.13 
    --set storage.s3.port=80 
    --set storage.s3.access_key=WQDU43IQ8YEPS2UDRT4S 
    --set storage.s3.secret_key=3tS9vSKY4gGOEeRmVQGzRcxKAWAAHq2zuwMI9d9l 
    --set storage.s3.bucket=milvus-test 
    --set mysql.persistence.storageClass=csi-rbd-sc

如果是基於官方代碼倉庫進行部署的,可以在代碼倉目錄下執行:

helm install milvus-test charts/milvus 
    --set cluster.enabled=true 
    --set storage.s3.enabled=true 
    --set storage.s3.address=192.168.18.13 
    --set storage.s3.port=80 
    --set storage.s3.access_key=WQDU43IQ8YEPS2UDRT4S 
    --set storage.s3.secret_key=3tS9vSKY4gGOEeRmVQGzRcxKAWAAHq2zuwMI9d9l 
    --set storage.s3.bucket=milvus-test 
    --set mysql.persistence.storageClass=csi-rbd-sc

Chart 創建後應該會返回大體如下的輸出:

NAME: milvus-test
LAST DEPLOYED: Tue Aug 17 06:17:47 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

......

For more information on running Milvus, visit:
https://milvus.io/

觀察 POD 的狀態,等所有 milvus-test 相關的 POD 都 Ready 之後,那麼就說明部署成功了,如果長時間失敗,那麼可以通過 Describe POD 去定位相關的錯誤原因,當然這超出本文的範圍了。

[[email protected] test_milvus]# kubectl get pod  | grep ^milvus-test
milvus-test-mishards-7c44fb887d-98r5r   1/1     Running   0          8h
milvus-test-mysql-7fbd777c9b-6fvdc      1/1     Running   0          8h
milvus-test-readonly-cc46b9f7c-cxqqx    1/1     Running   0          8h
milvus-test-writable-5f67957f94-6sg66   1/1     Running   0          8h
[[email protected] test_milvus]#

你好 Milvus

接下來我們用官方 Hello Milvus 來測試一下集群:

pip3 install pymilvus==1.1.2 --user
wget https://raw.githubusercontent.com/milvus-io/pymilvus/v1.1.2/examples/example.py

並修改 example.py 中的 Milvus 服務的地址:

# Milvus server IP address and port.
# You may need to change _HOST and _PORT accordingly.
_HOST = '10.254.228.63'
_PORT = '19530'  # default value
# _PORT = '19121'  # default http value

10.254.228.63 是 Milvus 服務所在的 IP,默認安裝時這個可以通過 kubectl get service 來查詢,在正式的生成環境,你應該想法設法通過域名、服務名來訪問他。

相關文章  黃章終於不再倔強!魅藍手機官宣將王者歸來:首款機型配置正式曝光

測試一下,能得到類似的結果應該就是成功了:

[[email protected] test_milvus]# python3 example.py
CollectionSchema(collection_name="example_collection_", dimension=8, index_file_size=32, metric_type=)
[[0.5276305713713695, 0.12260932441933903, 0.3171067816154105, 0.13174567988561292, 0.561218915370599, 0.9768724314879139, 0.24527548957936463, 0.14069703982325565], [0.8693438293577815, 0.12859046522689555, 0.9297356851442876, 0.8802749386768061, 0.17213435969718438, 0.2792529446501495, 0.19399770066059763, 0.33760474662703477], [0.5285542325087451, 0.38652674443502677, 0.14204221506972037, 0.4446153658300557, 0.2147865132793082, 0.9802573685721011, 0.3490536785441605, 0.34690242339603694], [0.7640980395490863, 0.23851191563969232, 0.9974789898983394, 0.722209615974155, 0.5624709350402459, 0.9847888630664351, 0.8612679336524167, 0.41734632322181175], [0.7004859469397275, 0.15074329515642382, 0.5012549694880217, 0.6076530709776871, 0.5767756898619726, 0.8492594735963868, 0.5949238938992756, 0.27046992486561117], [0.4883219211158971, 0.6560899610463157, 0.17088775896262798, 0.3163316053192182, 0.4884560175347151, 0.9763345942373309, 0.3704132095239927, 0.14451999941961524], [0.420306114063945, 0.8691462987382358, 0.7681884205204504, 0.953297827028537, 0.3576528295276099, 0.10474646884992755, 0.611149746544882, 0.2603478699362083], [0.8603200422829845, 0.9761167618027261, 0.41316487821482517, 0.7872035159773235, 0.6945912973115762, 0.12198972896625171, 0.8797358763991232, 0.06431771849999612], [0.9815822851563419, 0.8218869618904384, 0.2972918857560406, 0.8344590620834544, 0.6506061203194943, 0.9055832448140761, 0.06218259919367797, 0.5531204533227327], [0.09243830916736795, 0.36326131399430095, 0.053323967514035564, 0.3587912438051374, 0.9962743116612562, 0.8274464481216758, 0.2328478805255606, 0.49902733854966996]]
{'partitions': [{'row_count': 10, 'segments': [{'data_size': 400, 'index_name': 'IDMAP', 'name': '1629250329513627000', 'row_count': 10}], 'tag': '_default'}], 'row_count': 10}
Creating index: {'nlist': 2048}
(collection_name="example_collection_", index_type=, params={'nlist': 2048})
Searching ...
Query result is correct
[
 [ (id:1629250329511543000, distance:0.0) ]
 [ (id:1629250329511543001, distance:0.0) ]
 [ (id:1629250329511543002, distance:0.0) ]
        ......
            ......
]


Milvus 社區是由 Milvus 開發者、用戶、貢獻者們共同建立的一個開放、活躍的交流平台。在這裡,我們可以自由發言,與志同道合的技術愛好者們交流切磋,分享經驗。

我想參與,但我是小白?技術新手不用怕,條條大路通羅馬!除了貢獻代碼,你可以從這些小事入手:

  • 報告代碼中的錯誤
  • 幫助改進 Milvus 的文檔
  • 為 Milvus 項目提供使用場景與教程
  • 提供 Milvus 使用經驗或是向量資料庫相關的一些技術內容 (文章、視頻等)
  • 網站設計優化

躍躍欲試了嗎?提前劇透:Milvus 今年也參與了十月「黑客慶典」 Hacktoberfest。我們準備了許多有趣的任務,屆時歡迎小夥伴們一同來完成挑戰,贏取獎品!

技術分享|Milvus 1.x 版本支持 S3 存儲的部署

GitHub @Milvus-io|CSDN @Zilliz星球|嗶哩嗶哩 @Zilliz-行星

Zilliz 以重新定義數據科學為願景,致力於打造一家全球領先的開源技術創新公司,並通過開源和雲原生解決方案為企業解鎖非結構化數據的隱藏價值。

Zilliz 構建了 Milvus 向量資料庫,以加快下一代數據平台的發展。Milvus 是 LF AI & Data 基金會的畢業項目,能夠管理大量非結構化數據集,在新藥發現、推薦引擎、聊天機器人等方面具有廣泛的應用。

回到頂端