Мне нужно переименовать несколько индексов в кластере (их имя необходимо изменить, я не могу использовать aliases).
Я видел, что нет поддерживаемых способов сделать это, ближайший я нашел переименовать каталог индекса, я пробовал это в кластере.
В кластере есть 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 показывает, что его осколки находятся в состоянии "Unassigned" и что они неактивны (не реплицированы).
Во время восстановления 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
потом. Это займет время, поэтому, если будет более прямое решение, было бы здорово.