Как избежать потери внутреннего состояния мастера при переключении на новый мастер во время сетевого раздела

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

На данный момент моя система выглядит так:

  1. N разных узлов, каждый из которых одинаков. 1 главный узел с простым веб-сервером.

  2. Все узлы взаимодействуют друг с другом, используя простой протокол сердцебиения, и каждый поддерживает глобальное состояние (количество доступных узлов, кто является мастером, время простоя и время работы друг друга).

  3. Если какой-либо узел не получает извещения от ведущего в течение заданного времени, он поднимает тревогу. Если достигается консенсус, что ведущий не работает, избирается новый ведущий.

  4. Если сеть узлов разделяется.

    • And the master is in minor partition, then it will stop serving request and go down by itself after a set period of time. Minor group cannot elect master (some minimum nodes require to make decision)
    • Новый мастер выбирается в основном разделе по истечении установленного времени после отсутствия ответа от старого мастера.

Теперь я столкнулся с проблемой, то есть на шаге 4 выше есть временной разрыв, когда старый мастер все еще обслуживает запросы, а новый мастер избирается на основном узле.

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


person Vikrant Biswas    schedule 01.11.2018    source источник


Ответы (1)


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

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

person kuujo    schedule 01.11.2018