Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
drbd: State change failed: No response from secondary peer Linux / DevOps

drbd: State change failed: No response from secondary peer — Решение сбоев DRBD

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «drbd: State change failed: No response from secondary peer» регистрируется ядерным модулем DRBD (Distributed Replicated Block Device). Ошибка указывает на то, что локальная нода попыталась изменить свое состояние (например, повысить статус с Secondary до Primary или сбросить флаг репликации), но сетевой обмен с удаленной нодой (Peer) завершился таймаутом. Это приводит к разрыву связи (Connection state: StandAlone или Disconnecting) и высокому риску разделения кластера (Split-Brain).

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
Connection StateStandAlone / UnconnectedЛокальная нода изолирована и прекратила синхронизацию блоков.
Role MismatchPrimary/UnknownНода не может подтвердить статус удаленного узла перед промоутом.
Split-Brain ThreatData DivergenceРиск параллельной записи разных данных на обоих узлах кластера.

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Проверка текущего статуса репликации DRBD

# Просмотр статуса ресурсов DRBD (версии 9.x / 8.4):
sudo drbdadm status
# Либо через устаревший интерфейс:
cat /proc/drbd

# Проверка логов ядра на признаки Split-Brain:
dmesg -T | grep -E "(drbd|Split-Brain)"

Сценарий 2: Ручное разрешение состояния Split-Brain (Ручной выбор источника правды)

Если произошел Split-Brain, выберите узел с устаревшими данными (Victim Node) и сбросьте его данные:

# 1. На узле с УСТАРЕВШИМИ данными (Secondary): 
sudo drbdadm disconnect resource_name
sudo drbdadm secondary resource_name
sudo drbdadm connect --discard-my-data resource_name

# 2. На узле с АКТУАЛЬНЫМИ данными (Primary):
sudo drbdadm disconnect resource_name
sudo drbdadm connect resource_name

Сценарий 3: Восстановление сетевой связности и проверка выделенного линка

# Проверка доступности IP-адресов DRBD сети репликации:
ping -c 4 192.168.100.2

# Принудительное переподключение ресурса без сброса данных:
sudo drbdadm connect resource_name

Сценарий 4: Настройка Fencing и Stonith в /etc/drbd.d/

Настройте автоматическую изоляцию узла для защиты от взаимного промоута:

net {
    fencing resource-only;
}
handlers {
    fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh";
    unfence-peer "/usr/lib/drbd/crm-unfence-peer.9.sh";
}
Кластер высокой доступности Pacemaker/Corosync/DRBD развалился?
ITSTM проводит аудит отказоустойчивых кластеров, ликвидацию Split-Brain без потери транзакций БД и интеграцию аппаратного STONITH/IPMI.
Практический опыт инженера: Никогда не настраивайте репликацию DRBD через общий рабочий сетевой интерфейс. Всегда используйте прямой DAC/патч-корд между серверами (Back-to-Back) с включенными Jumbo Frames (MTU 9000).

Частые вопросы (FAQ)

Почему нода DRBD переходит в состояние StandAlone?

Состояние StandAlone — защитный механизм DRBD. При обнаружении конфликта поколений данных (Split-Brain) или критической сетевой ошибки нода отключается от сети репликации, чтобы не затереть свои и чужие данные.

Чем отличается протокол синхронизации Protocol A от Protocol C в DRBD?

Protocol A (асинхронный) подтверждает запись, как только данные попали в локальный диск и сетевой буфер. Protocol C (полностью синхронный, стандарт для HA) подтверждает запись только после того, как обе ноды записали блок на свои физические накопители.

Что делает флаг --discard-my-data при подключении DRBD?

Он указывает локальной ноде считать свои локальные изменения недействительными и полностью перезаписать их блоками, полученными от удаленной ноды в процессе начальной ресинхронизации.

Как принудительно сделать ноду Primary, если удаленный узел мертв?

Выполните команду: sudo drbdadm primary --force resource_name. Применяйте ее только в том случае, если вы на 100% уверены, что вторая нода выключена и не принимает трафик.