
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 Milvus的组件
1.5.1 etcd
– etcd用于存储Milvus的元数据和服务发现
1.5.2 metastore
– metastore用于存储元数据
1.5.3 tikv
– 用于存储TkVK的相关配置
– 启用TkVK作为元存储时,仍需使用etcd来发现服务
– 当元数据大小需要更好的横向扩展时,TiKV更具优越性
1.5.4 localStorage
– 在搜索或查询过程中存储向量数据的本地路径,避免重复访问MiniIO或S3服务
– 使用Milvus一段时间后更改此参数将影响对旧数据的访问
– 建议在首次启动Milvus之前更改此参数
1.5.5 minio
– MinIO/S3/GCS 或其他支持 S3 API 的服务的相关配置
– API 负责 Milvus 的数据持久性
1.5.6 mq
– Milvus 支持四种MQ
– rocksmq(基于 RockDB)、natsmq(嵌入式 nats-server)、Pulsar 和 Kafka
– 通过设置mq.type字段来更改你的MQ
1.5.7 pulsar
– pulsar用于管理Milvus最近突变操作的日志输出流式日志
– pulsar同时提供日志发布-订阅服务
1.5.8 rocksmq
– 如果要启用 kafka,需要对pulsar配置进行注释
1.6 软硬件要求
1.6.1 硬件要求
– CPU,至低英特尔第二代酷睿处理器或更高版本(建议单节点4核以上,集群8核以上)
– CPU指令集,SSE4.2、AVX、AVX2、AVX-512
– 内存,至低单机8G,集群32G(建议单机16G,集群128G)
– 硬盘,SATA 3.0固态硬盘或更高(建议NVMe SSD或更高)
1.6.2 软件要求
– macOS 10.14或更高版本,Docker桌面
– Linux Docker 19.03或更高版本
– 启用WSL2的Windows Docker桌面
2 最佳实践
2.1 环境信息
OS = Oracle Linux 9.x x86_64
IP Address = 10.168.0.95
Hostname = milvus.cmdschool.org
2.2 安装软件包
2.2.1 下载软件包
wget https://github.com/milvus-io/milvus/releases/download/v2.6.0/milvus_2.6.0-1_amd64.rpm
以上只是演示,如果无法下载或者需要其他版本,请从如下连接下载,
https://github.com/milvus-io/milvus/releases/tag/v2.6.0
2.2.2 安装软件包
dnf install -y milvus_2.6.0-1_amd64.rpm
注:安装完成后严禁先于设置root密码前启动服务,因为导致root设置失败。
2.3 配置身份验证
2.3.1 启用身份验证
cp /etc/milvus/configs/milvus.yaml /etc/milvus/configs/milvus.yaml.default vim /etc/milvus/configs/milvus.yaml
修改如下配置,
common: #... security: authorizationEnabled: true superUsers: root defaultRootPassword: rootpwd #...
重启服务使配置生效,
systemctl start milvus systemctl enable milvus
服务启用后,你可以使用如下命令查看服务的倾听端口,
ss -antp | grep milvus | grep LISTEN
可见如下显示,
LISTEN 0 4096 127.0.0.1:2380 0.0.0.0:* users:(("milvus",pid=1852,fd=9)) LISTEN 0 4096 *:21123 *:* users:(("milvus",pid=1852,fd=21)) LISTEN 0 4096 *:9091 *:* users:(("milvus",pid=1852,fd=17)) LISTEN 0 4096 *:21124 *:* users:(("milvus",pid=1852,fd=22)) LISTEN 0 4096 *:19529 *:* users:(("milvus",pid=1852,fd=24)) LISTEN 0 4096 *:19530 *:* users:(("milvus",pid=1852,fd=23)) LISTEN 0 4096 *:2379 *:* users:(("milvus",pid=1852,fd=11)) LISTEN 0 4096 *:53100 *:* users:(("milvus",pid=1852,fd=20)) LISTEN 0 4096 *:22222 *:* users:(("milvus",pid=1852,fd=30))
根据需求,我们开放必要的服务端口,
firewall-cmd --permanent --add-port 9091/tcp --add-port 19530/tcp --add-port 53100/tcp firewall-cmd --reload firewall-cmd --list-all
2.3.2 测试用户登陆
例外,如下链接可查看服务状态,
http://milvus.cmdschool.org:9091/webui/
2.4 配置日志
2.4.1 修改日志配置文件
cp /etc/milvus/configs/glog.conf /etc/milvus/configs/glog.conf.default vim /etc/milvus/configs/glog.conf
参数修改如下,
# if true, only log to stdout --logtostdout=false --logtostderr=false --alsologtostderr=false # `INFO``, ``WARNING``, ``ERROR``, and ``FATAL`` are 0, 1, 2, and 3 --minloglevel=0 --log_dir=/var/log/milvus/ # using vlog to implement debug and trace log # if set vmodule to 5, open debug level # if set vmodule to 6, open trace level # default 4, not open debug and trace --v=4 # MB --max_log_size=200 --stop_logging_if_full_disk=true
根据配置文件的要求,你需要执行如下命令,
mkdir -p /var/log/milvus
2.4.2 重启服务使配置生效
systemctl restart milvus
然后,你可以使用以下命令确认是否产生日志,
ls /var/log/milvus
2.5 修改存储目录
2.5.1 停止服务
systemctl stop milvus
2.5.2 修改存储目录位置
mkdir -p /data mv /var/lib/milvus /data/milvus ln -s /data/milvus /var/lib/milvus
2.5.3 启动服务
systemctl start milvus
参阅文档
===============
安装文档
————-
https://milvus.io/docs/zh/install_standalone-binary.md
https://github.com/milvus-io/milvus/releases/tag/v2.6.0
修改密码文档
————–
https://github.com/milvus-io/milvus/discussions/22736
https://milvus.io/docs/authenticate.md
配置参数
———
https://milvus.io/docs/system_configuration.md
Milvus的组件
———-
https://milvus.io/docs/zh/system_configuration.md
没有评论