Налаштування geo-distributed кластера 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування geo-distributed кластера 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

Налаштування geo-distributed кластера 1С-Бітрікс

Єдиний датацентр у Москві дає затримку 80–120 мс для користувачів з Новосибірська і 150–200 мс з Алмати. При highload з кількох регіонів це накопичується: сторінка з 30+ запитами до API відкривається за 3–4 секунди замість 1. Geo-distributed кластер вирішує це маршрутизацією користувача на найближчий вузол — але для Бітрікс це нетривіально, оскільки вимагає роботи з розподіленим станом.

Архітектура geo-кластера для Бітрікс

Типова схема для двох регіонів (Москва + ще один регіон):

           [GeoDNS / Anycast BGP]
          /                       \
   [Region-MSK]               [Region-EKB]
   Web-1, Web-2               Web-3, Web-4
   Redis-1 (master)           Redis-2 (replica)
   [DB Master]      <-->      [DB Replica]
   [File Storage]    rsync    [File Storage Mirror]

Ключові рішення, які потрібно прийняти:

  1. Де мастер БД? — лише в одному регіоні. Записи завжди йдуть у мастер, читання можна розподілити.
  2. Як синхронізувати файли? — реалтаймова реплікація дорога, зазвичай rsync кожні 1–5 хвилин.
  3. Як керувати сесіями? — через Redis з реплікацією між регіонами.
  4. Що робити при розриві зв'язку між регіонами? — визначити: працюємо лише з мастер-регіону, чи дозволяємо розбіжність даних?

GeoDNS: маршрутизація користувачів

Найпростіший рівень — DNS за геолокацією. Cloudflare, AWS Route 53, Яндекс Cloud DNS.

; Приклад зони з геомаршрутизацією
; Користувачі з Європи -> MSK-ноди
@ 300 IN A 185.10.1.100  ; geo: EU, RU-west
@ 300 IN A 195.20.2.100  ; geo: RU-east, KZ

Обмеження GeoDNS: TTL впливає на швидкість перемикання при аварії. При TTL 300 секунд — 5 хвилин кешування у клієнта. Для швидкого failover — Anycast BGP (одна IP-адреса, різні сервери в різних точках, маршрутизація на рівні мережі).

Налаштування модуля cluster у Бітрікс

Бітрікс постачає модуль cluster (Bitrix Web Cluster), який керує розподіленими вузлами. Ключові налаштування знаходяться в /bitrix/.settings.php:

'connections' => [
    'value' => [
        'default' => [
            'className' => '\\Bitrix\\Main\\DB\\MysqlCommonConnection',
            'host' => '10.0.1.10',      // мастер (MSK)
            'port' => 3306,
            'database' => 'bitrix_db',
            'login' => 'bitrix',
            'password' => '***',
            'options' => 2,
        ],
        'slave' => [
            'className' => '\\Bitrix\\Main\\DB\\MysqlCommonConnection',
            'host' => '10.0.2.10',      // репліка (EKB)
            'port' => 3306,
            'database' => 'bitrix_db',
            'login' => 'bitrix_ro',
            'password' => '***',
            'options' => 2,
        ],
    ],
],

Читаючі запити переводяться на репліку через:

\Bitrix\Main\Application::getConnection('slave')->query("SELECT ...");

Стандартні API Бітрікс (D7 ORM, CIBlockElement::GetList) використовують з'єднання default. Для автоматичного розділення read/write потрібен проміжний шар — ProxySQL або кастомний wrapper.

Реплікація БД між регіонами

MySQL GTID-реплікація через зашифрований канал (stunnel або WireGuard):

# На мастері (MSK)
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW

# На репліці (EKB)
[mysqld]
server-id = 2
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON
relay_log = /var/log/mysql/relay-bin.log
-- На репліці
CHANGE MASTER TO
    MASTER_HOST='10.0.1.10',
    MASTER_USER='replication',
    MASTER_PASSWORD='***',
    MASTER_AUTO_POSITION = 1,
    MASTER_SSL = 1;

