Консульская поддержка или альтернатива для 2 узлов

Я хочу использовать consul для 2-узлового кластера. Недостатком является отсутствие отказоустойчивости для двух узлов:

https://www.consul.io/docs/internals/consensus.html

Есть ли в Consul способ провести последовательные выборы лидера только с двумя узлами? Можно ли изменить алгоритм консенсуса Consul Raft?

Большое спасибо.


person Alfonso Tienda    schedule 31.10.2017    source источник
comment
Почему вы не можете добавить еще один узел?   -  person GManNickG    schedule 03.11.2017
comment
Это дорого. Это два узла по 15 тыс. $.   -  person Alfonso Tienda    schedule 06.11.2017


Ответы (3)


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

Чтобы ответить на вопрос протокола, нет, нет возможности запустить двухузловой кластер с отказоустойчивостью в Raft. Чтобы было ясно, вы можете безопасно запустить кластер с двумя узлами и без проблем - он будет доступен и будет работать, как любой другой кластер. Просто когда одна машина выходит из строя, потому что ваша отказоустойчивость равна нулю, вы потеряете доступность и больше не добьетесь прогресса. Но безопасность никогда не ставится под угрозу - ваши данные по-прежнему постоянно хранятся на этих машинах.

Даже за пределами Raft нет возможности запустить двухузловой кластер и гарантировать прогресс в случае единственного сбоя. Это фундаментальный предел. В общем, если вы хотите поддерживать f-отказы (то есть оставаться безопасными и доступными), вам нужно 2f + 1 узлов.

Есть не-Raft способы улучшить ситуацию. Например, Flexible Paxos показывает, что мы можем потребовать оба узла для выбора лидера (как это уже есть в Raft), но только один узел для репликации. Это позволит вашему кластеру продолжить работу в некоторых случаях сбоя, когда Raft остановится. Но худший случай остается прежним: всегда возникают сбои, из-за которых любой двухузловой кластер становится недоступным.

Тем не менее, я все равно не знаю о каких-либо практических реализациях гибкого paxos.

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

person GManNickG    schedule 06.11.2017
comment
Могу ли я добавить узел с единственной целью - проголосовать за консенсус в консуле? Дешевый узел / сервис, позволяющий достичь консенсуса. Узел, который никогда не будет кандидатом. - person Alfonso Tienda; 07.12.2017
comment
Это интересная идея. Хотя, опять же, не думаю, что вы найдете что-то подобное. Однако может быть полезно получить более подробную информацию: по каким данным вы хотите достичь консенсуса? - person GManNickG; 09.12.2017
comment
Только для избрания лидера. - person Alfonso Tienda; 12.12.2017
comment
@AlfonsoTienda: Это выборы лидера между двумя основными узлами? Что произойдет, если они оба думают, что они лидеры? Извините за придирчивость, но чем больше деталей, тем лучше. :) В зависимости от того, чем вы хотите заниматься (например, с избранным лидером), могут быть альтернативные решения. Распределенный консенсус на самом деле довольно силен в своих гарантиях, и если вам не нужны все из них, может сработать что-то более простое. - person GManNickG; 13.12.2017

Говоря об изменении протокола, FLP предоставляет доказательство невозможности, в котором говорится, что консенсус не может быть достигнут, если в системе меньше 2f + 1 для f сбоев (отказоустойчивость). Хотя безопасность обеспечивается, но прогресс (живучесть) не может быть обеспечен.

Я думаю, что варианты, предложенные в предыдущем посте, являются лучшими.

person Ishani Gupta    schedule 10.11.2017

Для выбора лидера в самой документации Консула требуется 3 узла. Это зависит от механизма проверки работоспособности, а также от сеансов. По сути, сеансы - это распределенные блокировки, которые автоматически снимаются по TTL или при сбое службы.

Чтобы построить 2-узловой кластер Consul, мы должны использовать другой подход, якобы называемый Leader Lease. Поскольку у нас уже есть КВ-хранилище Consul с поддержкой CAS, то до истечения такого-то времени мы можем просто написать в него, какая машина является лидером. Пока лидер жив и здоров, он может периодически продлевать время. Если лидер умрет, его быстро заменят. Чтобы этот подход сработал, достаточно синхронизировать время на машинах с помощью ntpd, и когда лидер выполняет какое-либо действие, убедитесь, что у него осталось достаточно времени для выполнения этого действия.

В KV-хранилище создается ключ, содержащий что-то вроде «узел X является лидером до момента Y», где Y рассчитывается как текущее время + некоторый временной интервал (T). В качестве лидера узел X обновляет запись один раз каждые T / 2 или T / 3 единицы времени, тем самым расширяя свою роль лидера. Если узел падает или не может добраться до KV-хранилища, по истечении интервала (T) его место займет узел, который первым обнаружит, что роль лидера была освобождена. CAS необходим для предотвращения состояния гонки, если два узла одновременно пытаются стать лидером. CAS Указывает на использование операции проверки и установки. Это очень полезно в качестве строительного блока для более сложных примитивов синхронизации. Если индекс равен 0, Consul поместит ключ только в том случае, если он еще не существует. Если индекс не равен нулю, ключ устанавливается только в том случае, если индекс соответствует ModifyIndex этого ключа.

person Victor Pronchev    schedule 03.12.2018