如何部署Docker单节点Milvus?

Docker

1 基础知识

1.1 Milvus的简介

– Milvus是鹰科Accipaitridae中的Mivus属的一种猛禽
– Milvus以飞行速度快,视力敏锐、适用性强而著称
– Milvus由于Zilliz开发,是一款开源高性能、高扩展型的向量数据库
– Milvus支持笔记本电脑到大规模分布系统等各种环境中高效运行
– Milvus采用Apache 2.0许可发布,大多数贡献者都是高性能计算(HPC)领域的专家
– Milvus擅长构建大规模系统和优化硬件感知代码
– Milvus核心贡献者来自于Zilliz、ARM、英伟达、AMD、英特尔、Meta、IBM、Saleforce、阿里巴巴和微软等专业人士

1.2 非结构化数据、Embeddings和Milvus

– 非结构化数据(如文本、图像和音频)格式各异,蕴含丰富的潜在语义,因此分析起来极具挑战性。
– 由此Embeddings被用来将非结构化数据转换成能够捕抓其基本特征的数字向量
– 然后这些向量数据存储在向量数据库中,从而实现快速、可扩展的搜索和分析
– Milvus提供强大的数据建模功能,支持将非结构化或多模式数据组织成结构化的Collections。
– Milvus支持多种数据类型,适用于不同的属性模型,报错常见的数字和字符类型、各种向量类型、数组、集合和JSON

1.3 Milvus的部署模式

– Milvus Lite是Python库支持集成到应用程序中,适合Jupyter Notebooks中进行原型开发,或在资源优先的设备运行。
– Milvus Standalone支持单机服务器部署,所有组件都捆绑在Docker镜像中以便部署
– Milvus Distributed支持部署到Kubernetes集群上,采用云原生架构,专为十亿规模甚至更大的场景而设计。
需要注意的是,通过脚本或Docker Compose配置Milvus Standalone默认安装,etcd、MinIO、脉冲星

1.4 Milvus的特点和其他

1.4.1 Milvus的速度优势

– 硬件感知优化,有专门针对硬件架构和平台进行性能优化,包括AVX512、SIMD、GPU和NVMe SSD
– 高级搜索算法,支持多种内存和磁盘索引、搜索算法,包括IVF、HNSW、DiskANN等,与FAISS和HNSWLib等流行实现相比性能高出30%-70%。
– C++搜索引擎,向量数据库性能80%由搜索引擎决定,由于C++高性能、地城优化和高效资源管理。
– 面向列,Milvus是面向列的数量数据库系统,主要优势来自数据访问模式,查询时只读取涉及到的特定字段。

1.4.2 Milvus的扩展性势

– Milvus在2022年支持十亿向量,2023年扩展到数百亿级。
– Milvus为300多家大型企业的大规模提供支持,包括Salsforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflection等。
– Milvus的云原生和高度解耦的系统架构确保了系统支持随着数据增长而不断扩展。
– Milvuse本身完全无状态,因此借助Kubernetes或公共云轻松扩展。
– Milvuse各个组件有着良好的解耦,关键任务搜索、数据插入和索引、压缩被设计为易于并行化的流程。

1.4.3 Milvus支持的搜索类型

– ANN搜索,查找最近查询向量的前K个向量。
– 过滤搜索,指定过滤条件执行ANN搜索
– 范围搜索,查找查询向量指定半径范围内的向量。
– 混合搜索,基于多个向量场进行ANN搜索。
– 全文搜索,基于BM25的全文搜索
– Rerankers,根据附加标准或辅助算法调整搜索结果顺序,完善初始ANN搜索结果。
– 获取,根据主键检索数据
– 查询,使用特定表达式检索时数据。

1.4.4 应用程序接口和SDK

– RESTful API(官方)
– PyMilvus(Python SDK)官方
– Go SDK(官方)
– Java SDK(官方)
– Node.js(JavaScript) SDK(官方)
– C#(微软提供)
– C++ SDK(开发中)
– Rust SDK(开发中)

1.4.5 高级数据类型

– 稀疏向量
– 二进制向量
– JSON支持
– 数组支持
– 文本(开发中)
– 地理定位(开发中)

1.5 软硬件要求

1.5.1 硬件要求

– CPU,至低英特尔第二代酷睿处理器或更高版本(建议单节点4核以上,集群8核以上)
– CPU指令集,SSE4.2、AVX、AVX2、AVX-512
– 内存,至低单机8G,集群32G(建议单机16G,集群128G)
– 硬盘,SATA 3.0固态硬盘或更高(建议NVMe SSD或更高)

1.5.2 软件要求

