节点属性不满足索引Settings配置需求

2023-07-19 17:17:40 浏览数 (2)

异常现象

通过执行 GET /_cluster/allocation/explain 查看当前索引分配详情

代码语言:javascript复制
		"deciders": [{
			"decider": "data_tier",
			"decision": "NO",
			"explanation": "index has a preference for tiers [data_hot,data_warm] and node does not meet the required [data_hot] tier"
		}
代码语言:javascript复制
		"deciders": [{
			"decider": "filter",
			"decision": "NO",
			"explanation": "node does not match index setting [index.routing.allocation.require] filters [temperature:hot ]"
		}

如果 decider 中返回 "data_tier" 或 "filter" 时,需要先确认该索引配置的 require 属性

例如当前索引配置属性为 hot ,排查集群是否存在 hot 节点,如果确认存在 hot 节点,排查 hot 节点磁盘利用率是否到达水位线导致无法分配

解决方案

1.如果集群没有 require 配置的属性节点,可以在控制台新增当前属性节点,或者修改索引当前属性为已存在节点属性

集群版本小于7.10

代码语言:javascript复制
PUT {index}/_settings
{
  "routing": {
    "allocation": {
      "require": {
        "temperature": null
      }
    }
  }
}

集群版本大于等于7.10

index.routing.allocation.include._tier_preference的属性值是一个字符串,多个tier_preference之间通过逗号 ',' 隔开,分片分配的优先级是从前往后依次降低。例如当前索引配置的属性值为:"data_hot,data_warm,data_content",该属性的具体分配逻辑为:当集群中有data_hot节点时,则直接将分片分配在data_hot节点上,当没有data_hot节点时,则检查是否有data_warm节点,如果有,则在data_warm节点上分配,没有则在data_content节点上分配。

代码语言:javascript复制
PUT {index}/_settings
{
  "index": {
    "routing": {
      "allocation": {
        "include": {
          "_tier_preference": "data_hot,data_warm,data_content"
        }
      }
    }
  }
}

2.如果是由于当前属性节点磁盘利用率到达水位,可以清理些历史数据后再尝试分配

0 人点赞