Что, если последователь теряет своего лидера в ситуации с двумя узлами (только лидер и кандидат) в Raft? - PullRequest
0 голосов
/ 09 мая 2020

Я изучаю алгоритм Raft. Моя реализация соответствует следующей ситуации:

  1. 1-лидер-1-последователь установлена;
  2. выключить лидера;
  3. последователь не получает пульса, поэтому становится кандидат;
  4. кандидат продолжает отправлять запрос VoteRequest партнеру (уже отключен) и терпит неудачу;
  5. тайм-аут выборов без избранного лидера;
  6. кандидат начинает другую сессию кандидата, фактически повторяется 4 -6 ...

Я не вижу, как решить эту ситуацию в документах Raft (возможно, я что-то пропустил).

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

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

Другая идея состоит в том, чтобы трактовать сетевую ошибку запросов RequestVote как «Голосование разрешено». (все еще волнуйтесь, сломается ли он что-нибудь)

Я знаю, что эта ситуация может быть вызвана «всего двумя узлами». Однако даже если есть 3 узла (так что установлена ​​ситуация 1-лидер-2-ведомый), тогда, если 2 лидера, соответственно, отключены, оставшийся ведомый все еще может вести себя так.

1 Ответ

0 голосов
/ 13 мая 2020

То, что вы описываете как проблему, на самом деле является git ситуацией.

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

...