新加了两个温节点,标了 box_type=warm,一周后 _cat/allocation 显示温节点分片数为 0,热节点磁盘到 88%。索引模板里没有 allocation 相关配置。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
GET _cat/nodeattrs?v
PUT logs/_settings
{"index.routing.allocation.require.box_type": "warm"}
GET _cat/allocation?v
节点打属性只是贴了标签,索引还要声明 allocation.require 才会往那边走。ILM 的 migrate 动作也要 allocate 规则配合,缺一条就原地不动。分片不会因为某台节点空闲就自己搬过去。这一点先确认清楚,后面就不用反复试。
「热温冷分片分配」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
具体做法是,确认节点属性真的加载 用 _cat/nodeattrs 看;给索引或模板加 allocation.require.box_type;ILM 的 warm 阶段补 allocate 动作 并指定副本数;用 explain 确认分配意图 再等 relocation 完成。
改完照着核一遍,温节点分片数开始增长,热节点磁盘从 88% 降到 60% 以下。
