Динамические изменения конфигурации кластера и предотвращение разделения мозга (Split-Brain) #6
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
В текущей реализации присутствует SplitBrainDetector, использующий эвристическое обнаружение на основе таймаутов и терминов Raft.
Однако полноценный механизм динамического изменения конфигурации кластера (добавление/удаление узлов) либо не завершён, либо не интегрирован атомарно с консенсусом Raft.
JointConsensusManager объявлен, но не имеет полной реализации, а RecoveryManager выполняет восстановление узлов без атомарной синхронизации с изменениями конфигурации Raft. При возникновении сетевого разделения две группы узлов могут избрать разных лидеров (split-brain), но детектор только логирует это состояние без автоматического устранения.
Кроме того, функциональность QuarantineNode изолирует узел, но не синхронизирует это состояние с остальным кластером, что потенциально оставляет кластер в несогласованном состоянии конфигурации, где разные узлы имеют разные представления о составе кластера.
Архитектурная проблема
Как обеспечить безопасные и атомарные изменения конфигурации кластера (добавление/удаление узлов) в распределённой системе с шардированием, сохраняя консенсус и предотвращая сценарии разделения мозга?
Пример сценария
Рассмотрим кластер из 5 узлов: {A, B, C, D, E}. Во время сетевого разделения кластер распадается на две группы: {A, B, C} и {D, E}. Группа 1 избирает A лидером (терм 5), а группа 2 избирает D лидером (терм 5). SplitBrainDetector.Detect() возвращает true, указывая на ситуацию разделения мозга. Стратегия устранения — изолировать узел D. Однако нет гарантии, что узел D перестанет принимать запись, поскольку решение об изоляции не распространяется через механизм консенсуса Raft. Это нарушает фундаментальное свойство безопасности — наличие ровно одного лидера на терм.
Предлагаемые направления исследований