Может ли Плот избрать лидера с незафиксированным журналом?
Предположим, кластер из 5 узлов (ABCDE), узел-A вначале выбирается лидером, и в то время как лидер-A выдает RPC AppendEntries подчиненному (BCDE) для репликации записи журнала (log-X), только узел-B получает и возвращает успех, в этот момент лидер-А вылетает.
Если узел C(или D или E) побеждает на следующих выборах лидера, то все в порядке, потому что только узел B имеет log-X, а это означает, что log-X не зафиксирован.
Мой вопрос: может ли узел-B (который имеет самый высокий срок и самый длинный журнал) выиграть следующие выборы лидера? Если так, будет ли узел-B распространять log-X на другие узлы?
1 ответ
Да, B может победить на выборах, если он действительно станет лидером, то первым делом он создаст запись журнала с новым термином в своем журнале и начнет реплицировать свой журнал всем подписчикам. Поскольку журнал B включает log-X, если все пойдет хорошо, в конечном итоге запись log-X будет реплицирована и будет считаться принятой.
Если узел C побеждает на выборах, тогда, когда он становится лидером, у него не будет записи log-X, и он перезапишет эту запись на узле B.
См. Раздел 5.4.2 плотной бумаги для более подробной информации.
Также это означает, что вы не можете рассматривать неудачу как означающую, что попытка входа определенно не существует, только то, что вызывающая сторона не знает результата. В разделе 8 есть несколько советов по этому вопросу.