Кластеризация 1С-Битрикс: отказоустойчивый кластер под ключ

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

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1368
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    956
  • 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
    699
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    848
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    737
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1086

Представьте: ваш интернет-магазин на Битрикс в день распродажи ложится — сервер уходит в своп, страницы грузятся по 30 секунд, менеджеры теряют заказы. Даже мощный standalone-сервер упирается в лимиты CPU и I/O при тысячах параллельных запросов. Для масштабирования интернет-магазина на Битрикс мы часто видим такую картину у клиентов, которые дорастают до 10 000 посетителей в день. Единственное спасение — горизонтальное масштабирование: добавление веб-узлов вместо апгрейда одного сервера. Официально эта возможность доступна начиная с редакции «Малый бизнес». Для Битрикс это не просто кнопка «кластеризовать» — нужно решить три ключевые проблемы: сессии, кеш и файловое хранилище. Наш опыт 10 лет в Битрикс-разработке и более 100 проектов по масштабированию показывает: без правильной архитектуры вы потратите недели на отладку, а результат не даст прироста производительности.

Три узких места, которые нужно устранить

Проблема Суть Решение
Сессии PHP-сессии хранятся на диске. Разные узлы теряют сессию пользователя. Перенос сессий в Redis (или Memcached).
Файлы Загруженные файлы и кеш уникальны для каждого узла. Общее хранилище (NFS, GlusterFS или S3) для upload/ и каталогов кеша.
Кеш Битрикс Управляемый кеш в файлах — при сбросе на одном узле другие отдают устаревшие данные. Использовать Redis для кеша (кроме HTML-кеша — он лучше на NFS).

Как настроить сессии в Redis для Битрикс?

Битрикс поддерживает хранение сессий в Redis нативно. Настройка в /bitrix/.settings.php:

'session' => [
    'value' => [
        'mode'     => 'default',
        'handlers' => [
            'general' => [
                'type'    => 'redis',
                'host'    => '127.0.0.1',
                'port'    => 6379,
                'serializer' => \Redis::SERIALIZER_PHP,
            ],
        ],
    ],
],

Для высокой доступности используем Redis Sentinel — тогда при отказе мастера сессии не теряются. Настройка аналогична, только указываем sentinels и master_name. Важно установить PHP-расширение redis. Мы предпочитаем Redis, а не Memcached, из-за атомарных операций и встроенной персистентности. В одном проекте сессии в Redis спасли от потери 20 000 корзин во время переключения балансировщика.

Перенос кеша Битрикс в Redis

Управляемый кеш (/bitrix/cache/ и /bitrix/managed_cache/) лучше хранить в Redis. Это ускоряет чтение и устраняет рассинхронизацию между узлами.

'cache' => [
    'value' => [
        'type'  => 'redis',
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'serializer' => \Redis::SERIALIZER_IGBINARY,
        ],
    ],
],

Расширение igbinary сжимает данные на ~40% быстрее PHP-сериализации. Для кеша HTML-страниц (например, bitrix:page.polycore) Redis неэффективен из-за размера объектов — такие страницы кешируем на уровне nginx proxy_cache или оставляем на NFS.

Почему важна репликация MySQL?

При нескольких веб-узлах нагрузка на базу данных растёт пропорционально. Один мастер не справляется с SELECT-запросами. Решение — Master-Slave репликация с разделением запросов. Настройка в /bitrix/.settings.php:

'connections' => [
    'value' => [
        'default' => [
            'className' => '\\Bitrix\\Main\\DB\\MysqlConnection',
            'host' => 'mysql-master',
            'database' => 'bitrix',
            'login' => 'bitrix',
            'password' => 'secret',
        ],
        'slave' => [
            'className' => '\\Bitrix\\Main\\DB\\MysqlConnection',
            'host' => 'mysql-slave',
            'database' => 'bitrix',
            'login' => 'bitrix_ro',
            'password' => 'secret_ro',
        ],
    ],
],

Для прозрачного роутинга запросов используем ProxySQL или кастомный Connection Resolver. Это снижает нагрузку на мастер и увеличивает пропускную способность.

Выбор файлового хранилища

Критерий NFS GlusterFS S3 (MinIO)
Простота настройки +++ + ++
Отказоустойчивость - ++ +++
Производительность ++ ++ +
Блокировки файлов + + -

NFS — простой вариант для 2–3 узлов: быстро монтируется и даёт низкую задержку, но является единой точкой отказа без репликации. GlusterFS сложнее настроить, зато реплицирует данные между узлами и исключает SPOF. S3-совместимые хранилища (например, MinIO) эластичны и не требуют физических серверов, но latency выше, и нужен модуль Bitrix\Main\File\Remote\S3. Для продакшена мы чаще используем GlusterFS — он уже спас не один проект от даунтайма. Пример монтирования NFS:

mount -t nfs nfs-server:/srv/bitrix-shared /var/www/bitrix/upload

