Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

SEMI_SYNC_DEGRADED Linux / DevOps

Настройка полусинхронной репликации в MySQL (Semi-Synchronous Replication)

Обновлено: 21.08.2026
  • Риск потери зафиксированных транзакций при внезапном падении основного мастера в асинхронной схеме.
  • Необходимость гарантии того, что хотя бы одна реплика сохранила транзакцию в Relay Log перед подтверждением клиенту.
  • Деградация полусинхронной репликации в асинхронный режим из-за сетевых таймаутов.

1. Установка плагинов на Мастере и Реплике

На основном сервере (Master):

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
# Для MySQL 8.0.26+: rpl_semi_sync_source.so

На сервере-реплике (Replica):

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
# Для MySQL 8.0.26+: rpl_semi_sync_replica.so

2. Конфигурация параметров на Мастере

В /etc/mysql/my.cnf (Master):

[mysqld]
# Включение полусинхронного режима
rpl_semi_sync_master_enabled = 1

# Таймаут ожидания ответа от реплики в мс перед переходом в асинхрон (10 сек)
rpl_semi_sync_master_timeout = 10000

# Минимальное количество реплик, обязанных подтвердить запись транзакции
rpl_semi_sync_master_wait_no_slave = 1

# Точка ожидания подтверждения (AFTER_SYNC защищает от фантомных чтений)
rpl_semi_sync_master_wait_point = AFTER_SYNC

3. Конфигурация параметров на Реплике

В /etc/mysql/my.cnf (Replica):

[mysqld]
rpl_semi_sync_slave_enabled = 1

Перезапустите поток репликации на реплике:

STOP REPLICA; START REPLICA;

4. Проверка статуса полусинхронной репликации

# На мастере
SHOW STATUS LIKE 'Rpl_semi_sync_master_status'; # Должно быть: ON
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx'; # Количество подтвержденных транзакций
💡 Практика специалистов: Используйте полусинхронную репликацию только в сетях с низкой задержкой (RTT < 2-3 мс). В межрегиональных сетях каждый коммит будет ожидать кругового сетевого обхода, что существенно снизит пропускную способность транзакций.

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

В чем разница между режимами AFTER_COMMIT и AFTER_SYNC?

В режиме AFTER_SYNC мастер сначала ждет записи транзакции в Relay Log реплики и только затем фиксирует ее в локальном хранилище, что исключает рассинхронизацию данных при падении мастера.

Что происходит, если все реплики недоступны дольше rpl_semi_sync_master_timeout?

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

Полезные материалы
Рекомендуем