На піку навантаження — розпродаж або запуск рекламної кампанії — база даних Бітрікс не справляється з 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 день. Отримайте консультацію з налаштування реплікації та відмовостійкий Бітрікс.







