Preciso renomear vários índices em um cluster (seus nomes devem ser alterados, não posso usar aliases ).
Vi que não há formas suportadas de fazer isso, o mais próximo que encontrei é renomear o diretório do índice , tentei em um cluster.
O aglomerado tem 3 máquinas A
, B
e C
e os fragmentos são replicados em cada um deles. Desliguei o elasticsearch em A
, renomeei /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
para /var/lib/elasticsearch/security/nodes/0/indices/newindexname
e reiniciei A
.
O estado do cluster era amarelo e a elasticsearch estava fazendo mágica para restaurar um estado correto. Depois de algum tempo acabei com
oldindexname
estando disponível e totalmente replicado (recuperado deB
eC
eu acho)newindexname
estando disponível (posso pesquisá-lo), mas o plug-in principal mostra que seus fragmentos estão em um estado "Não atribuído" e que estão acinzentados (não replicados)
Durante a recuperação security.log
mostrou a seguinte mensagem:
[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
Embora newindexname
seja pesquisável, certamente não está em um estado normal.
Eu voltei ao estado anterior excluindo newindexname
. O cluster está de volta ao verde sem nenhuma entrada "Não atribuída".
Dado isso, como posso renomear oldindexname
para newindexname
em um cluster?
Nota: a solução definitiva que tenho em mente é a de rolagem-cópia oldindex
em newindex
e excluir oldindex
depois. Isso vai levar tempo, então se houver uma solução mais direta, seria ótimo.