
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环境
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设置
参阅文档
==============
官方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
没有评论