我需要在一个集群中重命名几个索引(它们的名称 必须的要更改,我不能使用 化名)。
我看到没有支持的方法来做到这一点,我发现最接近的是 重命名索引的目录,我在一个集群中尝试了这一点。
集群有3台机器 A、 B和 C,每台机器上都复制了碎片。我关闭了 A上的 elasticsearch,将 /var/lib/elasticsearch/security/nodes/0/indices/oldindexname重命名为 /var/lib/elasticsearch/security/nodes/0/indices/newindexname并重新启动 A。
集群的状态是黄色的,而 elasticsearch 正在使用一些魔法来恢复正确的状态。过了一段时间后
oldindexname可用并完全复制(我猜是从 B和 C恢复的)newindexname可用(我可以搜索它) ,但是头插件显示它的碎片处于“未分配”状态,并且它们是灰色的(没有被复制)在恢复期间,security.log显示了以下信息:
[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name
虽然 newindexname是可搜索的,但它肯定不处于正常状态。
我通过删除 newindexname回滚到了之前的状态。集群回到了绿色,没有任何“未分配”的条目。
既然如此,我如何在集群中将 oldindexname重命名为 newindexname?
注意: 我想到的最终解决方案是将 oldindex滚动复制到 newindex中,然后删除 oldindex。这将需要时间,所以如果有一个更直接的解决方案,这将是巨大的。