⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
GALERA_SPLIT_BRAIN Linux / DevOps

Траблшутинг рассинхронизации Galera: Split-Brain и pc.bootstrap

Обновлено: 21.08.2026
  • Все ноды кластера возвращают ошибку ERROR 1047 (08S01): WSREP has not yet prepared node for application use.
  • Статус wsrep_cluster_status переходит в состояние non-Primary.
  • Кластер распался на изолированные сегменты после сетевой аварии и потерял кворум.

1. Остановка всех оставшихся процессов mysqld

systemctl stop mysqld

2. Определение наиболее актуального узла (поиск Last Sequence Number - seqno)

На каждом узле выполните команду поиска последней транзакции:

cat /var/lib/mysql/grastate.dat

Если параметр seqno равен -1, запустите временное сканирование позиции в Redo Log:

mysqld --wsrep-recover
grep "Recovered GComm position" /var/log/mysql/error.log

Пример вывода: Recovered GComm position: 12345678-1234-1234-1234-123456789abc:945820 (узел с максимальным числом в конце — самый актуальный).

3. Принудительное назначение узла Мастером через grastate.dat

На узле с наибольшим seqno отредактируйте /var/lib/mysql/grastate.dat:

# Установите safe_to_bootstrap: 1
safe_to_bootstrap: 1

4. Перезапуск первичной компоненты кластера

# На самом актуальном узле:
galera_new_cluster

# Проверьте статус
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_status';" # Должно быть: Primary

5. Запуск остальных узлов и отслеживание SST/IST

systemctl start mysqld
Практический опыт инженера: Никогда не выставляйте safe_to_bootstrap: 1 наугад на первой попавшейся ноде — старт со старого узла приведет к перезаписи новых данных на остальных нодах через SST и их безвозвратной потере.

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

Как восстановить кворум на лету без перезапуска демона?

Если одна живая нода изолирована и перешла в non-Primary, выполните: SET GLOBAL wsrep_provider_options='pc.bootstrap=YES'; Узел мгновенно объявит себя первичным компонентом.

В чем разница между IST и SST при повторном подключении узла?

IST (Incremental State Transfer) передает только недостающие транзакции из кэша gcache. SST (State Snapshot Transfer) полностью перезаписывает базу через xtrabackup, если узел отставал слишком долго.

Telegram Telegram Max Max Позвонить Позвонить E-mail E-mail