Мне нужно переименовать несколько индексов в кластере (их имя нужно изменить, я не могу использовать псевдонимы ).
Я увидел, что для этого нет поддерживаемых способов, самое близкое, что я нашел, - это переименовать каталог индекса , я пробовал это в кластере.
В кластере 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
доступны (я могу выполнить поиск), но плагин head показывает, что его шарды находятся в состоянии «Неназначено» и что они неактивны (не реплицируются)
Во время восстановления 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
впоследствии. На это потребуется время, поэтому, если есть более прямое решение, было бы здорово.
_source: {enabled: false}
?_reindex
использует_source
в качестве исходных данных документа.twitter
наnew_twitter
.Для переименования вашего индекса вы можете использовать модуль Elasticsearch Snapshot.
Сначала вам нужно сделать снимок своего индекса. Восстанавливая его, вы можете переименовать свой индекс.
rename_replacement: -Новое имя индекса, в котором вы хотите сделать резервную копию ваших данных.
источник
_source
включать в индекс. Я без проблем переименовал некоторые индексы с множественным туберкулезом.Таким образом, в ES нет прямого метода копирования или переименования индекса (я много искал свой собственный проект)
Однако очень простой вариант - использовать популярный инструмент миграции [Elastic-Exporter].
http://www.retailmenot.com/corp/eng/posts/2014/12/02/elasticsearch-cluster-migration/
[PS: это не мой блог, просто наткнулся и нашел хороший]
Таким образом, вы можете скопировать индекс / тип, а затем удалить старый.
источник
Если вы не можете переиндексации обходной путь заключается в использовании псевдонимов . Из официальной документации:
API-интерфейсы в elasticsearch принимают имя индекса при работе с определенным индексом и несколько индексов, если это применимо. API псевдонимов индекса позволяет использовать псевдоним индекса с именем, при этом все API автоматически преобразуют имя псевдонима в фактическое имя индекса. Псевдоним также может быть сопоставлен более чем с одним индексом, и при его указании псевдоним автоматически расширяется до индексов псевдонимов. Псевдоним также может быть связан с фильтром, который будет автоматически применяться при поиске и маршрутизации значений. Псевдоним не может иметь то же имя, что и индекс.
Имейте в виду, что это решение не работает, если вы используете функцию More Like This. https://github.com/elastic/elasticsearch/issues/16560
источник
I need to rename several indexes in a cluster (their name must be changed I cannot use aliases).
Автор @WoJalias
требует , чтобы вы спланировали заранее и создали исходное имя индексаas an alias
для реального индекса. Затем вы можете создать новое имя псевдонима и повторно использовать старое имя псевдонима для чего-то другого. Но вы теряете доступ к old_data, если у вас есть только real_index, создайте для него псевдоним, удалите старый real_index. Псевдоним теперь ни на что не указывает.Другой способ добиться переименования или изменения сопоставлений для индекса - это переиндексировать с помощью logstash. Вот пример конфигурации logstash 2.1:
источник
Как указано в справочнике Elasticsearch для модуля моментальных снимков ,
источник
На всякий случай кому-то это еще нужно. Успешный, а не официальный способ переименования индексов:
Если вы получили сообщение об ошибке «имя каталога оборванного индекса», удалите папку индекса на всех главных узлах (не узлах данных) и перезапустите один из узлов данных.
источник