Здравствуйте!
Я новичок в эластике, но мы пытаемся внедрить его в наш проект.
Сейчас стоит задача о создании безопасной структуры кластера. Я прочитал несколько статей, но не все понятно, не могли бы вы ответить на пару моих вопросов?
Для создания надежного кластера нужно как минимум 3 ноды?
Для защиты от split-brain нужно выставит параметр minimum_master_nodes равным 2, при наличии 3х нод. Мне не понятно, что делает этот параметр? В кластере будет 2 мастер-ноды?
В некоторых статьях, упоминается что хранить данные на мастер-ноде не является хорошим тоном, это так?
Так же я прочитал, что для мастер-нод можно использовать менее производительные машины? Это позволяет взять больше машин, за те же деньги и защититься от split-brain.
Сколько балансировщиков должно быть в кластере? 1?
Есть несколько архитектур, которые во многом зависят от размера кластера. Если забыть про все что вы читали, то какой размер будет у вашего кластера в данный момент?
На данный момент, у нас 1 мощный сервер. Для нас важно не только защитить данные от потери, но и обеспечить бесперебойную работу кластера при отказе 1 ноды.
Начнем с одной ноды. Если эта нода падает - все пропало.
Добавляем вторую ноду. Если одна из нод падает - то все хорошо вторая нода становится (или остается) мастером и все работает. Однако, если нода не падает, а вместо этого теряет связь с первой - у нас получается сплит брейн и потеря данных, что не хорошо. Чтобы решить эту проблему ставим minimum_master_node: 2. Теперь если одна из нод падает или отделяется обе ноды перестают быть мастерами, и кластер переходим в режим только для чтение. Это лучше, чем сплит брейн, но не идеально.
Добавляем третью ноду и оставляем minimum_master_node: 2. Теперь если одна из нод отделяется или падает, две других все еще могут избрать мастера, потому что их 2. То есть все работает при потере одного сервера. Мы можем писать и читать. Но кто-то нам говорить, что это плохой тон. Почему? Дело в том, что у нас мастера в данной архитектуре работают как мастера, так и сервера данных. Поэтому если перегрузка по поисковому или индексному трафику может перегрузить мастера и вызвать нестабильность в кластере. Как это исправить?
Начинаем и одной дата ноды (выключаем на ней роль мастера), добавляем другую дата ноду, и 3 слабеньких мастер-ноды. Теперь у нас есть защита от падения любой ноды. Если падает нода с данными - у нас есть вторая. Если падает мастер - у нас есть еще две. Идеальный вариант, но стоит ли он того - зависит от бюджета, от того на сколько вы склоны к рискам, и от стабильность вашего трафика.
Игорь, в вашем последнем сообщении сказано, что идеальным вариантом является 2 дата-ноды + 3 мастер-ноды, не могли бы вы пояснить, почему именно 3 мастер-ноды, а не две?
Игорь, спасибо за вашу помощь!
И последний вопрос, роль балансировщика нужно выносить на отдельную машину? Или где ее лучше установить на мастере или дата-ноде?
Опять же зависит от размера кластера и того, что использует этот кластер. Можно вынести на отдельные 2 ноды, но в вашем случае, я бы вообще начал с 3-х нод, и перешел бы к более сложным архитектурам, если 3 ноды работать не будут. "Преждевременная оптимизация - корень всех зол."
Игорь, приветствую!
Возможно глупые вопросы, а три ноды - это три отдельных сервера, которые являются мастер и дата нодами одновременно?
Данные реплицируется с самого мастеровитого на остальные?
Три сервера в одном ДЦ находятся или можно в разных?
Если в разных ДЦ (каждая нода и мастер и данных хранит и настройка стоит minimum_master_node: 2), то не будет ли тормозить запись и чтение? Как будет определяться куда сначала идет запись и откуда сначала должно идти чтение? или к какой из нод обращаюсь с той и происходит работа?
а три ноды - это три отдельных сервера, которые являются мастер и дата нодами одновременно?
да
Данные реплицируется с самого мастеровитого на остальные?
нет, вы путаете понятия мастера в кластере и праймари шарды. Праймари реплицирует. Мастер только изменяет состояние кластера и посылает изменения всем остальным нодам.
Три сервера в одном ДЦ находятся или можно в разных?
Можно в разных, но только если между ними связь очень хорошая и она находятся рядом.
то не будет ли тормозить запись и чтение? Как будет определяться куда сначала идет запись и откуда сначала должно идти чтение? или к какой из нод обращаюсь с той и происходит работа?
Опять же, почитайте про роль мастера в кластере и про разницу между праймари и репликой. Можно почитать тут.
Игорь, подскажите, пожалуйста, если у нас есть 2 дата ноды + 1 мастер нода, в случае потери мастер ноды кластер перейдет в состояние "только для чтения". А что будет с кластером если данные мастер ноды будут потеряны безвозвратно? Можно подключить новую мастер ноду и все само заработает?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.