Как выбрать главный узел среди узлов, работающих в кластере?

Я пишу управляемый облачный стек (поверх облачных провайдеров аппаратного уровня, таких как EC2), и вскоре я столкнусь с проблемой:

Как несколько идентичных узлов решают, какой из них из них становится мастером? (Например, подумайте о 5 серверах, работающих на EC2. Один из них должен стать мастером, а другие должны стать рабами.)

Я читал описание алгоритма, используемого MongoDB , и оно кажется довольно сложным, а также зависит от концепции голосов - т.е. два оставленных узла выиграли Ничего не могу решить. Также их подход имеет значительную задержку до того, как он даст результаты.

  1. Интересно, есть ли какие-нибудь менее сложные подходы, охватывающие KISS? Широко ли они используются или их внедрение рискованно?

  2. Предположим, у нас уже есть список серверов. Затем мы можем просто выбрать тот, который работает и имеет наименьший числовой IP-адрес. Каковы недостатки этого подхода?

  3. Почему алгоритм MongoDB такой сложный?

Это дубликат Как выбрать нового мастера в кластере? , который дает меньше деталей и не получил ответа на 6 месяцев, так что я считаю, что уместно начать новый вопрос.

(Стек, над которым я работаю, имеет открытый исходный код, но он находится на очень ранней стадии разработки, поэтому не приводим здесь ссылку.)

ОБНОВЛЕНИЕ: на основе ответов я разработал простой алгоритм консенсуса, вы можете найти реализацию JavaScript (CoffeeScript) на GitHub: most.js .

24
задан Community 23 May 2017 в 11:46
поделиться