更新时间:2023-06-20 GMT+08:00

操作步骤

大查询隔离特性和全局超时特性默认关闭,用户可根据需要实时配置,配置后立即生效。以下是详细的配置方法:

  1. 登录云搜索服务管理控制台。
  2. “集群管理”页面,选择待配置大查询隔离的集群,单击操作列“Kibana”,登录Kibana界面。
  3. 在Kibana的左侧导航中选择“Dev Tools”,执行如下命令开启大查询隔离和全局超时的特性开关。
    PUT _cluster/settings
    {
      "persistent": {
        "search.isolator.enabled": true,
        "search.isolator.time.enabled": true
      }
    }

    以上两个开关是独立功能,分别具有以下独立的参数配置:

    表1 大查询隔离和全局超时的参数配置

    特性开关

    配置参数

    参数说明

    search.isolator.enabled

    search.isolator.memory.task.limit

    search.isolator.time.management

    单个分片查询任务被定义为大查询任务的阈值。

    search.isolator.memory.pool.limit

    search.isolator.memory.heap.limit

    search.isolator.count.limit

    触发隔离池内查询任务中断的阈值。

    说明:

    参数“search.isolator.memory.heap.limit”定义了节点实际堆内存的使用限制,包括写入和查询等操作,超过限制时将选取隔离池内的大查询任务进行中断。

    search.isolator.strategy

    search.isolator.strategy.ratio

    中断隔离池中某一条查询任务的选取策略。

    search.isolator.time.enabled

    search.isolator.time.limit

    全局查询任务超时设置。

  4. 大查询隔离和全局超时的分别具有独立的参数配置,可以根据实际场景执行不同的命令进行配置。
    • 单个分片查询任务被定义为大查询任务的阈值。
      PUT _cluster/settings
      {
        "persistent": {
          "search.isolator.memory.task.limit": "50MB",
          "search.isolator.time.management": "10s"
        }
      }
      表2 参数说明

      参数名

      数据类型

      说明

      search.isolator.memory.task.limit

      String

      查询任务用于聚合等操作向节点申请的大内存,申请内存超过此阈值将进行隔离观察。

      取值范围:0b~节点最大堆内存

      默认值:50MB

      说明:

      可以通过如下命令查询集群堆内存使用情况和最大值。

      GET _cat/nodes?&h=id,ip,port,r,ramPercent,ramCurrent,heapMax,heapCurrent

      search.isolator.time.management

      String

      查询任务创建至今的时长(即开始使用集群资源进行查询),超过阈值将被隔离观察。

      取值范围:≥ 0ms

      默认值:10s

    • 触发隔离池内查询任务中断的阈值。
      PUT _cluster/settings
      {
        "persistent": {
          "search.isolator.memory.pool.limit": "50%",
          "search.isolator.memory.heap.limit": "90%",
          "search.isolator.count.limit": 1000
        }
      }
      表3 参数说明

      参数名

      数据类型

      说明

      search.isolator.memory.pool.limit

      String

      当前节点最大堆内存百分比,当隔离池所有大查询任务申请的内存超过此阈值将触发中断控制程序,取消执行隔离池其中一条大查询任务。

      取值范围:0.0~100.0%

      默认值:50%

      search.isolator.memory.heap.limit

      String

      当前节点堆内存的实际使用阈值,当节点堆内存使用超过阈值百分比时触发中断控制程序,取消执行隔离池其中一条大查询任务。

      取值范围:0.0~100.0%

      默认值:90%

      search.isolator.count.limit

      Integer

      当前节点隔离池的大查询任务数阈值,被观察的查询任务数超过此阈值将触发中断控制程序,不再接受新的大查询。若继续触发大查询请求,则直接取消该请求。

      取值范围:10~50000

      默认值:1000

      根据业务设置“search.isolator.memory.pool.limit”“search.isolator.count.limit”参数时,可结合“search.isolator.memory.task.limit”“search.isolator.time.management”两个参数控制查询任务进入到隔离池的数量。

    • 中断隔离池中某一条查询任务的选取策略。
      PUT _cluster/settings
      {
        "persistent": {
          "search.isolator.strategy": "fair",
          "search.isolator.strategy.ratio": "0.5%"
        }
      }

      参数名

      数据类型

      说明

      search.isolator.strategy

      String

      触发中断控制程序时大查询选取的策略。根据策略选取一条查询进行中断。

      说明:

      大查询隔离池每秒检查一次,直至堆内存下降到安全范围。

      取值范围:fair、mem-first、time-first
      • mem-first策略是指触发中断时,选取隔离池中堆内存使用最大的一条查询任务进行中断。
      • time-first策略是指触发中断时,选取隔离池中已运行时间最长的一条查询任务进行中断。
      • fair策略是综合考虑内存和时间两种因素,若分片查询的堆内存申请大小相差不超过“最大堆内存 乘 search.isolator.strategy.ratio”的大小,则认为时间较长的查询更应该中断。否则认为堆内存使用较大的查询更应该中断。

      默认值:fair

      search.isolator.strategy.ratio

      String

      fair策略的阈值,仅当“search.isolator.strategy”值为“fair”生效。综合考虑大查询的运行时间及内存,当大查询任务内存相差不超过此阈值时,考虑选取运行时间长的大查询进行中断。当查询内存相差超过此阈值时,选取大内存查询任务进行中断。

      取值范围:0.0-100.0%

      默认值:1%

    • 全局查询任务超时设置。
      PUT _cluster/settings
      {
        "persistent": {
          "search.isolator.time.limit": "120s"
        }
      }

      参数名

      数据类型

      说明

      search.isolator.time.limit

      String

      当全局查询超时功开启时,所有已创建的查询任务超过此时长将被取消执行。

      取值范围:≥ 0ms

      默认值:120s