我需要重命名集群中的几个索引(它们的名称必须更改,我不能使用别名)。
我看到没有支持的方法来执行此操作,发现的最接近的方法是重命名索引的目录,我在集群中尝试过此操作。
该集群有3台计算机A,B并且C分片在每台计算机上复制。我关闭了上elasticsearch A,改名/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之后。这将需要时间,因此,如果有更直接的解决方案,那就太好了。