Что такое ситуация «split brain» (раскол мозга) в распределенных системах?

«Что такое ситуация «split brain» (раскол мозга) в распределенных системах?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Split brain — это критическая неисправность в отказоустойчивых кластерах (баз данных, файловых систем, оркестраторов), когда из-за сетевого сбоя кластер разделяется на две или более изолированные части, которые не могут общаться друг с другом. Каждая часть считает себя единственной работоспособной и продолжает обслуживать запросы на запись, что приводит к катастрофическому конфликту данных и потере консистентности.

Пример сценария: Кластер из трех нод (Node1, Node2, Node3) обеспечивает высокую доступность базы данных. Из-за проблем с сетью возникает разрыв:

  • Сегмент A: Node1 (лидер)
  • Сегмент B: Node2 и Node3 Оба сегмента, не видя друг друга, решают, что другой сегмент "умер". Node1 продолжает принимать запросы на запись в сегменте A, а Node2 избирает себя новым лидером в сегменте B и также принимает записи. Теперь данные в двух частях кластера расходятся.

Механизмы предотвращения Split brain в DevOps-практике:

  1. Кворум (Quorum): Решение принимается только если за него голосует большинство нод кластера (например, 2 из 3). Это предотвращает работу меньшинства.
  2. Fencing (Изоляция): При подозрении на сбой, "здоровый" сегмент принудительно отключает ("загораживает") ноды из другого сегмента, например, через отключение питания по IPMI или отзыв дисковых ресурсов в SAN.
  3. Таймауты и аренда (Lease): Лидер периодически обновляет свою "аренду" (lease). Если он не успевает это сделать из-за сетевых проблем, другие ноды считают его мертвым только после истечения срока аренды, давая время на восстановление связи.

Пример настройки в etcd (ключевой компонент Kubernetes):

# Запуск etcd-ноды с явным указанием размера кластера для расчета кворума
etcd 
  --name node1 
  --initial-advertise-peer-urls http://node1:2380 
  --listen-peer-urls http://0.0.0.0:2380 
  --listen-client-urls http://0.0.0.0:2379 
  --advertise-client-urls http://node1:2379 
  --initial-cluster-token my-etcd-cluster 
  --initial-cluster "node1=http://node1:2380,node2=http://node2:2380,node3=http://node3:2380" 
  --initial-cluster-state new 
  --heartbeat-interval=1000   # Интервал отправки "пульса" лидера
  --election-timeout=5000       # Таймаут перед началом новых выборов

Почему это важно: Понимание и предотвращение split brain — основа построения надежных распределенных систем, от которых зависит работа всего стека микросервисов и оркестрации.