Как лидер уведомляется об изменении конфигурации кластера в RAFT? - PullRequest
0 голосов
/ 25 октября 2018

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

[1] Что здесь означают специальные записи?Содержит ли каждый сервер информацию в своих записях об общем количестве других серверов в кластере?Если нет, то как кандидат определяет, что он получил голоса от большинства?

[2]. Кто также уведомляет лидера об изменении конфигурации?Это новый сервер, который добавляется в кластер, через эти специальные записи?Если новый сервер делает это, я правильно понимаю: «Когда новый сервер добавляется в качестве участника без права голоса, он узнает о текущей конфигурации и увеличивает количество серверов в своей записи журнала и отправляет запрос руководителю, чтобы изменить егоconfiguartion? "

1 Ответ

0 голосов
/ 22 мая 2019
  1. Специальные записи означают, что запись журнала, когда она применяется, не вносит изменений в конечный автомат, а вместо этого представляет собой специальную структуру, которая несет информацию о конфигурации кластера.Если ваш конечный автомат представляет собой простое хранилище значений ключей, эта новая запись не будет похожа на другие (set x = 5), вместо этого она будет содержать конфигурацию кластера (обычно адрес и порт), что-то вроде [1 = {1.2.3.4, 10000}, 2 = {1.2.3.5, 10001}, ...].Да, каждый сервер имеет полную конфигурацию кластера в своем журнале, и они всегда используют самую последнюю версию.

  2. В диссертации PhD , глава 4.4,

Например, RPC AddServer и RemoveServer на рисунке 4.1 могут быть вызваны администраторами напрямую, или они могут быть вызваны сценарием, который использует серию односерверных шагов для произвольного изменения конфигурации.

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

То, как вы отправляете RPC на все серверы, - это деталь реализации, которую вы могли бы сделатьэто как отдельный «клиент», который только это делает, или с некоторыми флагами командной строки, которые сообщают новому серверу, что он также должен отправить RPC AddServer на все серверы при запуске.

Ваше понимание выглядит хорошо для меня, за исключением части, которая отправляет новую конфигурацию руководителю.Он должен транслировать AddServer RPC.Текущий руководитель затем создаст новую запись в журнале с конфигурацией, содержащей новый сервер, и начнет реплицировать ее.

...