Milvus 依赖于 MinIO、Kafka、Pulsar 和 etcd 等各种依赖项。扩展这些组件可以增强 Milvus 对不同需求的适应性。
扩展 MinIO
增加每个 MinIO pod 的资源
MinIO 是 Milvus 使用的对象存储系统,可以为每个 pod 增加 CPU 和内存资源。
# new-values.yaml
minio:
resources:
limits:
cpu: 2
memory: 8Gi
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
您还可以通过手动更改每个 MioIO Persistent Volume Claim (PVC) 的spec.resources.requests.storage
值来增加 MioIO 集群的磁盘容量。请注意,您的默认存储类别应允许卷扩展。
添加额外的 MinIO 服务器池(推荐)
建议您为 Milvus 实例添加一个额外的 MinIO 服务器池。
# new-values.yam;
minio:
zones: 2
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
这将为你的 MinIO 集群添加一个额外的服务器池,允许 Milvus 根据每个服务器池的可用磁盘容量写入 MinIO 服务器池。例如,如果一个由三个服务器池组成的群集共有 10 TiB 可用空间,各服务器池的分配情况如下:
可用空间 | 写入可能性 | |
---|---|---|
池 A | 3 TiB | 30% (3/10) |
资源库 B | 2 TiB | 20% (2/10) |
C 组 | 5 个 TiB | 50% (5/10) |
MinIO 不会自动重新平衡新服务器池中的对象。如有需要,您可以通过mc admin rebalance
手动启动重新平衡程序。
卡夫卡
增加每个 Kafka 代理 pod 的资源
通过调整每个 Kafka 代理 pod 的 CPU 和内存资源来提高 Kafka 代理的容量。
# new-values.yaml
kafka:
resources:
limits:
cpu: 2
memory: 12Gi
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
您还可以通过手动更改每个 Kafka Persistent Volume Claim (PVC) 的spec.resources.requests.storage
值来增加 Kafka 集群的磁盘容量。确保默认存储类允许卷扩展。
添加额外的 Kafka 代理池(推荐)
建议您为 Milvus 实例添加一个额外的 Kafka 服务器池。
# new-values.yaml
kafka:
replicaCount: 4
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
这将为你的 Kafka 集群添加一个额外的代理。
Kafka 不会自动在所有代理之间重新平衡主题。如果需要,请在登录每个 Kafka 代理 pod 后使用bin/kafka-reassign-partitions.sh
手动重新平衡所有 Kafka 代理的主题/分区。
脉冲星
Pulsar 分离了计算和存储。您可以独立增加 Pulsar 代理(计算)和 Pulsar 账本(存储)的容量。
增加每个 Pulsar 代理 pod 的资源
# new-values.yaml
pulsar:
broker:
resources:
limits:
cpu: 4
memory: 16Gi
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
增加每个 Pulsar 博彩机 pod 的资源
# new-values.yaml
pulsar:
bookkeeper:
resources:
limits:
cpu: 4
memory: 16Gi
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
您还可以通过手动更改每个 Pulsar 代理的持久卷索赔 (PVC) 的spec.resources.requests.storage
值来增加 Pulsar 集群的磁盘容量。请注意,默认存储类别应允许卷扩展。
Pulsar 托管 pod 有两种存储类型:journal
和legers
。对于journal
类型的存储,可考虑使用ssd
或gp3
作为存储类。下面是一个为 Pulsar 日志指定存储类的示例。
pulsar:
bookkeeper:
volumes:
journal:
size: 20Gi
storageClassName: gp3
添加额外的 Pulsar 代理 pod
# new-values.yaml
pulsar:
broker:
replicaCount: 3
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
添加一个额外的 Pulsar bookie pod(推荐)
# new-values.yaml
pulsar:
bookkeeper:
replicaCount: 3
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
etcd
增加每个 etcd pod 的资源(推荐)
# new-values.yaml
etcd:
resources:
limits:
cpu: 2
memory: 8Gi
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
增加额外的 etcd pod
etcd pod 的总数应为奇数。
# new-values.yaml
etcd:
replicaCount: 5
保存文件后,使用以下命令应用更改:
helm upgrade <milvus-release> --reuse-values -f new-values.yaml milvus/milvus
扩展 Milvus 集群
Milvus 支持组件的水平扩展。这意味着你可以根据自己的需要增加或减少每种类型的工作节点数量。
本主题介绍如何在 Milvus 集群中进行扩展和缩放。我们假定您在扩展之前已经安装了 Milvus 群集。另外,我们建议您在开始之前先熟悉一下Milvus 的架构。
本教程以扩展三个查询节点为例。要扩展其他类型的节点,请在命令行中将queryNode
替换为相应的节点类型。
有关如何使用 Milvus Operator 扩展群集的信息,请参阅使用 Milvus Operator 扩展群集。
什么是水平扩展?
水平扩展包括向外扩展和向内扩展。
向外扩展
向外扩展是指增加群集中的节点数量。与向上扩展不同,向外扩展不需要为群集中的一个节点分配更多资源。相反,向外扩展是通过添加更多节点来横向扩展群集。
扩展
扩展
根据Milvus 架构,无状态工作节点包括查询节点、数据节点、索引节点和代理。因此,你可以根据业务需求和应用场景来扩展这些类型的节点。你可以手动或自动扩展 Milvus 集群。
一般来说,如果您创建的 Milvus 集群使用率过高,您就需要对其进行缩减。以下是一些可能需要缩减 Milvus 集群的典型情况:
- CPU 和内存利用率在一段时间内居高不下。
- 查询吞吐量变高。
- 需要更高的索引速度。
- 需要处理大量大型数据集。
- 需要确保 Milvus 服务的高可用性。
向内扩展
向内扩展是指减少集群中的节点数量。一般来说,如果您创建的 Milvus 集群利用率不足,您就需要对其进行扩展。下面是一些需要对 Milvus 集群进行扩展的典型情况:
- 一段时间内 CPU 和内存利用率较低。
- 查询吞吐量变低。
- 不需要更高的索引速度。
- 要处理的数据集规模较小。
我们不建议大幅减少工作节点的数量。例如,如果集群中有五个数据节点,我们建议每次减少一个数据节点,以确保服务可用性。如果第一次尝试缩放后服务可用,则可以继续进一步减少数据节点的数量。
前提条件
运行kubectl get pods
,获取所创建的 Milvus 集群中的组件及其工作状态列表。
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 1m
my-release-milvus-datacoord-7b5d84d8c6-rzjml 1/1 Running 0 1m
my-release-milvus-datanode-665d4586b9-525pm 1/1 Running 0 1m
my-release-milvus-indexcoord-9669d5989-kr5cm 1/1 Running 0 1m
my-release-milvus-indexnode-b89cc5756-xbpbn 1/1 Running 0 1m
my-release-milvus-proxy-7cbcc8ffbc-4jn8d 1/1 Running 0 1m
my-release-milvus-pulsar-6b9754c64d-4tg4m 1/1 Running 0 1m
my-release-milvus-querycoord-75f6c789f8-j28bg 1/1 Running 0 1m
my-release-milvus-querynode-7c7779c6f8-pnjzh 1/1 Running 0 1m
my-release-milvus-rootcoord-75585dc57b-cjh87 1/1 Running 0 1m
my-release-minio-5564fbbddc-9sbgv 1/1 Running 0 1m
Milvus 只支持添加工作节点,不支持添加协调器组件。
扩展 Milvus 集群
您可以手动或自动扩展 Milvus 群集。关于使用水平 Pod Autoscaling (HPA) 进行自动扩展,请参阅为 Milvus 配置 HPA。如果启用了自动缩放,当 CPU 和内存资源消耗达到你设定的值时,Milvus 集群将自动缩小或扩大。
目前,Milvus 2.1.0 只支持手动缩进和缩出。
向外扩展
运行helm upgrade my-release milvus/milvus --set queryNode.replicas=3 --reuse-values
手动缩减查询节点。
如果成功,将在查询节点上添加三个正在运行的 pod,如下图所示。
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 2m
my-release-milvus-datacoord-7b5d84d8c6-rzjml 1/1 Running 0 2m
my-release-milvus-datanode-665d4586b9-525pm 1/1 Running 0 2m
my-release-milvus-indexcoord-9669d5989-kr5cm 1/1 Running 0 2m
my-release-milvus-indexnode-b89cc5756-xbpbn 1/1 Running 0 2m
my-release-milvus-proxy-7cbcc8ffbc-4jn8d 1/1 Running 0 2m
my-release-milvus-pulsar-6b9754c64d-4tg4m 1/1 Running 0 2m
my-release-milvus-querycoord-75f6c789f8-j28bg 1/1 Running 0 2m
my-release-milvus-querynode-7c7779c6f8-czq9f 1/1 Running 0 5s
my-release-milvus-querynode-7c7779c6f8-jcdcn 1/1 Running 0 5s
my-release-milvus-querynode-7c7779c6f8-pnjzh 1/1 Running 0 2m
my-release-milvus-rootcoord-75585dc57b-cjh87 1/1 Running 0 2m
my-release-minio-5564fbbddc-9sbgv 1/1 Running 0 2m
向内扩展
运行helm upgrade my-release milvus/milvus --set queryNode.replicas=1 --reuse-values
扩展查询节点。
如果成功,查询节点上的三个运行 pod 将缩减为一个,如下例所示。
NAME READY STATUS RESTARTS AGE
my-release-etcd-0 1/1 Running 0 2m
my-release-milvus-datacoord-7b5d84d8c6-rzjml 1/1 Running 0 2m
my-release-milvus-datanode-665d4586b9-525pm 1/1 Running 0 2m
my-release-milvus-indexcoord-9669d5989-kr5cm 1/1 Running 0 2m
my-release-milvus-indexnode-b89cc5756-xbpbn 1/1 Running 0 2m
my-release-milvus-proxy-7cbcc8ffbc-4jn8d 1/1 Running 0 2m
my-release-milvus-pulsar-6b9754c64d-4tg4m 1/1 Running 0 2m
my-release-milvus-querycoord-75f6c789f8-j28bg 1/1 Running 0 2m
my-release-milvus-querynode-7c7779c6f8-pnjzh 1/1 Running 0 2m
my-release-milvus-rootcoord-75585dc57b-cjh87 1/1 Running 0 2m
my-release-minio-5564fbbddc-9sbgv 1/1 Running 0 2m