2.18 版引入
工作负载管理
工作负载管理允许您对搜索流量进行分组并隔离网络资源,从而防止特定请求过度使用网络资源。它提供以下好处:
-
租户级别的准入控制和反应式查询管理。当资源使用超出配置限制时,它会自动识别并取消高需求查询,确保资源公平分配。
-
集群内搜索工作负载的租户级隔离,在节点级别运行。
安装工作负载管理
要安装工作负载管理,请使用以下命令:
./bin/opensearch-plugin install workload-management
工作负载组
工作负载组是具有已定义资源限制的任务的逻辑分组。系统管理员可以使用工作负载管理 API 动态管理工作负载组。这些工作负载组可用于创建具有资源限制的搜索请求。
权限
只有具有管理员权限的用户才能使用工作负载管理 API 创建和更新工作负载组。
操作模式
以下操作模式决定了工作负载组的操作级别:
-
禁用模式:工作负载管理已禁用。
-
启用模式:工作负载管理已启用,一旦达到工作负载组的配置阈值,将取消并拒绝查询。
-
仅监控模式(默认):工作负载管理将监控任务,但不会取消或拒绝任何查询。
请求示例
以下示例请求添加了一个名为 analytics
的工作负载组:
PUT _wlm/workload_group
{
“name”: “analytics”,
“resiliency_mode”: “enforced”,
“resource_limits”: {
“cpu”: 0.4,
“memory”: 0.2
}
}
创建工作负载组时,请确保单个资源(例如 cpu
或 memory
)的资源限制总和不超过 1
。
示例响应
OpenSearch 返回设置的资源限制和工作负载组的 _id
:
{
"_id":"preXpc67RbKKeCyka72_Gw",
"name":"analytics",
"resiliency_mode":"enforced",
"resource_limits":{
"cpu":0.4,
"memory":0.2
},
"updated_at":1726270184642
}
使用 workloadGroupID
您可以将查询请求与 workloadGroupID
关联,以在工作负载组定义的限制内管理和分配资源。通过使用此 ID,请求路由和跟踪与工作负载组关联,从而确保维护资源配额和任务限制。
以下示例查询使用 workloadGroupID
来确保查询不超过该工作负载组的资源限制:
GET testindex/_search
Host: localhost:9200
Content-Type: application/json
workloadGroupId: preXpc67RbKKeCyka72_Gw
{
"query": {
"match": {
"field_name": "value"
}
}
}
工作负载管理设置
以下设置可用于使用 _cluster/settings
API 自定义工作负载管理。
设置名称 | 描述 |
---|---|
wlm.workload_group.duress_streak | 确定节点压力阈值。一旦达到该阈值,节点将被标记为 in duress (受压)。 |
wlm.workload_group.enforcement_interval | 定义监控间隔。 |
wlm.workload_group.mode | 定义操作模式。 |
wlm.workload_group.node.memory_rejection_threshold | 定义工作负载组级别 memory 阈值。当达到阈值时,请求将被拒绝。 |
wlm.workload_group.node.cpu_rejection_threshold | 定义工作负载组级别 cpu 阈值。当达到阈值时,请求将被拒绝。 |
wlm.workload_group.node.memory_cancellation_threshold | 控制当达到 memory 阈值时节点是否被视为处于受压状态。路由到受压节点的请求将被取消。 |
wlm.workload_group.node.cpu_cancellation_threshold | 控制当达到 cpu 阈值时节点是否被视为处于受压状态。路由到受压节点的请求将被取消。 |
设置拒绝和取消阈值时,请记住资源的拒绝阈值应始终低于取消阈值。
工作负载管理统计 API
工作负载管理统计 API 使用以下方法返回工作负载组的度量指标:
GET _wlm/stats
示例响应
{
“_nodes”: {
“total”: 1,
“successful”: 1,
“failed”: 0
},
“cluster_name”: “XXXXXXYYYYYYYY”,
“A3L9EfBIQf2anrrUhh_goA”: {
“workload_groups”: {
“16YGxFlPRdqIO7K4EACJlw”: {
“total_completions”: 33570,
“total_rejections”: 0,
“total_cancellations”: 0,
“cpu”: {
“current_usage”: 0.03319935314357281,
“cancellations”: 0,
“rejections”: 0
},
“memory”: {
“current_usage”: 0.002306486276211217,
“cancellations”: 0,
“rejections”: 0
}
},
“DEFAULT_WORKLOAD_GROUP”: {
“total_completions”: 42572,
“total_rejections”: 0,
“total_cancellations”: 0,
“cpu”: {
“current_usage”: 0,
“cancellations”: 0,
“rejections”: 0
},
“memory”: {
“current_usage”: 0,
“cancellations”: 0,
“rejections”: 0
}
}
}
}
}
响应正文字段
字段名 | 描述 |
---|---|
total_completions | 给定节点上 workload_group 中请求完成的总数。这包括所有分片级别和协调器级别请求。 |
total_rejections | 给定节点上 workload_group 中请求拒绝的总数。这包括所有分片级别和协调器级别请求。 |
total_cancellations | 给定节点上 workload_group 中取消的总数。这包括所有分片级别和协调器级别请求。 |
cpu | workload_group 的 cpu 资源类型统计信息。 |
memory | workload_group 的 memory 资源类型统计信息。 |
资源类型统计
字段名 | 描述 |
---|---|
current_usage | 根据上次监控线程运行,给定节点上 workload_group 的资源使用情况。此值根据 wlm.workload_group.enforcement_interval 进行更新。 |
cancellations | 因达到取消阈值而导致的取消数量。 |
rejections | 因达到取消阈值而导致的拒绝数量。 |