配置OpenSearch集群大查询隔离
通过大查询隔离可以管理高内存或长耗时查询,保障OpenSearch集群稳定性并避免OOM异常。
- 隔离高内存/长耗时查询:将大查询任务单独管理,避免影响正常业务。
- 堆内存阈值触发中断:当节点堆内存使用率过高时,中断隔离池中的大查询。
- 全局超时控制:设置所有查询的超时时间,自动取消超时任务。
原理介绍
- 隔离池管理:大查询任务被放入隔离池,独立于普通查询。隔离池任务会根据内存、时间阈值触发中断。
- 中断策略:
- fair策略:综合内存和时间选择中断目标。
- mem-first策略:优先中断内存使用最大的任务。
- time-first策略:优先中断运行时间最长的任务。
- 原生Cancel接口:使用OpenSearch原生的cancel接口中断查询任务,确保兼容性。
约束限制
- OpenSearch集群仅2.19.0版本支持大查询隔离功能。
- 大查询隔离特性默认开启,全局超时特性默认关闭,用户可根据需要实时配置,配置后立即生效。
登录OpenSearch Dashboards
登录OpenSearch Dashboards进入命令执行页面。OpenSearch集群支持多种客户端访问,本文仅以CSS服务集成的OpenSearch Dashboards为例介绍配置指导。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。
配置大查询隔离
大查询隔离会将大查询任务放入隔离池,隔离池任务会根据内存、时间阈值触发中断。大查询隔离特性默认开启,用户可根据需要实时配置,配置后立即生效。
- 执行如下命令,开启大查询隔离。
PUT _cluster/settings { "persistent": { "search.isolator.enabled": true } }
表1 大查询隔离的参数说明 参数
参数类型
描述
search.isolator.enabled
Boolean
大查询隔离功能开关,开启后可以将大查询任务单独管理,避免影响正常业务。
- true(默认值):开启大查询隔离功能。
- false:关闭大查询隔离功能。
- 执行如下命令,设置单个分片查询任务被定义为大查询任务的阈值。
PUT _cluster/settings { "persistent": { "search.isolator.memory.task.limit": "50MB", "search.isolator.time.management": "10s" } }
表2 大查询阈值的参数说明 参数
参数类型
描述
search.isolator.memory.task.limit
String
大查询任务内存阈值,用于控制查询任务申请的大内存,超过此阈值将被隔离观察。
取值范围:0b~节点最大堆内存
单位:MB、GB等OpenSearch支持的单位。
默认值为50MB。
说明:查询集群堆内存使用情况和最大值的命令参考:
GET _cat/nodes?&h=id,ip,port,r,ramPercent,ramCurrent,heapMax,heapCurrent
search.isolator.time.management
String
查询时长阈值,用于控制查询任务执行时间(从开始使用集群资源进行查询算起),超过此阈值将被隔离观察。
取值范围:≥ 0ms
支持的单位包括s(秒)、ms(毫秒)、m(分钟)、h(小时)
默认值为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%" } }
表4 中断策略的参数说明 参数
参数类型
描述
search.isolator.strategy
String
查询中断策略,用于定义触发中断控制程序时选取查询任务的策略。
- fair(默认值):综合考虑内存和运行时间,如果查询内存差异≤“最大堆内存 x fair策略的阈值”,则优先中断运行时间长的查询;如果查询内存差异>“最大堆内存 x fair策略的阈值”,则优先中断内存占用大的查询。
- mem-first:优先中断内存占用最大的查询。
- time-first:优先中断运行时间最长的查询。
大查询隔离池每秒检查一次,直至堆内存下降到安全范围。
search.isolator.strategy.ratio
String
fair策略的阈值,用于衡量内存差异与最大堆内存的比例关系。当大查询任务内存相差不超过该阈值时,优先中断运行时间长的任务;否则优先中断内存占用大的任务。
仅当“search.isolator.strategy”为“fair”时生效。
取值范围:0.0-100.0%
默认值为1%。
配置全局超时控制
全局超时控制可以设置所有查询的超时时间,并自动取消超时任务。全局查询超时功能默认关闭,用户可根据需要实时配置,配置后立即生效。
PUT _cluster/settings { "persistent": { "search.isolator.time.enabled": true, "search.isolator.time.limit": "110s" } }
参数 |
参数类型 |
描述 |
---|---|---|
search.isolator.time.enabled |
Boolean |
全局查询超时功能开关,开启后当查询任务超过全局查询超时时间,则自动取消超时任务。
|
search.isolator.time.limit |
String |
全局查询超时时间,设置所有查询的超时时间,超过该时间则自动取消超时任务。 取值范围:≥ 0ms 默认值为120s。 |
配置被取消查询请求的日志记录
PUT _cluster/settings { "persistent": { "search.isolator.log.count": "100" } }
参数名 |
数据类型 |
说明 |
---|---|---|
search.isolator.log.count |
Integer |
限制被取消查询请求记录的最大条数。取消的查询请求会记录在内存中,超出此值将被丢弃。 仅当“search.isolator.enabled”为“true”时生效。 取值范围:0~5000 默认值为100。 可通过以下接口查询取消请求日志:
其中nodeId为节点ID。 |