红线测试
--redline-test
命令使 OpenSearch Benchmark 能够自动确定您的 OpenSearch 集群在负载增加的情况下可以处理的最大请求吞吐量。它根据实时集群性能动态调整活动客户端的数量,有助于容量规划和识别性能退步。
当使用 --redline-test
标志时,OpenSearch Benchmark 会执行以下步骤:
- 客户端初始化:OpenSearch Benchmark 初始化大量客户端(默认:1,000)。您可以使用可选的
--redline-max-clients=<int>
标志覆盖此设置。 - 反馈机制:OpenSearch Benchmark 逐步增加活动客户端的数量。一个 FeedbackActor 会监控实时请求失败情况并相应地调整客户端计数。
- 共享状态协调:OpenSearch Benchmark 使用 Python 的多进程库来管理共享字典和队列,以实现进程间通信
- 工作器创建客户端状态映射并与 WorkerCoordinatorActor 共享。
- WorkerCoordinatorActor 聚合客户端状态并将其转发给 FeedbackActor。
- FeedbackActor 增加客户端数量,直到检测到请求错误,然后暂停客户端,等待 30 秒,再恢复测试。
以下图片提供了红线测试架构的视觉概览。
用法
要执行红线测试,请使用带有 --redline-test
标志的 execute-test
命令和定时测试程序。
此测试程序使用 keyword-terms 操作定义了一个定时工作负载。它分两个阶段运行:
- 预热阶段:测试以预热期(
warmup-time-period
)开始,以在测量开始前稳定性能指标。这有助于避免因冷启动效应而使结果失真。 - 测量阶段:在
time-period
期间,OpenSearch Benchmark 使用指定数量的客户端以target-throughput
(每秒请求数)发送请求。红线测试逻辑将从此基线扩展活动客户端的数量,以确定集群的最大可持续负载。
以下示例定时测试程序用作红线测试的输入,红线测试随后动态调整客户端负载,以找到您的集群在没有错误的情况下可以处理的最大请求吞吐量
{
"name": "timed-mode-test-procedure",
"schedule": [
{
"operation": "keyword-terms",
"warmup-time-period": {{ warmup_time | default(300) | tojson }},
"time-period": {{ time_period | default(900) | tojson }},
"target-throughput": {{ target_throughput | default(20) | tojson }},
"clients": {{ search_clients | default(20) }}
}
]
}
运行以下命令,使用定时测试程序对您的 OpenSearch 集群启动红线测试:
opensearch-benchmark execute-test \
--pipeline=benchmark-only \
--target-hosts=<your-opensearch-cluster> \
--workload=<workload> \
--test-procedure=timed-mode-test-procedure \
--redline-test
基于延迟或 CPU 的反馈
OpenSearch Benchmark 支持每个请求的 timeout
值,如果请求超出指定持续时间,则会取消该请求。您可以使用 --client-options=timeout:<int>
标志设置此值。默认值为 10 秒。
您可以调整此值以定义 OpenSearch Benchmark 在红线测试期间应容忍的最大请求延迟。例如,要确定您的集群在不超过 15 秒延迟的情况下可以处理的最高负载,请将客户端选项中的超时设置为 15
。
红线测试除了支持延迟和请求错误监控外,还支持基于 CPU 的反馈。这有助于防止集群超出安全利用率限制。
要求
要在红线测试期间使用基于 CPU 的反馈,您的设置必须满足以下要求:
-
必须配置指标存储。使用内存存储会导致以下错误:
[ERROR] Cannot execute-test. Error in worker_coordinator (CPU-based feedback requires a metrics store. You are using an in-memory metrics store)
--redline-cpu-max-usage
标志是必需的。此标志设置测试期间每个节点允许的最大 CPU 使用率(以百分比表示)。- 当基于 CPU 的反馈处于活动状态时,
node-stats
遥测设备会自动启用。
行为
红线 CPU 反馈循环具有以下行为:
FeedbackActor
以固定间隔查询指标存储,以检索每个节点的平均 CPU 使用率。- 如果任何节点超出由
--redline-cpu-max-usage
设置的阈值,系统将启动缩容。 - 缩容后,actor 会等待一段时间,然后才会尝试再次扩容。
结果
在红线测试期间,OpenSearch Benchmark 提供详细日志,其中包含测试期间的扩展决策和请求失败。在红线测试结束时,OpenSearch Benchmark 会记录您的集群在没有请求错误的情况下支持的最大客户端数量。
以下示例日志输出表明红线测试检测到 keyword-terms 操作的错误率为 15%
,并确定在发生错误之前集群的最大稳定客户端负载为 410
。
[WARNING] Error rate is 15.0 for operation 'keyword-terms'. Please check the logs.
Redline test finished. Maximum stable client number reached: 410
配置提示和测试行为
使用以下可选命令标志可以更好地理解和自定义红线测试执行:
--redline-scale-step
:指定在每次扩展迭代中要取消暂停的客户端数量。--redline-scaledown-percentage
:指定在发生错误时要暂停的客户端百分比。--redline-post-scaledown-sleep
:指定反馈 actor 在缩容后尝试扩容前等待的秒数。--redline-max-clients
:指定红线测试期间允许的最大客户端数量。如果未设置,OpenSearch Benchmark 将默认为测试程序中定义的客户端数量。
对于基于 CPU 的反馈
使用以下附加标志来配置基于 CPU 的反馈:
--redline-cpu-max-usage
:(必需)在触发缩容之前,每个节点允许的最大 CPU 负载(以百分比表示)。--redline-cpu-window-seconds
:计算每个节点 CPU 使用率平均值的持续时间(秒)。默认值为 30 秒。--redline-cpu-check-interval
:CPU 使用率检查之间的时间间隔(秒)。默认值为 30 秒。