Ticketing
Документация

Параметры Raft

ПараметрЗначение
Интервал heartbeat250 мс
Таймаут выборов500–1000 мс — новый лидер начинает избираться в течение этого времени после отказа лидера
Число узлов3 или 5 (принудительно проверяется при загрузке конфигурации — иное число блокирует запуск)
ID узлапозиция себя (cluster_self) в списке cluster_peers — поэтому порядок списка должен совпадать на всех узлах
Bootstrapчерез 500 мс после старта все узлы инициализируются с одинаковым составом участников; при присоединении к уже инициализированному кластеру игнорируется
Хранение логав памяти (энергозависимо) — перезапущенный узел восстанавливается через репликацию / снапшот
Обнаружение истечения leaseлидер обнаруживает с периодом 100 мс и фиксирует Expire через консенсус
Гранулярность таймаута waitтаймаут ожидания (T) тоже определяется на том же 100-мс тике — может прийти с задержкой до 100 мс

Почему число узлов — 3 или 5

Для commit нужно большинство. Чётные конфигурации только увеличивают стоимость, не повышая отказоустойчивость, поэтому сервер их отклоняет.

Число узловБольшинствоДопустимые одновременные отказы
220 — остановка даже при отказе одного узла. Не лучше одиночного режима
321
431 — как у 3 узлов (только больше стоимость)
532

Сводка поведения при отказах

СитуацияПоведение
Клиентский запрос на нелидирующий узелM (адрес лидера), либо E no_leader, если лидер неизвестен
Отказ лидерановый лидер избирается за 500–1000 мс. В этот период запросы получают E no_leader → клиент повторяет попытку
Момент смены лидераожидавшие запросы захвата завершаются через M/E no_leader, клиент повторяет попытку на новом лидере
Перезапуск узластарт с пустым состоянием → догон через репликацию лога / снапшот от пиров
Потеря большинстваcommit невозможен → запись останавливается (безопасность прежде всего), автоматически возобновляется при восстановлении большинства

Термины

  • Кворум (quorum) — более половины всех узлов (2 из 3, 3 из 5). Любое решение фиксируется только при согласии кворума, поэтому две разделённые сетевым сбоем группы никогда не могут одновременно принять разные решения.
  • Таймаут выборов (election timeout) — время ожидания, по истечении которого follower считает, что лидер умер (если за это время не было heartbeat), и начинает выборы. У каждого узла оно случайно отличается, что снижает вероятность одновременного перехода нескольких узлов в кандидаты.