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