Ответ
Split brain — это критическая неисправность в отказоустойчивых кластерах (баз данных, файловых систем, оркестраторов), когда из-за сетевого сбоя кластер разделяется на две или более изолированные части, которые не могут общаться друг с другом. Каждая часть считает себя единственной работоспособной и продолжает обслуживать запросы на запись, что приводит к катастрофическому конфликту данных и потере консистентности.
Пример сценария: Кластер из трех нод (Node1, Node2, Node3) обеспечивает высокую доступность базы данных. Из-за проблем с сетью возникает разрыв:
- Сегмент A: Node1 (лидер)
- Сегмент B: Node2 и Node3 Оба сегмента, не видя друг друга, решают, что другой сегмент "умер". Node1 продолжает принимать запросы на запись в сегменте A, а Node2 избирает себя новым лидером в сегменте B и также принимает записи. Теперь данные в двух частях кластера расходятся.
Механизмы предотвращения Split brain в DevOps-практике:
- Кворум (Quorum): Решение принимается только если за него голосует большинство нод кластера (например, 2 из 3). Это предотвращает работу меньшинства.
- Fencing (Изоляция): При подозрении на сбой, "здоровый" сегмент принудительно отключает ("загораживает") ноды из другого сегмента, например, через отключение питания по IPMI или отзыв дисковых ресурсов в SAN.
- Таймауты и аренда (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 — основа построения надежных распределенных систем, от которых зависит работа всего стека микросервисов и оркестрации.