Выбор лидера Apache zookeeper: может ли он работать только с двумя узлами?
У меня есть двухузловая система redhat с идентичным набором сервисов на каждой. Я ищу способ определить, какая служба "отвечает", а какая - "текущее резервное копирование". Так, например; service-A существует и работает на обоих узлах, но только один должен обрабатывать данные, а другой находится в спящем режиме, пока не произойдет сбой первого. То же и для других сервисов в комплекте.
Возможность выбора лидера Zookeeper выглядела достаточной; весь эфемерный и последовательный подход к znode хорошо выглядел на бумаге. Я предположил, что мне также понадобится служба zookeeper, работающая на каждом узле, для обеспечения избыточности, например, перед лицом отказа узла.
Но в документации указываются на проблемы с несколькими смотрителями зоопарка, требующими как минимум 3 экземпляров, чтобы гарантировать кворум для выбора ведущего смотрителя среди всех остальных. Поскольку у меня только два узла, это похоже на нарушение сделки.
Поэтому, прежде чем отказаться от подхода zookeeper, я подумал, что могу спросить, есть ли в zookeeper возможность конфигурации, позволяющая работать двухузловой системе. В противном случае я пойду искать следующего, наиболее подходящего для моей проблемы.
1 ответ
Вы можете запустить Zookeeper всего с двумя экземплярами. Однако это не дает вам преимущества в отказоустойчивости, потому что в этом случае кворум составляет до 2. Любой отказ одного из них приведет к тому, что ансамбль Zookeeper отклонит клиентские запросы. Вот почему конфигурация по умолчанию для ансамбля - 3 экземпляра Zookeeper, потому что иметь 2 экземпляра не лучше, чем иметь 1, так зачем создавать 2 экземпляра? На самом деле это создает больше точек сбоев, потому что, когда любой экземпляр умирает, ваш ансамбль Zookeeper останавливается, и, если один из двух выйдет из строя, с большей вероятностью потерпит неудачу только один.