Налаштування реплікації баз даних 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування реплікації баз даних 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування реплікації баз даних 1С-Бітрікс

Налаштування реплікації баз даних 1С-Бітрікс

MySQL-реплікація для 1С-Бітрікс вирішує три завдання: read scaling (SELECT на репліки), резервне копіювання без навантаження на мастер (dump з репліки), і швидкий failover при аварії мастера. Без реплікації база даних — єдина точка відмови всього проекту.

Налаштування мастера

/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-реплікації (рекомендується)
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 для 1С-Бітрікс, де зустрічаються недетерміновані функції в запитах (NOW(), RAND()).

binlog_row_image = MINIMAL — у binlog записуються лише змінені колонки, а не весь рядок. Зменшує обсяг binlog на 60–80% для широких таблиць 1С-Бітрікс.

Створюємо користувача реплікації:

CREATE USER 'replicator'@'10.0.0.%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'10.0.0.%';
FLUSH PRIVILEGES;

Налаштування репліки

/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

# Паралельна реплікація (MySQL 5.7+)
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 4

super_read_only = ON — забороняє запис навіть користувачам з SUPER-привілегією. Запобігає випадковому запису напряму в репліку, що зламає реплікацію.

Ініціалізація реплікації з GTID:

-- Знімаємо dump мастера
mysqldump --single-transaction --master-data=2 --gtid \
    -u root -p bitrix > /tmp/bitrix_dump.sql

-- На репліці відновлюємо і запускаємо
mysql -u root -p bitrix < /tmp/bitrix_dump.sql

-- Налаштовуємо джерело реплікації
CHANGE MASTER TO
    MASTER_HOST = '10.0.0.10',
    MASTER_USER = 'replicator',
    MASTER_PASSWORD = 'strong_password',
    MASTER_AUTO_POSITION = 1;  -- GTID: позиція визначається автоматично

START SLAVE;
SHOW SLAVE STATUS\G

У SHOW SLAVE STATUS дивимося:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
  • Seconds_Behind_Master: 0

Підключення 1С-Бітрікс до репліки

1С-Бітрікс не має вбудованого автоматичного read/write split. Налаштовуємо через модуль кластера або вручну:

// /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 на репліку. Кошик, замовлення, авторизація — завжди на мастер.

Моніторинг реплікації

-- Затримка реплікації
SHOW SLAVE STATUS\G
-- Seconds_Behind_Master: затримка в секундах

-- Помилки реплікації
SELECT * FROM performance_schema.replication_applier_status_by_worker;

При Seconds_Behind_Master > 30 користувачі можуть бачити застарілі дані з репліки. Причини: важкі транзакції на мастері, недостатньо паралельних воркерів на репліці, вузьке місце I/O.

# Безперервний моніторинг затримки
watch -n5 'mysql -u monitor -ppass -e "SHOW SLAVE STATUS\G" 2>/dev/null | grep "Seconds_Behind"'

Failover при аварії мастера

Ручний failover: просуваємо репліку в мастер, перенаправляємо 1С-Бітрікс.

-- На репліці
STOP SLAVE;
RESET SLAVE ALL;
SET GLOBAL read_only = OFF;
SET GLOBAL super_read_only = OFF;

Змінюємо host у .settings.php на IP нової мастер-ноди. Автоматичний failover через Orchestrator або ProxySQL — для критичних проектів без допустимого часу простою.