Настройка geo-distributed кластера 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка geo-distributed кластера 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка 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 или кастомный враппер.

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

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 дня