Link Search Menu Expand Document Documentation Menu

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
  }
}

创建工作负载组时,请确保单个资源(例如 cpumemory)的资源限制总和不超过 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_groupcpu 资源类型统计信息。
memory workload_groupmemory 资源类型统计信息。

资源类型统计

字段名 描述
current_usage 根据上次监控线程运行,给定节点上 workload_group 的资源使用情况。此值根据 wlm.workload_group.enforcement_interval 进行更新。
cancellations 因达到取消阈值而导致的取消数量。
rejections 因达到取消阈值而导致的拒绝数量。

相关文章