异常现象
通过执行 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.如果是由于当前属性节点磁盘利用率到达水位,可以清理些历史数据后再尝试分配