← Назад к вопросам

Что такое split brain?

1.7 Middle🔥 111 комментариев
#Базы данных#Облачные технологии

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Split Brain в распределённых системах?

Split Brain (или "расщепление мозга") — это критическое состояние в распределённых системах, особенно в кластерах высокой доступности (High Availability, HA), когда узлы кластера теряют связь друг с другом, но продолжают работать независимо, считая остальные узлы вышедшими из строя. Это приводит к ситуации, когда разные части системы одновременно считают себя активными (primary/leader) и начинают обслуживать запросы или управлять общими ресурсами независимо, что вызывает несогласованность данных, конфликты и потенциальную потерю информации.

Основные причины возникновения Split Brain

  • Сетевые сбои: Разрыв связи между узлами кластера или сегментация сети (network partition) — самая частая причина. Например, из-за отказа сетевого оборудования или проблем с маршрутизацией.
  • Чрезмерная нагрузка на узел: Узел может стать настолько перегруженным (высокая загрузка CPU, нехватка памяти), что перестаёт своевременно отправлять или получать heartbeat-сообщения, что интерпретируется другими узлами как его отказ.
  • Проблемы с оборудованием или ПО: Сбой на уровне операционной системы, зависание виртуальной машины или сбой в работе самого ПО кластеризации.
  • Некорректная конфигурация: Неправильно настроенные таймауты, кворум или механизмы обнаружения сбоев (failure detection).

Последствия Split Brain

Последствия могут быть катастрофическими и включают:

  • Повреждение данных (Data Corruption): Два узла могут одновременно записывать изменения в один и тот же файл или блок данных (например, в общем хранилище SAN/NFS).
  • Потеря данных (Data Loss): Конфликтующие операции записи могут привести к перезаписи актуальных данных устаревшими.
  • Нарушение целостности приложений: Например, в кластере баз данных могут быть созданы две разные транзакции с одинаковыми первичными ключами.
  • Создание конфликтующих сервисов: Два узла могут запустить один и тот же виртуальный IP-адрес (VIP), что приведёт к конфликту ARP в сети.
  • Двойная трата ресурсов (Resource Double-Spend): В системах управления задачами одна задача может быть запущена на двух узлах одновременно.

Пример сценария Split Brain

Представьте кластер из двух серверов (Node A и Node B), управляющих общей базой данных и использующих общий виртуальный IP (VIP) для доступа клиентов.

  1. Нормальное состояние: Узлы обмениваются heartbeat-сообщениями. Node A — активный (primary), обслуживает запросы через VIP. Node B — пассивный (standby), готовится к takeover.
  2. Сбой сети: Сетевой канал между Node A и Node B разрывается. Каждый узел перестаёт получать heartbeat от другого.
  3. Развитие Split Brain:
    *   **Node A** считает, что Node B вышел из строя. Поскольку он и так уже primary, он продолжает работать и обслуживать запросы через VIP.
    *   **Node B** считает, что Node A вышел из строя. Согласно алгоритму кластера, он производит **takeover**, переводит свои службы в активное состояние и **также объявляет VIP за собой**. Теперь в сети есть **два сервера с одинаковым IP-адресом**.
  1. Конфликт: Клиенты начинают отправлять запросы на обновление данных то на один узел, то на другой (в зависимости от ARP-кэша маршрутизаторов). Каждый узел независимо записывает изменения в общее хранилище данных. Возникает полная несогласованность.

Стратегии предотвращения и разрешения

Для борьбы с Split Brain используются следующие механизмы:

  1. Кворум (Quorum):
    *   Принцип: Решение о переходе в активное состояние принимается не одним узлом, а большинством узлов кластера.
    *   Реализация: Кластер из 3 или более узлов. При потере связи узел может стать активным, только если он может образовать кворум (например, 2 из 3 узлов). Изолированный узел (1 из 3) остаётся в пассивном состоянии или отключает свои ресурсы.
    *   Пример конфигурации кворум-диска в Pacemaker/Corosync (Linux HA):

    ```bash
    # Проверка статуса кворума в Pacemaker
    pcs status
    # Вывод будет содержать строки вида:
    # Stack: corosync
    # Current DC: node1 (version x.x.x) - partition with quorum
    ```

2. Выделенный устройство-свидетель (Witness или Tie-Breaker):

    *   Принцип: Используется внешний арбитр (отдельный сервер, устройство хранения, облачный endpoint), доступ к которому требуется для подтверждения легитимности. Узел, сохранивший связь с Witness, получает право работать.
    *   Пример: **STONITH (Shoot The Other Node In The Head)**, хотя чаще используется для разрешения, является радикальной формой арбитража.

  1. Механизм STONITH:
    *   Принцип: Это стратегия **разрешения**, а не предотвращения. Если узел определяет, что его партнёр не отвечает, но есть риск Split Brain, он отправляет аппаратную команду на **принудительное выключение (fencing)** другого узла (через IPMI, iDRAC, управляемый сетевой фильтр).
    *   Пример конфигурации fencing-устройства в Pacemaker:

    ```xml
    <!-- Фрагмент конфигурации CIB -->
    <primitive id="my-fencing" class="stonith" type="ipmilan">
      <instance_attributes id="my-fencing-attrs">
        <nvpair id="my-fencing-attr-1" name="action" value="off"/>
        <nvpair id="my-fencing-attr-2" name="pcmk_host_list" value="node1 node2"/>
        <nvpair id="my-fencing-attr-3" name="ipaddr" value="10.0.0.101"/>
        <nvpair id="my-fencing-attr-4" name="login" value="admin"/>
        <nvpair id="my-fencing-attr-5" name="passwd" value="secret"/>
      </instance_attributes>
    </primitive>
    ```

4. Настройка таймаутов (Timeouts): Тщательная калибровка интервалов heartbeat и таймаутов failure detection с учётом реальной сетевой задержки и нагрузки на узлы.

Split Brain за пределами инфраструктуры

Понятие также встречается в контексте:

  • Распределённых баз данных и систем консенсуса (например, Paxos, Raft). Алгоритм Raft явно предотвращает Split Brain, разрешая существование только одного лидера (leader) в любой момент времени, для избрания которого также требуется кворум.
  • Распределённых файловых систем (GlusterFS, Ceph).
  • DNS — при неправильной настройке мастер-мастер репликации зон.

Заключение: Split Brain — это фундаментальная проблема распределённых систем, возникающая из-за необходимости принимать решения в условиях неполной информации (потеря связи). Без proper арбитража (Quorum, Witness) и механизмов принудительного исключения (Fencing) кластер высокой доступности не может считаться отказоустойчивым в production-среде, так как риск повреждения данных становится неприемлемо высоким. Понимание, предотвращение и планирование восстановления после Split Brain — обязательная компетенция DevOps/SRE инженера, работающего с инфраструктурой HA.

Что такое split brain? | PrepBro