Сообщения сбрасываются на RAFT? - PullRequest
0 голосов
/ 06 апреля 2019

Я читаю о плоту, но я немного запутался, когда дело доходит до консенсуса после сетевого раздела.

Итак, учитывая кластер из 2 узлов, 1 Лидер, 1 Последователь.

Перед разбиением, там, где X-сообщения написаны, успешно реплицированы, а затем представьте, что проблема с сетью привела к разбиению, поэтому есть 2 раздела, A (бывший лидер) и B (бывший последователь), которые теперь оба лидеры (получение пишет):

before partition | Messages  |x| Partition   | Messages  
Leader           | 0 1 2 3 4 |x| Partition A | 5  6  7  8  9
Follower         | 0 1 2 3 4 |x| Partition B | 5' 6' 7' 8' 9'

После события раздела мы выяснили, что происходит?

а) Мы выбираем 1 нового лидера и рассматриваем его журнал? (сбросить сообщения нового подписчика? например:

0 1 2 3 4 5 6 7 8 9 (total of 10 messages, 5 dropped)

или даже:

0 1 2 3 4 5' 6' 7' 8' 9' (total of 10 messages, 5 dropped)

(в зависимости от того, какой узел стал лидером)

б) Мы выбираем нового лидера и находим способ достичь консенсуса по всем сообщениям?

0 1 2 3 4 5 5' 6 6' 7 7' 8 8' 9 9' (total of 15 messages, 0 dropped)

если b, есть ли какой-то особый способ сделать это? или это зависит от реализации клиента? (например: метка времени сообщения ...)

1 Ответ

0 голосов
/ 07 апреля 2019

Журнал лидеров считается «журналом», когда лидер избирается и успешно записал свою первоначальную запись в журнале на срок. Однако в вашем случае исходная предпосылка неверна. В кластере из 2 узлов одному узлу требуется 2 голоса, а не 1. Таким образом, при наличии сетевого раздела ни один из узлов не будет лидером.

...