Конфигурация балансировщика нагрузки

Пример конфигурации nginx с least_conn и health-check

upstream bitrix_backend {
    least_conn;
    server web-node-1:80 weight=1 max_fails=3 fail_timeout=30s;
    server web-node-2:80 weight=1 max_fails=3 fail_timeout=30s;
    server web-node-3:80 weight=1 max_fails=3 fail_timeout=30s;
    keepalive 32;
}
server {
    listen 443 ssl;
    location / {
        proxy_pass http://bitrix_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
    }
}

При правильной настройке сессий в Redis sticky sessions не нужны — любой узел отвечает на любой запрос. Исключение: загрузка файлов чанками; для неё можно включить sticky по IP или использовать отдельный upload-эндпоинт.

Процесс работы

  1. Аудит — анализируем текущую архитектуру, нагрузку, узкие места.
  2. Проектирование — выбираем схему: Redis, хранилище, балансировщик, репликацию.
  3. Настройка Redis — сессии и кеш, тестирование отказоустойчивости.
  4. Настройка файлового хранилища — NFS или GlusterFS, синхронизация codebase (git/rsync/Ansible).
  5. Конфигурация балансировщика — nginx upstream, health-check, SSL termination.
  6. MySQL репликация — Master-Slave + ProxySQL.
  7. Тестирование — нагрузочные тесты, проверка при отключении узла.
  8. Документация и обучение — передача схемы и инструкций.

Что входит в работу

  • Архитектурная схема кластера и конфигурационные файлы.
  • Настроенные Redis (сессии + кеш) с резервированием через Sentinel.
  • Общее файловое хранилище (NFS или GlusterFS) с автоматическим монтированием.
  • Балансировщик nginx с health-check и SSL termination.
  • Репликация MySQL с ProxySQL для распределения запросов.
  • Нагрузочное тестирование и отчёт по производительности.
  • Документация по эксплуатации и схема восстановления после сбоев.
  • Обучение вашей команды базовым операциям.
  • Пост-продакшн поддержка в течение месяца.

Сроки и стоимость

Базовая настройка (2 узла, Redis, NFS, балансировка) занимает 2–3 недели. Продакшн-схема с GlusterFS, Redis Sentinel, мониторингом и автоматизацией — 4–6 недель. Стоимость рассчитывается индивидуально после аудита. Экономия на отказе от дорогостоящего апгрейда сервера может достигать 60%. Снижение затрат на серверную инфраструктуру до 40% по сравнению с монолитным решением. Закажите аудит вашего проекта — наши инженеры оценят возможность масштабирования за 2 дня. Получите консультацию по выбору оптимальной схемы кластеризации.

Проверка работоспособности кластера 1. Выполните нагрузочное тестирование с помощью Apache Bench или Siege. 2. Отключите один веб-узел — убедитесь, что сайт продолжает работать. 3. Проверьте синхронизацию файлов: создайте файл на одном узле, проверьте его доступность на другом. 4. Убедитесь, что сессии сохраняются при переключении между узлами.

Кластеризация 1С-Битрикс

Представьте: flash-распродажа, 10 000 пользователей одновременно заходят на сайт, сервер падает с 502, корзины пропадают, менеджеры звонят в поддержку. Мы видели это десятки раз. Решение — кластеризация: балансировка запросов между серверами, репликация базы данных и автоматическое переключение при сбое. Закажите аудит текущей инфраструктуры — за 2 дня определим, нужен ли кластер и какой. Наш опыт — 40+ высоконагруженных проектов на Битрикс.

Почему кластеризация 1С-Битрикс критична для отказоустойчивости?

80-90% запросов в типичном проекте — SELECT. Каталог, карточки, фильтры — всё чтение. Master-slave репликация отдаёт SELECT на slave-серверы, master остаётся только для записи. Модуль «Веб-кластер» (редакция «Бизнес» и выше) маршрутизирует запросы автоматически.

Настройка, где спотыкаются: на master binlog_format = ROW. STATEMENT-репликация на NOW() или UUID() даёт расхождения — потом неделя дебага. Уникальный server-id, включённый binary log. На slave — read_only = ON, relay-log. Инициализация через xtrabackup (не mysqldump, который блокирует таблицы на полчаса на базе в 20 ГБ).

Metric #1 — Seconds_Behind_Master. Если slave отстаёт на 5+ секунд, покупатель оформляет заказ, возвращается в личный кабинет — а заказа нет (SELECT ушёл на отстающий slave). Модуль позволяет исключить критичные запросы из маршрутизации на slave вручную.

Failover: Orchestrator или ProxySQL промоутят slave в master за 15-30 секунд. Модуль поддерживает до 9 slave-соединений с настраиваемыми весами. Проверка целостности — pt-table-checksum из Percona Toolkit. Экономия на неэффективной инфраструктуре — до 40% бюджета, что в среднем составляет 300 000 рублей в год для проектов с 50 000+ уникальных посетителей. Подробнее о репликации — MySQL Replication Documentation и Wikipedia: Репликация базы данных.

