Elasticsearch 别名有多个写入索引(不是任何其他问题的副本)

Elasticsearch alias has more than one write index (not a duplicate of any other question)

我有一个 elasticsearch 集群设置,在 k8s 上有一个 statefulset 用于 elasticseach 主节点(其中 3 个)和另一个 statefulset 用于 elasticsearch 数据节点(其中 15 个)。

在分片重新分配期间,由于一些数据节点达到了它们的容量,我们现在在数据节点(实际上是其中一些)上遇到了这样的错误:

线程 [main] 中未捕获的异常 org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: 别名 [alias-id_100536] 有多个写入索引 [index-abc ,index-def]

我们之前也遇到过这个问题,对我们有用的解决方案是通过 _cat/indices/index-abc api 和 bash 找到索引的散列到vm 并删除具有哈希值的整个目录,一旦数据节点启动,索引将再次达到所需的复制计数,因此我们没有数据丢失。 但是,现在当我们尝试在具有写入状态的索引上使用 _cat/indices api 时,我们看到主节点表示没有具有该名称的索引。 在错误中抛出的 2 个索引中,我们只能找到其中一个在主节点上的索引。从_cat/indices api 中找到哈希值后,我们可以尝试在数据节点上将它们一一删除,但是,我想知道什么是理想的恢复方法?

Elasticsearch 版本:6.7.2

谢谢

我解决了这个问题。

我们最终编写了一个脚本,列出了 elasticsearch 数据节点索引路径的目录。

这样我们就能够获得该数据节点上所有 uuid 的列表。 我们接下来 运行 _cat/indices?format=json api 在主节点上调用。 我们从这个 api 中收集了 uuid 并做了一个 set() - set(<_cat/indices-uuid>).

这为我们提供了所有被视为悬空的索引的列表。我们使用 rm -rf 命令手动删除了目录。 这带来了节点。