Muszę zmienić nazwę kilku indeksów w klastrze ( należy zmienić ich nazwę , nie mogę używać aliasów ).
Widziałem, że nie ma obsługiwanych sposobów, aby to zrobić, najbliższy, jaki znalazłem, to zmiana nazwy katalogu indeksu , próbowałem tego w klastrze.
Klaster zawiera 3 maszyny A
, B
a C
fragmenty są replikowane na każdym z nich. Wyłączyłem elastyczne wyszukiwanie, zmieniłem A
nazwę /var/lib/elasticsearch/security/nodes/0/indices/oldindexname
na /var/lib/elasticsearch/security/nodes/0/indices/newindexname
i uruchomiłem ponownie A
.
Stan klastra był żółty, a elastyczne wyszukiwanie robiło magię, aby przywrócić prawidłowy stan. Po jakimś czasie skończyłem z
oldindexname
bycie dostępnym i w pełni replikowanym (odzyskanym zB
iC
jak sądzę)newindexname
jest dostępny (mogę go przeszukać), ale wtyczka head pokazuje, że jego fragmenty są w stanie „Nieprzypisane” i są wyszarzone (nie są replikowane)
Podczas odzyskiwania security.log
pojawił się następujący komunikat:
[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
Chociaż newindexname
można go przeszukiwać, z pewnością nie jest w normalnym stanie.
Przywróciłem poprzedni stan, usuwając newindexname
. Klaster powraca do koloru zielonego bez żadnych wpisów „Nieprzypisane”.
Biorąc to pod uwagę, jak mogę zmienić nazwę oldindexname
na newindexname
w klastrze?
Uwaga: najlepszym rozwiązaniem Mam na myśli to, aby przewinąć-egzemplarzu oldindex
do newindex
i usuwać oldindex
później. To zajmie trochę czasu, więc jeśli istnieje bardziej bezpośrednie rozwiązanie, byłoby wspaniale.
źródło
_source: {enabled: false}
?_reindex
używa_source
jako oryginalnego dokumentu danych.twitter
do,new_twitter
o ile wiem.Aby zmienić nazwę indeksu, możesz użyć modułu Elasticsearch Snapshot.
Najpierw musisz zrobić migawkę swojego indeksu. Przywracając go, możesz zmienić jego nazwę.
rename_replacement: -Nowa nazwa indeksu, w której chcesz wykonać kopię zapasową danych.
źródło
_source
włączenia w indeksie. W ten sposób zmieniłem nazwy niektórych indeksów multi-TB bez żadnych problemów.W związku z tym nie ma bezpośredniej metody kopiowania lub zmiany nazwy indeksu w ES (intensywnie szukałem własnego projektu)
Jednak bardzo prostą opcją jest użycie popularnego narzędzia migracji [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PS: to nie jest mój blog, po prostu natknąłem się na niego i okazało się, że jest dobry]
W ten sposób możesz skopiować indeks / typ, a następnie usunąć stary.
źródło
Jeśli nie możesz REINDEX, obejściem jest użycie aliasów . Z oficjalnej dokumentacji:
Interfejsy API w elasticsearch akceptują nazwę indeksu podczas pracy z określonym indeksem i kilka indeksów, jeśli ma to zastosowanie. Interfejs API aliasów indeksu umożliwia aliasowanie indeksu za pomocą nazwy, przy czym wszystkie funkcje API automatycznie konwertują nazwę aliasu na rzeczywistą nazwę indeksu. Alias można również odwzorować na więcej niż jeden indeks, a podczas określania alias zostanie automatycznie rozszerzony na indeksy aliasów. Alias może być również powiązany z filtrem, który będzie automatycznie stosowany podczas wyszukiwania i kierowania wartości. Alias nie może mieć takiej samej nazwy jak indeks.
Pamiętaj, że to rozwiązanie nie działa, jeśli używasz funkcji Więcej podobnych do tego. https://github.com/elastic/elasticsearch/issues/16560
źródło
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Autor: @WoJalias
wymaga planowania z wyprzedzeniem i utworzenia oryginalnej nazwy indeksuas an alias
na rzeczywisty indeks. Następnie możesz utworzyć nową nazwę aliasu i ponownie użyć starej nazwy aliasu do czegoś innego. Ale tracisz dostęp do old_data, jeśli masz tylko real_index, utwórz do niego alias, usuń stary real_index. Alias nie wskazuje teraz na nic.Innym innym sposobem zmiany nazwy lub zmiany mapowania indeksu jest ponowne zindeksowanie przy użyciu logstash. Oto przykład konfiguracji logstash 2.1:
źródło
Jak wskazano w dokumentacji Elasticsearch dla modułu migawki ,
źródło
Na wypadek, gdyby ktoś nadal tego potrzebował. Udany, nieoficjalny sposób zmiany nazw indeksów to:
Jeśli zdarzy się, że pojawi się ten błąd „nazwa katalogu nieaktualnego indeksu to”, usuń folder indeksu we wszystkich węzłach głównych (nie węzłach danych) i zrestartuj jeden z węzłów danych.
źródło