Признаки, когда кластеризация необходима

Не каждому проекту. Конкретные маркеры:

  • 50 000-100 000 уников в сутки — один сервер начинает отдавать 502 в часы пик
  • Пиковые скачки в 5-10 раз (распродажи, flash-sale) — нагрузка растёт за минуты, вертикально не масштабируешься
  • SLA 99.9% (не более 8.7 часов простоя в год) — с одним сервером недостижимо
  • Географическая распределённость пользователей

Иногда хватает композитного кэша, оптимизации SQL и вертикального масштабирования. Мы честно скажем, если кластер пока не нужен. Инвестиции в кластеризацию окупаются за 3-6 месяцев при пиковых нагрузках. Средний бюджет проекта — от 150 000 рублей.

Архитектура — четыре уровня

Балансировщик. HAProxy, nginx upstream или облачный LB. Round-robin для равномерного распределения, ip-hash для привязки сессий, least connections для адаптивной балансировки. Health checks выводят мёртвые серверы из пула. SSL-терминация на балансировщике разгружает веб-ноды.

Веб-серверы. Идентичные nginx + php-fpm, каждая с полной копией кода. Сессии — в Redis/Memcached, не на диске (иначе при переключении между серверами пользователь теряет корзину). В облаке — автоскейлинг: нагрузка выросла — добавились серверы, упала — выключились.

Кэш. Redis Cluster с шардингом данных по узлам. Redis Sentinel для небольших кластеров. Memcached быстр, но без persistence. Конфигурация в .settings.php — серверы, веса, стратегия шардинга.

Файловое хранилище. Загрузки, картинки — доступны с каждой ноды. NFS для 2-3 серверов, но это единая точка отказа. GlusterFS — распределённая ФС без single point of failure. S3 (MinIO, AWS, Яндекс Object Storage) — вынос статики в объектное хранилище, модуль Битрикс работает из коробки.

Как обеспечить failover на каждом уровне кластера?

Уровень Механизм RTO
Балансировщик Keepalived + VRRP < 5 сек
Веб-серверы Health check балансировщика < 10 сек
MySQL master Orchestrator / ProxySQL < 30 сек
MySQL slave Исключение из пула < 5 сек
Redis Sentinel / Cluster failover < 15 сек
Файлы GlusterFS репликация Автоматически

Кластер в 5 раз надёжнее одиночного сервера — при отказе любого узла сервис продолжает работать.

Типичные ошибки при настройке кластера

  • Сессии на файлах — при отключении сервера пользователь теряет корзину и авторизацию.
  • Не настроенный Seconds_Behind_Master — продажи падают, а SLA не выполняется.
  • Одна точка отказа на уровне файлового хранилища (NFS без репликации).
  • Отсутствие мониторинга репликации — расхождение данных остаётся незамеченным.

Мы включаем проверку всех этих точек в аудит и тестирование.

Процесс работы

  1. Аудит нагрузки — профиль нагрузки, узкие места, нагрузочное тестирование. Находим потолок одиночного сервера.
  2. Проектирование — компоненты под требования и бюджет. Не всем нужен GlusterFS — иногда хватит NFS и бэкапов.
  3. Инфраструктура — серверы, сеть, файрволы. Ansible для автоматизации — любой узел можно пересоздать за минуты.
  4. Миграция — перенос с минимальным простоем. Компоненты подключаются последовательно, каждый шаг с проверкой.
  5. Тестирование — имитация пиковых условий. Роняем master, отключаем веб-сервер, убиваем Redis — смотрим, как система себя ведёт.
  6. Документация — схема архитектуры, runbook, планы аварийного восстановления.

Что входит в работу по кластеризации?

Deliverable Описание
Аудит текущей нагрузки Профиль запросов, узкие места, нагрузочное тестирование
Проектная документация Схема архитектуры, runbook, план аварийного восстановления
Инфраструктура Настройка серверов, сети, файрволов (Ansible)
Миграция Перенос с минимальным простоем, поэтапное подключение компонентов
Тестирование Имитация пиковых условий: роняем master, отключаем веб-сервер, убиваем Redis
Обучение команды Документация, консультации 2 недели после внедрения
Гарантия 6 месяцев на корректную работу кластера — если что-то пошло не по сценарию, исправляем за 24 часа

Сроки

Задача Сроки
Аудит и проектирование 1-2 недели
Базовый кластер (2 веб + master-slave MySQL) 2-3 недели
Полный кластер с failover на всех уровнях 4-6 недель
Мониторинг + нагрузочное тестирование 2-4 недели

Свяжитесь с нами — получите консультацию инженера и предварительную оценку проекта за 2 дня. Мы рассчитаем стоимость индивидуально под ваши задачи. Закажите аудит — узнайте точную архитектуру и бюджет.