На пике нагрузки — распродажа или запуск рекламной кампании — база данных Битрикс не справляется с SELECT-запросами. Страница каталога открывается 10 секунд, менеджеры не могут загрузить список заказов. Решение — репликация MySQL: мастер принимает запись, реплики отдают чтение. Без репликации база данных — единственная точка отказа всего проекта. Мы настраиваем отказоустойчивую репликацию с гарантией результата. Наш опыт — более 5 лет и 50 успешных проектов. Экономия на инфраструктуре после внедрения достигает 30% за счёт снижения нагрузки на мастер. Средний чек на поддержку падает на 40%. По нашим данным, на проектах с посещаемостью от 10 тысяч уникальных посетителей в день время ответа MySQL при пиковых нагрузках возрастает в 3–5 раз. Репликация снижает время загрузки страниц каталога на 40–60% и полностью исключает простои при бэкапах. Свяжитесь с нами для предварительной оценки вашего проекта.
Проблемы, которые решает репликация
- Read scaling: SELECT-запросы каталога, поиска, листингов выполняются на репликах. Нагрузка на мастер снижается на 70–90%.
- Резервное копирование без нагрузки: mysqldump с реплики не блокирует мастер. Даже при терабайтных базах.
- Failover: при аварии мастера реплика превращается в мастер за минуты. Простой — не более 5 минут при ручном переключении.
Настройка репликации для Битрикс
Настройка мастера
/etc/mysql/conf.d/master.cnf:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
binlog_row_image = MINIMAL
expire_logs_days = 7
max_binlog_size = 100M
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
binlog_format = ROW — построчная репликация. Надёжнее, чем STATEMENT для Битрикс, где встречаются недетерминированные функции (NOW(), RAND()).
binlog_row_image = MINIMAL — в binlog записываются только изменённые колонки. Уменьшает объём binlog на 60–80% для широких таблиц Битрикс.
Создайте пользователя репликации: GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.0.0.%' IDENTIFIED BY 'strong_password'.
Настройка реплики
/etc/mysql/conf.d/replica.cnf:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
log_slave_updates = ON
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON
super_read_only = ON
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4
super_read_only = ON — запрещает запись даже пользователям с SUPER-привилегией. Предотвращает случайную запись, которая сломает репликацию.
Инициализация репликации с GTID: mysqldump --single-transaction --master-data=2 --gtid, затем дамп загружается на реплику. Запуск репликации:
CHANGE MASTER TO
MASTER_HOST = '10.0.0.10',
MASTER_USER = 'replicator',
MASTER_PASSWORD = 'strong_password',
MASTER_AUTO_POSITION = 1;
START SLAVE;
SHOW SLAVE STATUS\G
Проверяем Slave_IO_Running: Yes, Slave_SQL_Running: Yes, Seconds_Behind_Master: 0.
Подключение Битрикс к реплике
Настройка через модуль кластера или вручную в /bitrix/.settings.php:
'connections' => [
'value' => [
'default' => [
'className' => '\Bitrix\Main\DB\MysqlConnection',
'host' => '10.0.0.10',
'database' => 'bitrix',
'login' => 'bitrix',
'password' => 'pass',
],
'replica' => [
'className' => '\Bitrix\Main\DB\MysqlConnection',
'host' => '10.0.0.11',
'database' => 'bitrix',
'login' => 'bitrix_ro',
'password' => 'pass_ro',
'options' => ['slave' => true],
],
],
],
Компоненты каталога, поиска и листинга направляют SELECT на реплику. Корзина, заказы, авторизация — всегда на мастер.
Как выбрать тип репликации?
Сравнение асинхронной, полусинхронной и синхронной репликации:
| Параметр | Асинхронная (GTID) | Полусинхронная | Синхронная (Galera) |
|---|---|---|---|
| Задержка на запись | Минимальная | +10-30% | +50-100% |
| Риск потери данных | Есть (при сбое мастера) | Минимальный | Нулевой |
| Производительность | Высокая | Средняя | Низкая на запись |
| Совместимость с Битрикс | Полная | Полная | Требует доработок |
Для 95% проектов на Битрикс достаточно асинхронной репликации с GTID. Полусинхронная — если критична потеря ни одной транзакции (интернет-магазины с оплатами).
Когда нужен автоматический failover?
Если время простоя сайта критично (более 5 минут недопустимо), настройте автоматический failover через Orchestrator или ProxySQL. Эти инструменты мониторят состояние мастера и реплик, при сбое автоматически промотируют реплику и перенаправляют трафик. Время восстановления сокращается до секунд. Закажите настройку failover вместе с репликацией.
Мониторинг репликации
Статус проверяется запросом SHOW SLAVE STATUS\G. Ключевой параметр — Seconds_Behind_Master. При задержке более 30 секунд возможны устаревшие данные. Причины: тяжёлые транзакции, недостаток параллельных воркеров, I/O-узкое место.
Подробнее о мониторинге
Для автоматического мониторинга используйте скрипты с проверкой Seconds_Behind_Master каждые 5 минут. Также полезно отслеживать Slave_IO_Running и Slave_SQL_Running. При отклонениях — уведомление в Telegram или почту.
Пошаговая инструкция по настройке репликации
- Настройте мастер (server-id, binlog, GTID).
- Настройте реплику (server-id, relay log, read_only, параллельная репликация).
- Создайте пользователя репликации с правами REPLICATION SLAVE.
- Выполните консистентный дамп мастера с GTID-позицией.
- Загрузите дамп на реплику.
- Запустите репликацию командой CHANGE MASTER и START SLAVE.
- Проверьте статус (Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master).
- Настройте подключение Битрикс к реплике.
- Настройте мониторинг и, при необходимости, автоматический failover.
- Проведите нагрузочное тестирование.
Выполнение failover при отказе мастера
Ручной failover: промоутируйте реплику в мастер.
STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;
SET GLOBAL super_read_only = OFF;
Измените host в .settings.php на IP новой мастер-ноды.
GTID (глобальные идентификаторы транзакций) упрощают переключение — не нужно искать позицию binlog. Подробнее в документации MySQL и Wikipedia: GTID.
Процесс работы по настройке репликации
| Этап | Длительность | Что делаем |
|---|---|---|
| Анализ | 2-4 часа | Изучаем профиль запросов, выявляем узкие места |
| Проектирование | 1-2 часа | Выбираем топологию, количество реплик |
| Конфигурация | 2-4 часа | Настраиваем master, replica, сетевые параметры |
| Перенос данных | 1-2 часа | Создаем консистентный дамп без остановки сайта |
| Тестирование | 2-4 часа | Проверяем репликацию, failover, нагрузку |
| Деплой | 1-2 часа | Подключаем Битрикс, включаем мониторинг |
Что входит в работу
- Конфигурация master.cnf и replica.cnf с учётом вашего оборудования.
- Создание пользователей репликации с ограниченными правами.
- Перенос данных с мастера на реплику без даунтайма.
- Настройка подключения Битрикс (модуль кластера или .settings.php).
- Мониторинг (задержка, ошибки, статус).
- Документация: схема топологии, инструкция по failover, скрипты мониторинга.
- Обучение: как проверять статус и действия при ошибках.
- Поддержка: 2 недели после релиза.
Сроки: от 1 до 3 дней в зависимости от сложности. Стоимость рассчитывается индивидуально — свяжитесь с нами, оценим ваш проект за 1 день. Получите консультацию по настройке репликации и отказоустойчивый Битрикс.







