Параметры Raft
| Параметр | Значение |
|---|---|
| Интервал heartbeat | 250 мс |
| Таймаут выборов | 500–1000 мс — новый лидер начинает избираться в течение этого времени после отказа лидера |
| Число узлов | 3 или 5 (принудительно проверяется при загрузке конфигурации — иное число блокирует запуск) |
| ID узла | позиция себя (cluster_self) в списке cluster_peers — поэтому порядок списка должен совпадать на всех узлах |
| Bootstrap | через 500 мс после старта все узлы инициализируются с одинаковым составом участников; при присоединении к уже инициализированному кластеру игнорируется |
| Хранение лога | в памяти (энергозависимо) — перезапущенный узел восстанавливается через репликацию / снапшот |
| Обнаружение истечения lease | лидер обнаруживает с периодом 100 мс и фиксирует Expire через консенсус |
Гранулярность таймаута wait | таймаут ожидания (T) тоже определяется на том же 100-мс тике — может прийти с задержкой до 100 мс |
Почему число узлов — 3 или 5
Для commit нужно большинство. Чётные конфигурации только увеличивают стоимость, не повышая отказоустойчивость, поэтому сервер их отклоняет.
| Число узлов | Большинство | Допустимые одновременные отказы |
|---|---|---|
| 2 | 2 | 0 — остановка даже при отказе одного узла. Не лучше одиночного режима |
| 3 | 2 | 1 |
| 4 | 3 | 1 — как у 3 узлов (только больше стоимость) |
| 5 | 3 | 2 |
Сводка поведения при отказах
| Ситуация | Поведение |
|---|---|
| Клиентский запрос на нелидирующий узел | M (адрес лидера), либо E no_leader, если лидер неизвестен |
| Отказ лидера | новый лидер избирается за 500–1000 мс. В этот период запросы получают E no_leader → клиент повторяет попытку |
| Момент смены лидера | ожидавшие запросы захвата завершаются через M/E no_leader, клиент повторяет попытку на новом лидере |
| Перезапуск узла | старт с пустым состоянием → догон через репликацию лога / снапшот от пиров |
| Потеря большинства | commit невозможен → запись останавливается (безопасность прежде всего), автоматически возобновляется при восстановлении большинства |
Термины
- Кворум (quorum) — более половины всех узлов (2 из 3, 3 из 5). Любое решение фиксируется только при согласии кворума, поэтому две разделённые сетевым сбоем группы никогда не могут одновременно принять разные решения.
- Таймаут выборов (election timeout) — время ожидания, по истечении которого follower считает, что лидер умер (если за это время не было heartbeat), и начинает выборы. У каждого узла оно случайно отличается, что снижает вероятность одновременного перехода нескольких узлов в кандидаты.