我有一个ElasticSearch集群设置,在k8上,每个主节点(其中3个)有一个状态集,每个数据节点(其中15个)有另一个状态集。
在碎片重新分配期间,由于一些数据节点达到其容量,我们现在在数据节点上(实际上是在其中一些节点上)遇到了如下错误:
在线程[main]中出现未捕获异常。java.lang.IllegalStateException:别名[alias-id_100536]具有多个写入索引[索引-abc,索引-def]
我们之前也遇到过这个问题,我们的解决方案是通过_cat/indexs/index-abc api找到索引的哈希值,然后bash到数据节点的虚拟机上,并删除带有哈希值的整个目录,一旦数据节点启动,索引将再次达到所需的复制计数,因此我们没有丢失数据。但是,现在,当我们尝试在具有写状态的索引上使用_cat/indexsapi时,我们看到主节点说没有具有该名称的索引。在错误中抛出的2个索引中,我们只能在主节点上找到其中一个节点的索引,我们可以在_cat/indices api中找到哈希值后,尝试在数据节点上逐个删除它们,但是,我想知道什么是理想的恢复方法?
ElasticSearch版本:6.7.2
谢谢
1条答案
按热度按时间cyvaqqii1#
我能够解决这个问题。
我们最后编写了一个脚本,列出了elasticsearch数据节点索引路径的目录。
这样我们就可以得到数据节点上所有uuid的列表。接下来我们在主节点上运行_cat/indices?format=json api调用。我们从这个api中收集uuid并执行set()- set(〈_cat/indices-uuid〉)。
这给了我们一个所有被认为是悬空的索引的列表。我们用rm -rf命令手动删除了目录。这带来了节点。