Какая рекомендуемая настройка для кластера Elasticsearch, который содержит данные в масштабе ТБ и выше?

В настоящее время у меня есть несколько узлов Elasticsearch, работающих на нескольких машинах с голым железом, содержащих индексы размером в ТБ. Мы находимся в процессе реструктуризации нашей инфраструктуры, и я не уверен, что это лучший способ.

Я рассматривал Docker, Mesos и Vagrant в качестве альтернативы, но не уверен, возможны ли они вообще. Есть четыре ситуации, которые я считаю актуальными (наряду с моей проблемой):

  1. Mesos-Elasticsearch: этот пакет запускает Elasticsearch в Mesos. Это кажется отличным, но, похоже, позволяет масштабировать узлы данных только при небольшом размере диска. Кроме того, нет основных / клиентских узлов. На данный момент пакет является альфа-версией Github - я получил ошибку «Нет маршрута к хосту» и MasterNotDiscoveredException при их настройке по умолчанию. У кого-нибудь есть опыт в этом?
  2. Docker: я не слишком знаком с контейнерами, но в Dockerhub есть несколько контейнеров для Elasticsearch. Кроме того, Mesos позволяет запускать контейнеры поверх него. Меня беспокоит нехватка места на диске в каждом контейнере, так как мои данные находятся в масштабе ТБ. Кроме того, данные постоянны. Возможно ли изменение размера диска контейнера или есть другая настройка для контейнеров Docker?
  3. Бродячие виртуальные машины: я бы мог представить себе виртуальную машину для каждого узла ES, подходящую для распределения ресурсов. Есть ли в этом какие-то существенные преимущества по сравнению с работой на голом железе? Похоже, это несовместимо с Mesos.
  4. Без металла: это текущая настройка.

Я хотел бы знать, какая из четырех настроек является вашей предпочтительной для кластера Elasticsearch на уровне TB. Плюсы и минусы каждого варианта?


person CaptainMcChinchillas    schedule 15.03.2016    source источник
comment
Не уверен, но, может быть, вы знакомы с elasticsearch.mesosframeworks.com?   -  person Michael Hausenblas    schedule 15.03.2016
comment
Да, это действительно страница продукта для mesos-elasticsearch.readthedocs.org/en/latest, что является первым вариантом.   -  person CaptainMcChinchillas    schedule 15.03.2016
comment
Верно, я и подозревал, но так как ссылок нет, я хотел быть уверен на все 100%;)   -  person Michael Hausenblas    schedule 15.03.2016
comment
Извините: публикация впервые! Я отредактирую сообщение, указав ссылку на сайт. Спасибо!   -  person CaptainMcChinchillas    schedule 15.03.2016


Ответы (2)


Я автор Apache Mesos Elasticsearch Framework. Я бы порекомендовал вам попробовать все эти подходы и выбрать тот, с которым у вас больше всего опыта. А когда дело доходит до производительности, убедитесь, что у вас есть требования к производительности, а затем проведите тесты. Есть и другие вещи, которые следует учитывать. Кого я коснусь в вопросах.

  1. Elasticsearch Framework для мезо является наиболее устойчивым из этих четырех вариантов. Узлы Elasticsearch запускаются как задачи Mesos. Если какая-либо из задач терпит неудачу (аппаратный или программный сбой), они перезапускаются где-нибудь в другом месте кластера Mesos. Если вы хотите добавить узлы (для увеличения производительности) или удалить узлы (для уменьшения использования ресурсов), это так же просто, как отправить однострочный запрос curl. Данные очень безопасны. Конфигурация по умолчанию (может быть переопределена) реплицирует все данные на все узлы. Таким образом, кластер может пережить катастрофическое событие и остаться с одним узлом без потери данных. Вы также можете использовать любой подключаемый модуль томов Docker для записи данных на внешний том, чтобы, если задачи умирают, данные по-прежнему содержатся в облачных томах. Есть еще несколько функций, посетите веб-сайт. Также посмотрите видео на YouTube-канале Container Solutions. Мы также разрабатываем инструменты, упрощающие разработку, см. minimesos.

  2. Это вполне разумно, но вы должны подумать, как бы вы организовали свой кластер. А что произойдет, если один или несколько контейнеров умрут? Сможете ли вы перенести эту потерю? Если да, то это может быть лучшим вариантом для DevOps (т.е. вы можете реплицировать и тестировать кластер, который выглядит как настоящий).

  3. Это единственный вариант, против которого я был бы. Это было бы хорошо для разработки, но вы столкнулись бы с серьезной проблемой производительности в производственной среде. У вас потенциально может быть виртуальная машина полного стека (бродячая) внутри другой виртуальной машины (облака). Накладные расходы не нужны. Ссылка 1, Ссылка 2.

  4. Это официальный метод, рекомендованный Elastic, который, вероятно, обеспечит максимальную производительность для данной конфигурации оборудования. Но поскольку это статические развертывания: а) большая часть ресурсов машины будет потрачена впустую (неиспользуемая ОЗУ / ЦП и т. Д.), Б) существует значительная (особенно в крупных организациях!) Задержка в предоставлении новых экземпляров (по сравнению с одним api) и c) в случае сбоя экземпляра он не будет заменен и не будет исправлен, пока кто-то его не исправит (сравните с автоматическим переключением на другой ресурс). Если ваши требования к Elasticsearch исправлены, вам не нужна гибкость, подобная DevOps, и вы не возражаете против простоя, то это, вероятно, самый простой метод (но убедитесь, что вы правильно настроили конфигурацию ES!).

