在 docker 中将 Elasticsearch 集群从 2.x 升级到 5.x 时的索引 Red/Dangling

Indices Red/Dangling when upgrading Elasticsearch cluster from 2.x to 5.x in docker

我管理一个小型 ELK 堆栈,该堆栈位于一个 docker 主机上,该主机具有一个 3 节点 elasticsearch 集群、一个主节点、一个客户端节点和一个数据节点,每个 运行 elasticsearch 2.4.x。这些节点中的每一个都将相同的主机目录绑定挂载为 elasticsearch 数据目录,即使只有数据节点需要它。

在测试 5.x 的升级路径时,我 运行 遇到了一个非常奇怪的问题。集群会恢复,但不会初始化任何 2.x 创建的索引,抛出错误:

[o.e.g.DanglingIndicesState] [elastic-data] [[logstash-2017.02.01/pBco8d7dQAqmZoI37vUIOQ]] dangling index exists on local file system, but not in cluster metadata, auto import to cluster state

索引永远不会初始化并保持红色。堆栈可以很好地创建新索引,如果我删除这些索引,系统将运行得非常好,但如果我要在生产系统上执行此操作,那么数据丢失绝对不是最佳选择。

事实证明,主节点和客户端节点一直在挂载数据目录是导致此问题的原因。 Elasticsearch 5.x 对数据目录强制执行 1 个节点的默认限制,虽然主节点和客户端 2.x 节点没有主动进行数据管理,但它们影响了文件夹结构。我能够通过首先从 2.x 集群上的主服务器和客户端移除绑定挂载并让它自行解决,然后升级到 5.x 来获得所有绿色索引的干净升级。希望这对遇到此问题的其他人有所帮助。