Elasticsearch кластер, оставляя осколки неназначенными
Мы запускаем кластер эластичного поиска для ведения журналов, индексации журналов из разных мест с помощью logstash. Недавно мы добавили два дополнительных узла для дополнительной емкости, пока ожидаем дополнительного оборудования для расширения кластера. В конечном итоге мы стремимся иметь 2 узла для данных "реального времени", работающих на твердотельных накопителях, чтобы обеспечить быстрый доступ к последним данным и устаревание данных на жестких дисках для более ранних версий. Новые узлы, которые мы вставили, имели намного меньше памяти, чем существующие блоки (700 ГБ против 5 ТБ), но, учитывая, что это будет похоже на ситуацию, которую мы имели при внедрении твердотельных накопителей, я не ожидал, что это будет большой проблемой,
В качестве первой попытки я бросил узлы в кластер, полагая, что новые правила размещения на основе дискового пространства означают, что они не будут мгновенно заполнены. К сожалению, этого не произошло, я проснулся, обнаружив, что кластер весело перераспределил осколки на новые узлы, превышающие 99%. После некоторой настройки параметров мне удалось удалить все данные с этих узлов и вернуть кластер в его предыдущее состояние (все сегменты назначены, состояние кластера зеленое).
В качестве следующего подхода я попытался внедрить тегирование индекса / узла, аналогичное моим планам при реализации SSD. Это оставило нам следующую конфигурацию:
- Узел 1 - 5 ТБ, теги: в реальном времени, архив
- Узел 2 - 5 ТБ, теги: в реальном времени, архив
- Узел 3 - 5 ТБ, теги: в реальном времени, архив
- Узел 4 - 700 ГБ, теги: в реальном времени
- Узел 5 - 700 ГБ, теги: в реальном времени
(все узлы, на которых работает asticsearch 1.3.1 и oracle java 7 u55)
Используя куратор, я отметил теги старше 10 дней как "архив", а последние - "в реальном времени". Это в фоновом режиме устанавливает индекс выделения сегмента "Требуется". Насколько я понимаю, это потребует, чтобы узел имел тег, но не ТОЛЬКО этот тег.
К сожалению, это не оказало желаемого эффекта. Самое неприятное, что никакие индексы, помеченные как архивные, не распределяют свои фрагменты реплики, оставляя 295 неназначенных фрагментов. Кроме того, в тегах реального времени используются только узлы 4, 5 и странно 3. Узел 3 не имеет шардов, кроме самого последнего индекса и некоторых шардов kibana-int.
Если я удаляю теги и использую exclude._ip для удаления осколков с новых узлов, я могу (медленно) вернуть кластер в зеленый цвет, так как это тот подход, который я использовал, когда новые узлы полностью заполнились, но я бы действительно хотелось бы отсортировать эту настройку, чтобы я мог быть уверен, что конфигурация SSD будет работать, когда появится новый комплект.
Я попытался включить: cluster.routing.allocation.allow_rebalance, чтобы всегда, по теории, кластер не восстанавливал баланс из-за неназначенных реплик. Я также попробовал: cluster.routing.allocation.enable для всех, но, опять же, это не оказало заметного влияния.
Я сделал что-то явно неправильно? Или есть какая-то дезагностика, которую я мог бы использовать? Я визуализировал распределение шардов с помощью плагина Elasticsearch Head.
Буду признателен за любую помощь, надеюсь, это просто глупая ошибка, которую я могу легко исправить!
заранее спасибо
1 ответ
Это, вероятно, не полностью отвечает на ваш вопрос, но, глядя на эти документы сегодня утром:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-allocation.html Вы должны иметь возможность устанавливать водяные знаки на использование диска в вашей версии, чтобы избежать этого повторения.
Для (ручного) мониторинга кластеров мне очень нравится https://github.com/lmenezes/elasticsearch-kopf
В настоящее время наблюдаю, как мой кластер снова разбирается с осколками (так медленно) после аналогичной проблемы, но я все еще использую древнюю версию.