Как использовать failover в MySQL и обеспечить отказоустойчивость базы данных

9 минут чтения
Средний рейтинг статьи — 4.8

Отказоустойчивость MySQL — критически важная часть любой инфраструктуры, где база данных является ключевым компонентом. Даже кратковременное отключение сервера БД может привести к остановке приложения, потере транзакций и финансовым убыткам.
Failover (автоматическое переключение на резервный сервер) позволяет минимизировать простой и обеспечить непрерывность работы сервисов.

В этой статье разберём основные подходы к отказоустойчивости MySQL, как организовать репликацию, что отвечает за автоматический failover и какие инструменты используют на практике.

Зачем нужен failover в MySQL

Failover решает сразу несколько проблем:

  • Автоматическое переключение на резервный сервер при падении мастера.
  • Минимизация простоя — приложение продолжает работать без ручного вмешательства.
  • Защита данных — в связке с репликацией обеспечивается почти полная непрерывность.
  • Повышение надёжности инфраструктуры — даже при проблемах с железом.

Репликация как основа отказоустойчивости

Для построения failover-схемы прежде всего нужна репликация. MySQL поддерживает несколько типов:

1. Классическая асинхронная репликация

Мастер пишет данные, слейвы их догоняют по binlog.
Плюсы: простая, быстрая, минимальная нагрузка.
Минусы: возможно отставание реплик.

2. Полусинхронная (semi-sync)

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

3. Group Replication (основа MySQL InnoDB Cluster)

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

Основные варианты failover MySQL

Существует 3 распространённых подхода:

1. MySQL InnoDB Cluster (официальное HA-решение)

Это полноценный высокодоступный кластер, включающий:

  • Group Replication
  • MySQL Router для переключения трафика
  • MySQL Shell для настройки

Пример структуры:

node1 — primary
node2 — secondary
node3 — secondary
mysql-router — направляет запросы на живой мастер

Failover происходит автоматически: если падает мастер, кластер выбирает нового лидера.

Пример инициализации кластера

var dba = require('dba');
var cluster = dba.createCluster("prodCluster");
cluster.addInstance("root@node2");
cluster.addInstance("root@node3");

Преимущества

  • полный автоматический failover
  • встроенный официальный инструмент
  • высокая согласованность данных

Недостатки

  • не работает с MyISAM
  • нужны стабильные сетевые соединения
  • сложнее миграция с обычной репликации

2. MHA (Master High Availability Manager)

Популярный инструмент для автоматического переключения мастера.

Как работает:

  • следит за мастером через мониторинговый узел
  • при падении — выбирает лучший слейв
  • продвигает его до мастера
  • обновляет конфигурации слейвов
  • возможен минимальный data loss

Плюсы MHA

  • быстрый failover (10–30 секунд)
  • зрелое и проверенное решение
  • довольно простая конфигурация

Минусы

  • требует внешнего менеджера
  • не полностью автоматический (может понадобиться скрипт восстановления)

3. Orchestrator (от GitHub, любимая тулза DevOps-ов)

Orchestrator — web-based система для управления репликацией и автоматического failover.

Возможности:

  • визуализация топологии репликации
  • автоматический failover
  • предотвращение «нестабильных» лидерств
  • перетаскивание реплик drag & drop через UI

Использует heartbeat-проверки, компенсирует лаги репликации, избегает split-brain.

Что происходит при failover (механика процесса)

Алгоритм примерно такой:

  1. Обнаружение падения мастера (проверка ping/log/replication status)
  2. Оценка состояния реплик:
    • у какой минимальный lag
    • у кого актуальный binary log
  3. Выбор нового мастера
  4. Обновление конфигурации остальных слейвов:
CHANGE MASTER TO MASTER_HOST='<new_master>';
START SLAVE;
  1. Обновление маршрутизаторов (ProxySQL, HAProxy, MySQL Router)
  2. Возврат старого мастера в кластер после восстановления (optional)

Как проксировать трафик при failover

Вариант 1: ProxySQL

Настраивается два пула:

writer_hostgroup = 10
reader_hostgroup = 20

При failover ProxySQL сам переключает write-нагрузку.

Вариант 2: HAProxy

Два бэкенда:

  • мастер
  • реплики

Используются mysql-checks для определения живого мастера.

Вариант 3: MySQL Router

Идеальный напарник для InnoDB Cluster.
Автоматически переподключает клиентов.

Практические рекомендации по настройке отказоустойчивости

  • Не используйте одинокий мастер: минимум 1 мастер + 2 реплики.
  • Размещайте ноды в разных дата-центрах, но не переусердствуйте — задержка важна.
  • Включайте semi-sync при критичных данных.
  • Проверяйте consistency при failover.
  • Логируйте все переключения — важно для аудита.
  • Тестируйте отказ вручную (simulated failover).

Что важно учитывать

  • Потеря последних транзакций возможна в асинхронной репликации.
  • Split-brain — опаснейший сценарий, его нужно предотвращать.
  • Не все приложения могут пережить failover без reconnect.
  • Пропуск GTID может создавать проблемы — лучше использовать GTID репликацию.

Итоги

Failover в MySQL — это не одна технология, а набор подходов:

  • InnoDB Cluster — официальный и наиболее автоматизированный вариант.
  • MHA — классика для простых продакшенов.
  • Orchestrator — мощное и гибкое решение с удобным управлением.

Выбор зависит от инфраструктуры, требований к RTO/RPO и опыта команды.

9 минут чтения
Средний рейтинг статьи — 4.8

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний