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