START SLAVE;
SHOW SLAVE STATUS\G
-- Seconds_Behind_Master: 0 — репліка наздогнала мастер

Затримка реплікації між регіонами (replication lag) — нормально 50–200 мс на каналі 100 Мбіт/с із затримкою 20–30 мс. Критично: якщо користувач створив замовлення (запис у мастер), і одразу читає його статус з репліки — при лазі >200 мс він може не побачити замовлення. Рішення: операції після write для конкретної сесії направляти на мастер протягом 5–10 секунд.

Синхронізація файлів

Файли upload/ (медіа, документи) повинні бути доступні на всіх нодах. Варіанти:

Варіант 1: S3-сумісне сховище (рекомендується)

Зберігаємо upload/ у S3 (Yandex Object Storage, AWS S3, MinIO). Бітрікс вміє працювати з S3 через модуль bitrix.cloud або через кастомний обробник файлів. CDN перед S3 роздає файли з найближчого регіону.

Варіант 2: Двосторонній rsync

# Синхронізація MSK -> EKB кожну хвилину
*/1 * * * * rsync -az --delete \
    /var/www/bitrix/upload/ \
    ekb-storage:/var/www/bitrix/upload/

# Зворотна синхронізація для файлів, завантажених на EKB-ноду
*/1 * * * * rsync -az \
    ekb-storage:/var/www/bitrix/upload/new/ \
    /var/www/bitrix/upload/new/

Проблема двостороннього rsync — конфлікти при одночасному завантаженні в обох регіонах. Для production краще забороняти завантаження файлів на регіональних нодах — весь upload проксується на мастер-регіон.

Redis: розподілені сесії та кеш

Сесії користувачів у geo-кластері повинні бути доступні незалежно від того, на яку ноду потрапить наступний запит:

// /bitrix/.settings.php
'session' => [
    'value' => [
        'mode' => 'separated',
        'handlers' => [
            'general' => [
                'type' => 'redis',
                'host' => '10.0.1.20',  // Redis MSK (мастер)
                'port' => 6379,
            ],
        ],
    ],
],
'cache' => [
    'value' => [
        'type' => 'redis',
        'redis' => [
            'host' => '10.0.1.20',
            'port' => 6379,
        ],
        'sid' => 'bitrix_geo',
    ],
],

Redis Sentinel або Redis Cluster для HA. При geo-розподілі — Redis реплікується асинхронно. Кеш можна зберігати локально в кожному регіоні (економить трафік), сесії — лише в мастер-регіоні або в Redis Cluster з cross-region реплікацією.

Розподіл трафіку: що можна регіоналізувати, що не можна

Операція Можливо на регіональній ноді Примітка
Читання каталогу Так З репліки БД
Сторінка товару, категорії Так З кешу або репліки
Пошук Так Elasticsearch з реплікацією
Додавання до кошика Ні Лише мастер
Оформлення замовлення Ні Лише мастер + мастер БД
Завантаження файлів Ні Лише S3 або мастер-нода
Авторизація Ні Сесії — мастер Redis

Для Бітрікс-магазину це означає: сторінки каталогу віддаються з найближчого регіону, оформлення замовлення — завжди проксується в мастер-регіон. Split-routing реалізується на рівні nginx:

location /bitrix/components/bitrix/sale. {
    proxy_pass http://msk_master;  # замовлення завжди в MSK
}

location / {
    proxy_pass http://geo_cluster;  # решта — найближчий вузол
}

Терміни налаштування

Етап Зміст Термін
Проектування архітектури Схема, вибір рішень, узгодження RPO/RTO 2–3 дні
Налаштування реплікації БД GTID, моніторинг лагу, тест failover 2–3 дні
Налаштування Redis + сесії Sentinel/Cluster, .settings.php 1–2 дні
Синхронізація файлів S3 або rsync + конфіги nginx 1–2 дні
GeoDNS + балансувальник Cloudflare/Route53, split-routing nginx 1–2 дні
Навантажувальне тестування та drill Перевірка failover, вимірювання latency 2–3 дні