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.
fonte
_source: {enabled: false}
?_reindex
usa_source
como dados do documento original.twitter
paranew_twitter
, até onde eu sei.Para renomear seu índice, você pode usar o módulo Elasticsearch Snapshot.
Primeiro, você deve tirar um instantâneo do seu índice. Ao restaurá-lo, você pode renomear o seu índice.
rename_replacement: -Novo indexname no qual você deseja fazer backup de seus dados.
fonte
_source
ser habilitada no índice. Eu mudei o nome de alguns índices multi-TB desta forma sem problemas.Como tal, não existe um método direto para copiar ou renomear o índice no ES (eu pesquisei extensivamente por meu próprio projeto)
No entanto, uma opção muito fácil é usar uma ferramenta de migração popular [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PS: este não é o meu blog, apenas tropecei e achei bom]
Assim, você pode copiar o índice / tipo e, em seguida, excluir o antigo.
fonte
Se você não puder REINDEX, uma solução alternativa é usar aliases . Da documentação oficial :
APIs em elasticsearch aceitam um nome de índice ao trabalhar em um índice específico e vários índices quando aplicável. A API de aliases de índice permite alias a um índice com um nome, com todas as APIs convertendo automaticamente o nome do alias no nome do índice real. Um alias também pode ser mapeado para mais de um índice e, ao especificá-lo, o alias se expandirá automaticamente para os índices de aliases. Um alias também pode ser associado a um filtro que será aplicado automaticamente ao pesquisar e rotear valores. Um alias não pode ter o mesmo nome de um índice.
Esteja ciente de que esta solução não funciona se você estiver usando o recurso Mais como este. https://github.com/elastic/elasticsearch/issues/16560
fonte
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Por @WoJalias
exige que você planeje com antecedência e crie o nome do índice originalas an alias
para um índice real. Em seguida, você pode criar um novo nome de alias e reutilizar o nome de alias antigo para outra coisa. Mas você perde o acesso a old_data se você tem apenas um real_index, faça um alias para ele, delete o antigo real_index. O alias agora não aponta para nada.Outra maneira diferente de conseguir renomear ou alterar os mapeamentos de um índice é reindexar usando logstash. Aqui está um exemplo da configuração do logstash 2.1:
fonte
Conforme indicado na referência Elasticsearch para o módulo de instantâneo ,
fonte
Para o caso de alguém ainda precisar. A maneira bem-sucedida, não oficial, de renomear índices é:
Se acontecer de você receber este erro "dangled index directory name is", remova a pasta de índice em todos os nós principais (não nos nós de dados) e reinicie um dos nós de dados.
fonte