Milvus 單機版部署
在 Docker 環境下安裝、應用和配置 Milvus 向量數據庫可以按照以下步驟進行,涵蓋從安裝到基礎應用的完整流程:
1. 部署前準備
- 服務器:建議測試環境配置 2 核 CPU、8GB 內存;處理 100 萬組向量數據,推薦 4 核 CPU、16GB 內存及 50GB 存儲;500 萬組向量數據則需 8 核 CPU、32GB 內存及 200GB 存儲 。
- 軟件層面,服務器需安裝 Docker
1.1 Milvus 單機版鏡像
# 拉取最新版 Milvus 單機版鏡像
docker pull milvusdb/milvus:latest# 或指定具體版本(推薦,版本更穩定)
docker pull milvusdb/milvus:v2.4.5
1.2 MinIO 鏡像(對象存儲)
docker pull minio/minio:RELEASE.2023-03-20T20-16-18Z
參考圖片存儲MinIO 應用介紹及 Docker 環境下的安裝部署
1.3拉取 etcd 鏡像(元數據存儲)
# Milvus 推薦的 etcd 版本
docker pull quay.io/coreos/etcd:v3.5.5
Milvus安裝準備etcd介紹、應用場景及Docker安裝配置
2. 啟動 Milvus 單機服務
2.1配置文件 milvus-config
文件掛載的目錄下
進入milvus-config,在線拉去配置文件
wget https://raw.githubusercontent.com/milvus-io/milvus/v2.4.5/configs/milvus.yaml
2.2 etcd的配置
2.3 mino的配置
3. 啟動服務
docker run -d \--name milvus245 \ # 容器名稱,方便后續管理-p 19530:19530 \ # 端口映射:宿主機19530 -> 容器19530(客戶端連接端口)-p 9091:9091 \ # 端口映射:宿主機9091 -> 容器9091(監控/健康檢查端口)--privileged \ # 授予容器特權模式(避免部分文件系統權限問題)-v /data/milvus/milvus-config/milvus.yaml:/milvus/configs/milvus.yaml \ # 掛載自定義配置文件-v /data/milvus/milvus-data:/milvus/data \ # 掛載數據目錄(持久化向量數據)-v /data/milvus/milvus-var:/var/lib/milvus \ # 掛載var目錄(內部狀態文件)-v /data/milvus/milvus-logs:/milvus/logs \ # 掛載日志目錄(持久化日志)milvusdb/milvus:v2.4.5 \ # 使用的鏡像:Milvus 2.4.5版本milvus run standalone # 容器啟動命令:以單機模式運行Milvus
關鍵參數說明
- –name milvus245
為容器指定一個唯一名稱(milvus245),后續可通過該名稱操作容器(如 docker stop milvus245),避免使用自動生成的隨機名稱。
端口映射(-p)
19530:Milvus 客戶端 SDK 連接的端口(如 Python 的 pymilvus、Java SDK 等)。
9091:Milvus 監控和健康檢查端口,可通過 http://localhost:9091/healthz 檢查服務狀態。 - –privileged
授予容器特權模式,解決部分環境下因文件系統權限不足導致的啟動失敗(如宿主機目錄權限嚴格時),非必需但建議添加以避免權限問題。 - 數據持久化(-v 掛載)
通過 volume 掛載將容器內的關鍵目錄映射到宿主機,確保容器刪除后數據不丟失:
配置文件:/data/milvus/milvus-config/milvus.yaml(宿主機)→ /milvus/configs/milvus.yaml(容器),用于加載自定義配置。
數據目錄:/milvus/data 存儲向量數據和索引文件,映射到宿主機 /data/milvus/milvus-data。 - 日志目錄:/milvus/logs 存儲運行日志,映射到宿主機 /data/milvus/milvus-logs,方便問題排查。
- 啟動命令(milvus run standalone)
明確指定 Milvus 以單機模式(standalone)運行,這是 v2.4.x 版本的標準啟動方式,確保 tini 初始化進程能正確啟動 Milvus 主服務。
4. 檢查服務狀態
# 檢查健康狀態
curl http://localhost:9091/healthz# 查看版本信息
curl http://localhost:9091/v1/version
5、基礎操作示例
使用 Python 客戶端連接并操作 Milvus:
# 安裝客戶端
# pip install pymilvusfrom pymilvus import (connections,utility,FieldSchema,CollectionSchema,DataType,Collection,
)
import random# 1. 連接到 Milvus
connections.connect(alias="default",host="localhost", # 若在遠程服務器,替換為實際IPport="19530"
)# 2. 定義集合名稱
collection_name = "demo_vectors"# 3. 若集合已存在則刪除
if utility.has_collection(collection_name):utility.drop_collection(collection_name)# 4. 定義集合結構
fields = [FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False),FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384), # 384維向量FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=50) # 分類信息
]schema = CollectionSchema(fields=fields,description="演示用向量集合"
)# 5. 創建集合
collection = Collection(name=collection_name, schema=schema)# 6. 創建索引
index_params = {"index_type": "IVF_FLAT","metric_type": "COSINE", # 使用余弦相似度"params": {"nlist": 128}
}collection.create_index(field_name="embedding",index_params=index_params
)# 7. 插入示例數據
num_entities = 1000
data = [[i for i in range(num_entities)], # id[[random.random() for _ in range(384)] for _ in range(num_entities)], # 向量[f"category_{random.randint(1, 10)}" for _ in range(num_entities)] # 分類
]insert_result = collection.insert(data)
print(f"成功插入 {len(insert_result.primary_keys)} 條數據")# 8. 加載集合到內存
collection.load()# 9. 執行向量搜索
query_vector = [[random.random() for _ in range(384)]] # 生成查詢向量search_params = {"metric_type": "COSINE","params": {"nprobe": 10}
}results = collection.search(data=query_vector,anns_field="embedding",param=search_params,limit=5, # 返回前5個最相似結果output_fields=["category"]
)# 10. 輸出搜索結果
print("\n搜索結果(按相似度排序):")
for hit in results[0]:print(f"ID: {hit.id}, 分類: {hit.entity.get('category')}, 相似度: {1 - hit.distance:.4f}")# 11. 釋放集合
collection.release()# 12. 斷開連接
connections.disconnect("default")
總結
通過以上步驟,即可完成 Milvus 單機版在 Docker 環境下的部署、配置及基礎應用。這種部署方式適合中小規模向量數據的管理與檢索場景,如實驗環境測試、小型 AI 應用開發等。==