Реплікація MySQL для Бітрікс: прискорення та відмовостійкість

На піку навантаження — розпродаж або запуск рекламної кампанії — база даних Бітрікс не справляється з SELECT-запитами. Сторінка каталогу відкривається 10 секунд, менеджери не можуть завантажити список замовлень. Рішення — реплікація MySQL: майстер приймає запис, репліки віддають читання. Без репліка
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Реплікація MySQL для Бітрікс: прискорення та відмовостійкість
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1013
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    751
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    872
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    791
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1153

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

Покрокова інструкція з налаштування реплікації

  1. Налаштуйте майстер (server-id, binlog, GTID).
  2. Налаштуйте репліку (server-id, relay log, read_only, паралельна реплікація).
  3. Створіть користувача реплікації з правами REPLICATION SLAVE.
  4. Виконайте консистентний дамп майстра з GTID-позицією.
  5. Завантажте дамп на репліку.
  6. Запустіть реплікацію командою CHANGE MASTER і START SLAVE.
  7. Перевірте статус (Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master).
  8. Налаштуйте підключення Бітрікс до репліки.
  9. Налаштуйте моніторинг і, при необхідності, автоматичний failover.
  10. Проведіть навантажувальне тестування.

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