集群路由和感知
1.0 版引入
为了控制搜索流量如何在区域之间路由,您可以为感知属性值分配权重。这对于区域部署、异构集群或将流量路由出不健康区域非常有用。
先决条件
在使用此 API 之前,您必须配置集群感知属性和节点属性。这可以在 opensearch.yml
文件中或通过集群设置 API 完成。
例如,要使用 opensearch.yml
配置 zone
和 rack
感知属性,请将它们指定为逗号分隔的列表:
cluster.routing.allocation.awareness.attributes: zone,rack
或者,您可以使用集群设置 API 配置感知属性:
PUT /_cluster/settings
{
"persistent" : {
"cluster.routing.allocation.awareness.attributes": ["zone", "rack"]
}
}
有关 OpenSearch 设置的更多信息,请参阅配置 OpenSearch。
端点
PUT /_cluster/routing/awareness/<attribute>/weights
GET /_cluster/routing/awareness/<attribute>/weights?local
GET /_cluster/routing/awareness/<attribute>/weights
DELETE /_cluster/routing/awareness/<attribute>/weights
路径参数
下表列出了可用的路径参数。所有路径参数均为可选。
参数 | 数据类型 | 描述 |
---|---|---|
<attribute> | 字符串 | 已配置的感知属性名称(例如,zone )。路径中指定的属性决定了权重适用于哪个感知属性。 |
查询参数
下表列出了可用的查询参数。所有查询参数都是可选的。
参数 | 数据类型 | 描述 |
---|---|---|
local | 布尔型 | 只能在 GET 请求中提供。如果为 true ,则请求从接收请求的节点而不是集群管理器节点检索信息。默认为 false 。 |
请求正文字段
下表列出了 PUT
和 DELETE
方法可用的请求体字段。
参数 | 数据类型 | 适用方法 | 描述 |
---|---|---|---|
weights | 对象 | PUT | 指定感知属性值的自定义权重。权重影响搜索请求如何在区域或其他感知属性值之间分布。权重是相对的,可以使用任何比率。例如,在三个区域之间以 2:3:5 的比率,20%、30% 和 50% 的请求分别路由到相应的区域。权重为 0 会阻止区域接收搜索流量。PUT 方法必需。 |
_version | 整数 | PUT , DELETE | 用于乐观并发控制(OCC)。确保只有在当前版本匹配时才应用更改,防止冲突更新。每个成功的 PUT 或 DELETE 操作后,版本都会递增。要启动并发控制,您必须在初始请求中将 _version 设置为 -1 。PUT 和 DELETE 方法必需。 |
请求示例:加权轮询搜索
以下请求示例为两个区域之间的搜索流量创建轮询分片分配,同时排除第三个区域接收任何流量:
PUT /_cluster/routing/awareness/zone/weights
{
"weights":
{
"zone_1": "1",
"zone_2": "1",
"zone_3": "0"
},
"_version" : -1
}
此请求后,_version
递增到 0
。
要为多个感知属性创建分片分配,请为每个属性发送单独的请求。
请求示例:更新配置
PUT
请求会完全替换指定感知属性的现有权重配置。请求中省略的任何值都将从配置中移除。例如,以下请求更新区域 1 和 3 的权重并移除区域 2:
PUT /_cluster/routing/awareness/zone/weights
{
"weights":
{
"zone_1": "2",
"zone_3": "1"
},
"_version" : 0
}
此请求后,_version
递增到 1
。
请求示例:查看配置
要查看当前权重配置及其版本,请发送以下请求。在后续的更新或删除请求中使用返回的版本号:
GET /_cluster/routing/awareness/zone/weights
示例响应
{
"weights": {
"zone_1": "2.0",
"zone_3": "1.0"
},
"_version": 1,
"discovered_cluster_manager": true
}
请求示例:删除配置
要移除权重配置,请在 DELETE
请求中提供当前版本:
DELETE /_cluster/routing/awareness/zone/weights
{
"_version": 1
}
此请求后,_version
递增到 2
。