– macOS 10.14或更高版本,Docker桌面
– Linux Docker 19.03或更高版本
– 启用WSL2的Windows Docker桌面

2 最佳实践

2.1 部署Docker环境

如何部署Oracle 9.x Docker 环境?

Hostname: milvus.cmdschool.org
OS = Oracle Linux Server 9.x
IP = any

2.2 部署Milvus环境

2.2.1 准备Milvus配置文件

mkdir /data/docker/milvus
cd /data/docker/milvus
wget https://github.com/milvus-io/milvus/releases/download/v2.5.14/milvus-standalone-docker-compose.yml -O docker-compose.yml

如果以上链接过期或者无网络下载,你需要手动创建该文件,

vim /data/docker/milvus/docker-compose.yml

可见如下配置,请注意加粗部分是笔者根据实际环境需求做出的端口修改,

version: '3.5'

services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.18
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2024-05-28T17-19-04Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9701:9001"
      - "9700:9000"
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.14
    command: ["milvus", "run", "standalone"]
    security_opt:
      - seccomp:unconfined
    environment:
      MINIO_REGION: us-east-1
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - "etcd"
      - "minio"

networks:
  default:
    name: milvus

根据配置文件的需求,你需要准备如下目录,

mkdir -p /data/docker/milvus/volumes/etcd
mkdir -p /data/docker/milvus/volumes/minio
mkdir -p /data/docker/milvus/volumes/milvus

2.2.2 准备Milvus镜像(可选)

cd /data/docker/images/
docker pull quay.io/coreos/etcd:v3.5.18
docker save quay.io/coreos/etcd:v3.5.18 -o quay.io-coreos-etcd:v3.5.18.tar
docker pull minio/minio:RELEASE.2024-05-28T17-19-04Z
docker save minio/minio:RELEASE.2024-05-28T17-19-04Z -o  minio-minio:RELEASE.2024-05-28T17-19-04Z.tar
docker pull milvusdb/milvus:v2.5.14
docker save milvusdb/milvus:v2.5.14 -o  milvusdb-milvus:v2.5.14.tar

操作适用于无网络的机器,软件包需要手动载入,

cd /data/docker/images/
docker load -i quay.io-coreos-etcd:v3.5.18.tar
docker load -i minio-minio:RELEASE.2024-05-28T17-19-04Z.tar
docker load -i milvusdb-milvus:v2.5.14.tar

2.2.3 测试Milvus运行

cd /data/docker/milvus
docker compose up -d

2.2.4 测试Milvus

测试MinIO,
http://milvus.cmdschool.org:9701/
user: admin
password: adminpwd

Milvus Web UI,
http://milvus.cmdschool.org:9091/webui

2.2.5 创建服务控制脚本

vim /etc/systemd/system/milvus.service

加入如下配置,

[Unit]
Description=Milvus Docker Compose Service
Requires=docker.service
After=docker.service

[Service]
Type=simple
WorkingDirectory=/data/docker/milvus
ExecStart=/usr/bin/docker compose up
ExecStop=/usr/bin/docker compose down
User=root
Group=docker

[Install]
WantedBy=multi-user.target

脚本创建后,你需要执行如下命令重载服务,

systemctl daemon-reload

然后,你可以使用如下命令启动并设置服务自动启动,

systemctl start milvus.service
systemctl enable milvus.service

另外如下配置建议你做,但可选,

mkdir /etc/milvus
ln -s /data/docker/milvus/docker-compose.yml /etc/milvus/

2.3 其他的Milvus设置

如何实现Milvus的源代码存盘?

参阅文档
==============

官方github
———–
https://hub.docker.com/r/milvusdb/milvus/tags

官方首页
——–
https://milvus.io/docs/zh

用户手册
———-
https://milvus.io/docs/zh/v2.5.x/manage_databases.md

错误修复
————
https://github.com/milvus-io/milvus/issues/33967

设置root密码
————
https://github.com/milvus-io/milvus/issues/33058
https://milvus.io/docs/v2.3.x/authenticate.md?tab=docker

没有评论

发表回复

Docker
如何启用Docker Milvus的root认证?

1 前言 一个问题,一篇文章,一出故事。 笔者今天部署好Milvus后,发现root登陆无需密码,于 …

Docker
如何实现Docker Milvus源代码存盘?

1 前言 一个问题,一篇文章,一出故事。 笔者今天部署好Milvus后,发现修改他的配置文件后无法保 …

Docker
如何部署Docker单机Portainer管理界面?

1 基础知识 1.1 Portainer的简介 Portainer是一个轻量级的管理UI,可让你轻松 …