配置Elasticsearch集群节点查询流量隔离
在分布式搜索和数据分析场景中,当集群中的某个节点出现内存故障或CPU异常高时,将直接影响到业务的正常运行,导致查询响应时间延长或服务不可用。为了解决这一问题,用户需要一种快速有效的流量隔离手段,以确保在节点异常时,查询请求能够被合理地调度到其他健康节点上,从而保障业务的连续性和稳定性。通过配置Elasticsearch集群节点的查询流量隔离功能,用户可以指定某些节点为软隔离或硬隔离节点,对于非白名单索引的Shard查询请求,系统将优先或完全不向这些隔离节点发送,有效避免了故障节点对业务的影响。
原理介绍
查询流量隔离的原理:
- 当集群中的某个节点出现异常时,可将其设置为软隔离或硬隔离节点。
- 查询请求被转化为Shard粒度的查询请求。
- Shard粒度的查询请求优先发送至非软隔离节点和非硬隔离节点。
- 当且仅当该Shard的可查询分片仅存在于软隔离节点时,查询请求才会转发至软隔离节点。
- 当Shard的可查询分片仅存在于硬隔离节点时,查询请求将返回失败。
CSS服务通过为集群节点设置接收Shard粒度查询请求的优先级,实现对特定节点的查询流量控制,从而减少或禁止其接收Shard粒度的查询请求,最终达到查询流量隔离的目的。
约束限制
- 仅当Elasticsearch集群版本号为7.10.2且镜像版本号不低于7.10.2_25.9.0_xxx时,才支持查询流量隔离功能。
- 以“.kibana”与“.opendistro”为前缀的索引默认为白名单索引,不受查询流量隔离影响。
登录Kibana
登录Kibana进入命令执行页面。Elasticsearch集群支持多种客户端访问,本文仅以CSS服务集成的Kibana为例介绍配置指导。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > Elasticsearch”。
- 在集群列表,选择目标集群,单击操作列的“Kibana”,登录Kibana。
- 在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.*"
}
}
|
配置项 |
类型 |
说明 |
|---|---|---|
|
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”为前缀的索引是默认白名单索引,配置参数后,白名单索引将包含您指定的索引,以及这些默认索引。 |