Как лидер может реплицировать журналы, когда последователь восстанавливается с большим числом терминов в RAFT?

Скажем, у меня в плоту 3 узла. Из-за сбоя сети узел 3 отделен от двух других узлов. Затем узел 3 просто всегда становится кандидатом, отправляет аргументы requestVote другим и обнаруживает, что не может получить достаточно голосов. Затем узел 3 увеличивает срок действия и снова пытается запросить голоса. Таким образом, срок узла 3 значительно больше, чем у других, которые фиксируют журналы 102, 103, 104, 105.

Через некоторое время сеть восстанавливается, и узел 3 снова присоединяется к группе и становится последователем. Однако из-за большого срока он всегда отклоняет AppendEntries от лидера (узел 1). Как узел 3 может восстановить логи от 102 до 105?

Node 1(leader):
* logs [101, 102, 103, 104, 105]
* term [1,   2,   2,   2,   2  ...]
Node 2 (follower)
* logs [101, 102, 103, 104, 105]
* term [1,   2,   2,   2,   2  ...]
Node 3 
* logs [101]
* term [1,   2,   3,   4,   5  ...]

person Haoyuan Ge    schedule 07.10.2016    source источник


Ответы (1)


Вы должны посмотреть, как лидер будет обрабатывать ответ от этого последователя после того, как он снова присоединится к кластеру. Когда лидер получает ответ AppendEntries, указывающий, что другой узел имеет более высокий член, лидер обновит свой собственный срок и уйдет в отставку, чтобы принудительно провести новые выборы. Во время протокола выборов все кандидаты также узнают о более высоком сроке и обновят свои собственные условия. Затем будет выбран какой-нибудь лидер, у которого все еще есть все зафиксированные записи, и, имея термин> = этот разделенный последователь, скопирует на него записи комитета.

person kuujo    schedule 07.10.2016