2015-11-13 2 views
0

Я использую Java API для удаления старых индексов из ElasticSearch.Удаление индекса ElasticSearch

Client client = searchConnection.client 

DeleteIndexResponse delete = client.admin().indices().delete(new DeleteIndexRequest('location')).actionGet(); 

Во время удаления кластера становится красным в течение минуты, а не индексировать новые данные - причину «недостающие индексы/реплики и т.д.».

Как я могу сказать ElasticSearch, что я собираюсь удалить их, чтобы предотвратить «красное состояние»?

+0

Какие другие процессы у вас есть, которые вносят данные в ES? – Val

+0

Другой процесс - вставка данных в новые индексы – Andriy

ответ

0

Вы можете использовать aliases, чтобы абстрагироваться от реальных индексов внизу. Идея состояла бы в том, чтобы читать из псевдонима и писать вместо псевдонима. Таким образом, вы можете создать новый индекс, поменять псевдоним записи на новый индекс (чтобы процесс индексирования не был нарушен), а затем удалить старый индекс. Процесс мудр, он бы так:

Контекст: Ваш текущий location индекс имеет location_active псевдоним и процесс индексирования записывает в location_active псевдоним вместо непосредственно к индексу location.

Шаг 1: Создать новый location_112015 индекс

curl -XPUT localhost:9200/location_112015 

Шаг 2: переставляем location_active псевдоним от "старого" location индекса в "новый" один созданный на шаге 1

curl -XPOST 'http://localhost:9200/_aliases' -d '{ 
    "actions" : [ 
     { "remove" : { "index" : "location", "alias" : "location_active" } }, 
     { "add" : { "index" : "location_112015", "alias" : "location_active" } } 
    ] 
}' 

Обратите внимание, что эта операция является атомарной, поэтому, если процесс индексирования продолжает отправлять новые документы в location_active, это будет быть прозрачным для него, и никакие документы не будут потеряны, ошибок не будет.

Шаг 3: Удалите старый индекс

curl -XDELETE localhost:9200/location 

Шаг 4: полощите и повторять так часто, как требуется

Примечание: эти операции могут быть легко выполнены с клиентской библиотекой Java как Что ж.

+0

Я пишу в новый индекс каждый день и удаляя индексы старше 1 недели. Когда я выполняю DELETE - кластер уходит на минутку. Могу ли я как-то изменить приоритет удаления - так что это не повлияет на скорость индексации кластера? – Andriy

+0

Я удаляю около 40 индексов каждый день, один за другим - примерно 130 миллионов событий в этих – Andriy

+0

Удаление, являющееся синхронной операцией, я не уверен, как приоритет поможет здесь, когда вы удалите индекс, он исчез, нет способ запланировать удаление, если не происходит индексации. Решение alias, которое я описал выше, позволяет вам сделать (удаление и индексирование) прозрачным способом без простоев. – Val

Смежные вопросы