elasticsearch索引分片存储配置更新不成功问题

问题描述

  • 需求描述

ES版本:5.2.2

集群节点:node_main,nodemain1,nodeleaf1,nodeleaf2

需求:因为几个集群主机上所拥有的硬盘容量大小不统一,其中nodeleaf2最大。要导入的数据量跟除了nodeleaf2之外的其他节点硬盘容量差不多,我们都知道es索引数据后,占用空间会至少是数据容量的double(由配置的索引分片数量决定)。所以希望导入的数据之索引后分片只存储在nodeleaf2节点上。

  • 阻碍所在

按照官方的文档,先创建索引,然后设置即可,参考链接:

https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-filtering.html

昨晚按照文档进行配置:

1)创建索引

2)排除分配节点

设置后导入数据是成功的,在排除掉的两个节点的data目录中对应索引文件夹,查看容量:

文件夹都是12k:

但是今天中午,排除三个节点的时候遇到了问题:

发现排除掉的三个节点,在创建索引并配置排除后,这三个被排除的节点上,对应索引文件夹大小不一样。导致导入数据也存到排除掉的三个节点上!

解决思路

  1. 排查

在排查前我的思路是:

  • 配置的有问题
  • 网络问题
  • 其他

第二点的网络问题很好排查,在创建配置某索引的设置后,其他节点也会更新,并且生成文件了。

这样我觉得是我配置的问题,我又仔细的按照官网来来回回配置,并重新导入数据一个下午啊。结果还是不行。一路谷歌也不行。

饭还没做了,在准备6点的时候,想了下,去索引后存储的文件夹看看,结果发现建立索引并配置排除分配节点后,配置更新不成功的节点上,其索引存储文件夹除了“_state”文件夹还有其他文件夹(0、1、2等),然后对比了昨晚更新成功的排除节点,发现更新成功并不会存在其他文件夹(其实就是存储的索引的文件夹)。

  1. 解决方法

既然能有对比,我们创建索引后,配置排除节点后,手动删除更新不正确的节点中的索引目录下文件夹的“_state”文件夹外的其他文件夹即可。

声明一下,这个解决办法可能会导致bug,目前暂未给ES官方提bug。本来想自己研究下问题,暂时没时间去看其源码。。。。。

1 0

Leave a Reply

Your email address will not be published. Required fields are marked *