前记
1.问题
当给ElasticSearch配置了ILM后,ElasticSearch自动执行,按照配置把索引进行处理迁移,但是运行一段时间后发现,之前用logstash传过来的且没有使用mapping的数据都无法正常执行ILM,而其他数据却能正常处理.
由于发现这个问题时,对于Es不是十分了解,只能copy错误去搜索,搜索后发现几乎没有一个答案是满意的,最多说的是升级ElasticSearch版本解决,所以就又水了一文
2.查看索引ilm运行情况
|
|
首先使用ilm/explain查看索引的ilm运行情况,这里使用so1n_index代替索引名(下同).
看输出可以发现,我在ilm配置索引min_age超过31天就执行so1n_index_policy中的一个cold phase,而在执行其中allocate的check-allocation步骤时报错Waiting for [2] shards to be allocated to nodes matching the given filters
,也就是ilm执行到so1n_index节点分配时就已经出问题了,而且还是在check-allocation阶段.所以我们只要查明为什么check-allocation不通过就好了.
3.查看索引allocation情况
直接使用explain查看allocation的错误原因
|
|
这里可以发现,原来是索引多了一段配置,导致在分配索引时,必须要确保节点的id是:so1n_id_3,可是这一台的box_type是cold,具体可以看索引的设置
可以发现,这里多了一段
这一段从来没配置过,估计是没使用mapping时,当数据发送到so1n_id_3节点时,Es会自动给索引加上index.routing.allocation.require._id
或者我的mapping指定有5个分片,所以Es才不会自动给索引加上index.routing.allocation.require._id
.
4.解决
可确定Es上面的所有索引都可以不需要index.routing.allocation.require._id
,那可以通过以下进行修改,如果有部分索引需要index.routing.allocation.require._id
,则需要通配符修改
然后再调用explain查看
发现Es已经在后台执行索引迁移了
迁移完成后再去查看可以发现字段rebalance_explanation
会显示:cannot rebalance as no target node exists that can both allocate this shard and improve the cluster balance
则此,索引冷热分离规则全部适配运行完成.
本文链接: http://so1n.me/2020/04/10/记一次ElasticSearch冷热分离索引无法正确分配的问题/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
