我需要在一个集群中重命名几个索引(它们的名称 必须的要更改,我不能使用 化名)。
我看到没有支持的方法来做到这一点,我发现最接近的是 重命名索引的目录,我在一个集群中尝试了这一点。
集群有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
。这将需要时间,所以如果有一个更直接的解决方案,这将是巨大的。