Так что, если бы это был я, то я бы подумал о докерированной установке для тестирования, небольших POC и, возможно, очень небольших производственных задачах. Что-то большее, тогда я бы каждый раз выбирал вариант Mesos Elasticsearch.

person Phil Winder    schedule 16.03.2016
comment
Спасибо за отличное описание и работу с фреймворком ES. Я не ОП, но меня особенно интересует, как использовать тома RBD, такие как contiv / volplugin например. Если я правильно понимаю, вы работали с отсутствующей поддержкой драйверов томов Docker постоянных томов Mesos, правильно ли это понимание? - person Tobi; 16.03.2016
comment
Спасибо! Когда я попробовал Elasticsearch Framework, я увидел все перечисленные вами преимущества. У меня есть проблемы: 1) когда я пробовал демо-конфигурацию, он мог вызвать только одного исполнителя; два других продолжали выходить из строя и перезапускались, 2) Я не был уверен, как заменить конфигурацию elasticsearch.yml по умолчанию в пакете (не имеет большого значения - просто нужно просмотреть код, чтобы увидеть, как), 3) Это не было ' Похоже, что вы могли бы создать мастер / клиентские узлы (может быть связано с 2 или неуместными, поскольку управляются мезо?), и 4) вы не могли легко убить исполнителей (но я думаю, что это известная проблема). - person CaptainMcChinchillas; 16.03.2016
comment
@Tobi: Да, вы правы! Проверьте: github.com/mesos/elasticsearch/blob / master / docs / CaptainMcChinchillas: Поднимите вопрос или напишите нам по адресу [email protected] для получения поддержки. - person Phil Winder; 17.03.2016
comment
@CaptainMcChinchillas: Короче: 1) вероятно не хватает оперативной памяти, свяжитесь с нами. 2) Передайте конфигурационный файл, смотрите документацию, 3) Правильно, мастера / клиенты не критично, но запрос понимают. О невыполнении. 4) Это сделано специально. Очень плохо, когда умирают узлы es. Так что я сделал все, что мог, чтобы они остались живы! :-) Спасибо, дайте знать, как у вас дела. Цените все отзывы. - person Phil Winder; 17.03.2016
comment
@PhilWinder Привет! Я случайно наткнулся на этот пост и решил задать вам прямой вопрос. Что происходит с фреймворком? Я давно не видел новых коммитов. Проект еще жив и его нужно использовать? - person Michal; 16.08.2017
comment
@Michal Нет, он не активен. Финансирование было прекращено. Mesosphere опубликовали версию в dcos-universe: github.com/mesosphere/universe и теперь интегрировали более функциональную версию в github.com/mesosphere/dcos-commons. Зацените те. - person Phil Winder; 20.09.2017

У моей компании есть более или менее те же вопросы, но, возможно, чуть позже, когда дело доходит до POC и т. Д.

В настоящее время мы запускаем 3-узловой кластер ES на Mesos 0.27.1 через Marathon с собственный образ Docker. Мы монтируем хост-тома (пути) в контейнеры, что означает, что вы можете смонтировать, например, том Ceph на хосте Mesos Slave. Но это как-то довольно ручной процесс. На мой взгляд, самая большая проблема - это безопасность данных, потому что по умолчанию данные хранятся только на самом хосте, и поведение, когда приложение масштабируется в Marathon (должны использоваться ограничения, так что только один узел запускается на Mesos Раб и т. Д.).

Мы также попробовали упомянутую структуру Mesos ES несколько месяцев назад, но остались недовольны состоянием инфраструктуры. тогда. Судя по тому, что я вижу в документах, за последние месяцы ситуация значительно улучшилась, но некоторые важные функции все еще отсутствуют в Mesos (например, поддержка постоянных томов для драйверов томов Docker) ... Но это проблема не фреймворка, а Mesos.

Я скоро еще раз попробую фреймворк Mesos. Мне особенно нравится возможность установить --externalVolumeDriver, что означало бы, что теперь мы, вероятно, можем использовать драйвер тома Docker RBD (поскольку мы используем Ceph) ...

person Tobi    schedule 16.03.2016
comment
Тоби, фреймворк mesos ES поддерживает внешние тома. См. github.com/mesos/elasticsearch/blob/master / docs /. Больше отзывов - больше возможностей. Дайте мне знать, что вы думаете. Спасибо! - person Phil Winder; 17.03.2016
comment
@PhilWinder Спасибо за ваш отзыв. Чего я не понял, так это того, будут ли / как тогда отображаться тома в контейнере узла. Это делается автоматически? - person Tobi; 17.03.2016
comment
Да, это происходит автоматически. Только каталог данных отображается на том. - person Phil Winder; 17.03.2016