минимальный размер кластера activemq с реплицированным хранилищем leveldb

Каково обоснование требования по крайней мере 3 экземпляров ActiveMQ и 3 серверов ZooKeeper для выполнения установки ведущий/подчиненный с реплицированным хранилищем LevelDB? Если это требование связано с использованием ZooKeeper, для которого требуется не менее 3 серверов, в чем причина того, что ZooKeeper требует не менее 3 серверов для обеспечения надежности?

  • Это делается для обеспечения согласованности в случаях сетевых разделов (путем жертвования доступностью на меньшем меньшем разделе), поскольку в конфигурации основного резервного копирования с 2 узлами невозможно различить отказавший одноранговый узел или оба узла, находящиеся в разных сетевых разделах?
  • Это для обеспечения устойчивости к византийским сбоям, когда вам нужно 2f + 1 узлов, чтобы пережить неисправные узлы (учитывая ТОЛЬКО сбои, требуется, чтобы только f + 1 узлы выдержали f сбоев)?

Или есть какая-то другая причина?

Спасибо!


person sun    schedule 26.11.2014    source источник


Ответы (1)


Zookeeper требует как минимум 3 сервера из-за того, как он выбирает нового мастера Activemq. Zookeeper требует большинства (n/2+1) для избрания нового хозяина. Если у него нет этого большинства, мастер не будет выбран, и система выйдет из строя. По той же причине вы используете нечетное количество серверов Zookeepers. (Например, 3 сервера дают ту же частоту отказов, что и 4, из-за большинства, все равно можно потерять только 1 сервер.)

Для Activemq необходимость как минимум 3 серверов определяется тем, как синхронизируются сообщения, и тем фактом, что при выборе нового мастера требуется как минимум кворум узлов (N/2+1), чтобы иметь возможность идентифицировать сервер. последние обновления. ActiveMQ будет синхронизировать сообщения с 1 ведомым устройством, а затем ответит OK. Затем он будет асинхронно синхронизироваться со всеми остальными ведомыми устройствами. Если кворум отсутствует при сбое узла, то Zookeeper не сможет определить, какой узел обновляется чаще всего. Вот что происходит, когда у вас изначально всего 2 узла, поэтому рекомендуется как минимум 3.

С сайта ActiveMQ в разделе "Как это работает":

Все операции обмена сообщениями, для которых требуется синхронизация с диском, перед завершением будут ожидать репликации обновления на кворум узлов. Поэтому, если вы настроите хранилище с репликами = 3, размер кворума будет (3/2 + 1) = 2. Мастер сохранит обновление локально и подождет, пока 1 другой ведомый сохранит обновление, прежде чем сообщить об успешном завершении. Другой способ думать об этом состоит в том, что хранилище будет выполнять синхронную репликацию к кворуму узлов репликации и репликацию асинхронной репликации к любым дополнительным узлам.

Когда избирается новый мастер, вам также нужен как минимум кворум узлов в сети, чтобы иметь возможность найти узел с последними обновлениями. Узел с последними обновлениями станет новым мастером. Поэтому рекомендуется запускать как минимум 3 узла реплики, чтобы можно было отключить один из них, не страдая от перебоев в работе службы.

person czobrisky    schedule 02.12.2014
comment
Спасибо - однако это не отвечает на мой вопрос: - person sun; 05.12.2014
comment
Спасибо - однако это не отвечает на мой вопрос, почему, например. разработчики activemq решили синхронизировать сообщения с кворумом узлов? Это для гарантии согласованности в случае сетевых разделов или просто потому, что для зоопарка уже требуется 3 сервера? При наличии надежной сети можно было бы реализовать кластеры ведущий/подчиненный, которые могут пережить f сбоев при сбоях, если у вас есть процессы f+1, что явно намного меньше, чем требуется 2f+1 процессов для выживания f сбоев. - person sun; 05.12.2014
comment
Это для консистенции. Хотя я согласен, что в некоторых случаях это не имеет полного смысла, их алгоритм по умолчанию для выбора нового мастера требует n/2+1 доступных узлов. Частично это решение связано с их механизмом синхронизации и тем фактом, что вам нужно как минимум 2 доступных узла, чтобы определить, какие из них имеют самые обновленные сообщения. Я думаю, что было бы более разумно, если бы им постоянно требовалось как минимум 2 узла, поэтому вам было бы лучше переключаться при сбое, в основном n-2 узла могут быть потеряны. Хотя я уверен, что у них были на это причины. - person czobrisky; 12.12.2014