Link Search Menu Expand Document Documentation Menu

集群路由和感知

1.0 版引入

为了控制搜索流量如何在区域之间路由,您可以为感知属性值分配权重。这对于区域部署、异构集群或将流量路由出不健康区域非常有用。

先决条件

在使用此 API 之前,您必须配置集群感知属性和节点属性。这可以在 opensearch.yml 文件中或通过集群设置 API 完成。

例如,要使用 opensearch.yml 配置 zonerack 感知属性,请将它们指定为逗号分隔的列表:

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

请求正文字段

下表列出了 PUTDELETE 方法可用的请求体字段。

参数 数据类型 适用方法 描述
weights 对象 PUT 指定感知属性值的自定义权重。权重影响搜索请求如何在区域或其他感知属性值之间分布。权重是相对的,可以使用任何比率。例如,在三个区域之间以 2:3:5 的比率,20%、30% 和 50% 的请求分别路由到相应的区域。权重为 0 会阻止区域接收搜索流量。PUT 方法必需。
_version 整数 PUT, DELETE 用于乐观并发控制(OCC)。确保只有在当前版本匹配时才应用更改,防止冲突更新。每个成功的 PUTDELETE 操作后,版本都会递增。要启动并发控制,您必须在初始请求中将 _version 设置为 -1PUTDELETE 方法必需。

以下请求示例为两个区域之间的搜索流量创建轮询分片分配,同时排除第三个区域接收任何流量:

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

后续步骤

  • 有关区域停用的更多信息,请参阅 集群停用
  • 有关分配感知的更多信息,请参阅集群形成