更新时间:2026-01-09 GMT+08:00
分享

配置Elasticsearch集群节点查询流量隔离

在分布式搜索和数据分析场景中,当集群中的某个节点出现内存故障或CPU异常高时,将直接影响到业务的正常运行,导致查询响应时间延长或服务不可用。为了解决这一问题,用户需要一种快速有效的流量隔离手段,以确保在节点异常时,查询请求能够被合理地调度到其他健康节点上,从而保障业务的连续性和稳定性。通过配置Elasticsearch集群节点的查询流量隔离功能,用户可以指定某些节点为软隔离或硬隔离节点,对于非白名单索引的Shard查询请求,系统将优先或完全不向这些隔离节点发送,有效避免了故障节点对业务的影响。

原理介绍

图1 查询流量隔离原理图

查询流量隔离的原理:

  1. 当集群中的某个节点出现异常时,可将其设置为软隔离或硬隔离节点。
  2. 查询请求被转化为Shard粒度的查询请求。
  3. Shard粒度的查询请求优先发送至非软隔离节点和非硬隔离节点。
    • 当且仅当该Shard的可查询分片仅存在于软隔离节点时,查询请求才会转发至软隔离节点。
    • 当Shard的可查询分片仅存在于硬隔离节点时,查询请求将返回失败。

CSS服务通过为集群节点设置接收Shard粒度查询请求的优先级,实现对特定节点的查询流量控制,从而减少或禁止其接收Shard粒度的查询请求,最终达到查询流量隔离的目的。

约束限制

  • 仅当Elasticsearch集群版本号为7.10.2且镜像版本号不低于7.10.2_25.9.0_xxx时,才支持查询流量隔离功能。
  • “.kibana”“.opendistro”为前缀的索引默认为白名单索引,不受查询流量隔离影响。

登录Kibana

登录Kibana进入命令执行页面。Elasticsearch集群支持多种客户端访问,本文仅以CSS服务集成的Kibana为例介绍配置指导。

  1. 登录云搜索服务管理控制台
  2. 在左侧导航栏,选择“集群管理 > Elasticsearch”
  3. 在集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
  4. 在Kibana左侧导航栏选择“Dev Tools”,进入操作页面。

    控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。

配置查询流量隔离

执行如下命令,为集群节点配置查询优先级,控制Shard粒度的查询请求转发。

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.css.preference.query.low_priority_nodes": "node1,node2",
    "cluster.routing.css.preference.query.isolated_nodes": "node3,node4",
    "cluster.routing.css.preference.query.allow_list": "index1,index2,test-index.*"
  }
}
表1 配置项说明

配置项

类型

说明

cluster.routing.css.preference.query.low_priority_nodes

String

配置软隔离节点。除白名单索引外的其它索引,其Shard粒度的查询请求优先发往非软隔离节点,当Shard可查询分片仅存在于软隔离节点时,Shard粒度的查询请求才会发往软隔离节点。

节点名称之间使用逗号“,”分隔。

默认为空表示没有软隔离节点。

cluster.routing.css.preference.query.isolated_nodes

String

配置硬隔离节点。除白名单索引外的其它索引,其Shard粒度的查询请求不发往硬隔离节点。当Shard可查询分片仅存在于硬隔离节点时,查询请求会返回失败。

节点名称之间使用逗号“,”分隔。

默认为空表示没有硬隔离节点。

cluster.routing.css.preference.query.allow_list

String

配置白名单索引。白名单索引的查询请求不受软隔离和硬隔离影响。

索引名称之间使用逗号“,”分隔,支持正则表达式。

“.kibana”“.opendistro”为前缀的索引是默认白名单索引,配置参数后,白名单索引将包含您指定的索引,以及这些默认索引。

相关文档