Организация безопасного кластера

Здравствуйте!
Я новичок в эластике, но мы пытаемся внедрить его в наш проект.
Сейчас стоит задача о создании безопасной структуры кластера. Я прочитал несколько статей, но не все понятно, не могли бы вы ответить на пару моих вопросов?

  1. Для создания надежного кластера нужно как минимум 3 ноды?

  2. Для защиты от split-brain нужно выставит параметр minimum_master_nodes равным 2, при наличии 3х нод. Мне не понятно, что делает этот параметр? В кластере будет 2 мастер-ноды?

  3. В некоторых статьях, упоминается что хранить данные на мастер-ноде не является хорошим тоном, это так?

  4. Так же я прочитал, что для мастер-нод можно использовать менее производительные машины? Это позволяет взять больше машин, за те же деньги и защититься от split-brain.

  5. Сколько балансировщиков должно быть в кластере? 1?

Буду благодарен за ваши советы и комментарии!

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

На данный момент, у нас 1 мощный сервер. Для нас важно не только защитить данные от потери, но и обеспечить бесперебойную работу кластера при отказе 1 ноды.

Бесперебойную работу и не чтение данных и на запись? Или только на чтение?

Желательно и то, и другое, но это не строго. Все зависит от необходимых средств для этого.

Начнем с одной ноды. Если эта нода падает - все пропало.

Добавляем вторую ноду. Если одна из нод падает - то все хорошо вторая нода становится (или остается) мастером и все работает. Однако, если нода не падает, а вместо этого теряет связь с первой - у нас получается сплит брейн и потеря данных, что не хорошо. Чтобы решить эту проблему ставим minimum_master_node: 2. Теперь если одна из нод падает или отделяется обе ноды перестают быть мастерами, и кластер переходим в режим только для чтение. Это лучше, чем сплит брейн, но не идеально.

Добавляем третью ноду и оставляем minimum_master_node: 2. Теперь если одна из нод отделяется или падает, две других все еще могут избрать мастера, потому что их 2. То есть все работает при потере одного сервера. Мы можем писать и читать. Но кто-то нам говорить, что это плохой тон. Почему? Дело в том, что у нас мастера в данной архитектуре работают как мастера, так и сервера данных. Поэтому если перегрузка по поисковому или индексному трафику может перегрузить мастера и вызвать нестабильность в кластере. Как это исправить?

Начинаем и одной дата ноды (выключаем на ней роль мастера), добавляем другую дата ноду, и 3 слабеньких мастер-ноды. Теперь у нас есть защита от падения любой ноды. Если падает нода с данными - у нас есть вторая. Если падает мастер - у нас есть еще две. Идеальный вариант, но стоит ли он того - зависит от бюджета, от того на сколько вы склоны к рискам, и от стабильность вашего трафика.

1 Like

Игорь, в вашем последнем сообщении сказано, что идеальным вариантом является 2 дата-ноды + 3 мастер-ноды, не могли бы вы пояснить, почему именно 3 мастер-ноды, а не две?

По тем же причинам, что и с 2-мя нодами. Если вы одну мастер-ноду потеряете, то вторая не сможет стать мастером из-за minimum_master_node: 2.

А, кажется я понял, голосовать за выбор мастера могут только другие мастер-ноды, а не дата-ноды, поэтому нужно именно 3 мастера. Верно?

Верно.

Игорь, спасибо за вашу помощь!
И последний вопрос, роль балансировщика нужно выносить на отдельную машину? Или где ее лучше установить на мастере или дата-ноде?

Опять же зависит от размера кластера и того, что использует этот кластер. Можно вынести на отдельные 2 ноды, но в вашем случае, я бы вообще начал с 3-х нод, и перешел бы к более сложным архитектурам, если 3 ноды работать не будут. "Преждевременная оптимизация - корень всех зол."

Игорь, приветствую!
Возможно глупые вопросы, а три ноды - это три отдельных сервера, которые являются мастер и дата нодами одновременно?

Данные реплицируется с самого мастеровитого на остальные?

Три сервера в одном ДЦ находятся или можно в разных?

Если в разных ДЦ (каждая нода и мастер и данных хранит и настройка стоит minimum_master_node: 2), то не будет ли тормозить запись и чтение? Как будет определяться куда сначала идет запись и откуда сначала должно идти чтение? или к какой из нод обращаюсь с той и происходит работа?

а три ноды - это три отдельных сервера, которые являются мастер и дата нодами одновременно?

да

Данные реплицируется с самого мастеровитого на остальные?

нет, вы путаете понятия мастера в кластере и праймари шарды. Праймари реплицирует. Мастер только изменяет состояние кластера и посылает изменения всем остальным нодам.

Три сервера в одном ДЦ находятся или можно в разных?

Можно в разных, но только если между ними связь очень хорошая и она находятся рядом.

то не будет ли тормозить запись и чтение? Как будет определяться куда сначала идет запись и откуда сначала должно идти чтение? или к какой из нод обращаюсь с той и происходит работа?

Опять же, почитайте про роль мастера в кластере и про разницу между праймари и репликой. Можно почитать тут.

Игорь, спасибо!

Игорь, подскажите, пожалуйста, если у нас есть 2 дата ноды + 1 мастер нода, в случае потери мастер ноды кластер перейдет в состояние "только для чтения". А что будет с кластером если данные мастер ноды будут потеряны безвозвратно? Можно подключить новую мастер ноду и все само заработает?

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.