Кластеризація 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
    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 відвідувачів на день. Єдиний порятунок — горизонтальне масштабування. Наша команда — сертифіковані інженери 1С-Бітрікс з 10-річним досвідом та гарантією якості робіт. Оптимізація Бітрікс для високих навантажень неможлива без правильної кластеризації. Ми розглянемо горизонтальне масштабування 1С-Бітрікс, яке офіційно підтримується починаючи з редакції «Малий бізнес». Для Бітрікс це не просто кнопка «кластеризувати» — потрібно вирішити три ключові проблеми: сесії, кеш та файлове сховище. Наш досвід 10 років у Бітрікс-розробці та понад 100 проєктів з масштабування показує: без правильної архітектури ви витратите тижні на налагодження, а результат не дасть приросту продуктивності. Кластеризація Бітрікс24 також підтримується, але потребує окремого ліцензування.

Три вузьких місця, які потрібно усунути

Проблема Суть Рішення
Сесії PHP-сесії зберігаються на диску. Різні вузли втрачають сесію користувача. Перенесення сесій до Redis (або Memcached). Redis працює в 3 рази швидше за 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 гарантує атомарність операцій, що критично для консистентності даних у кластері.

Перенесення кешу Бітрікс у 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 вузлів: швидко монтується і дає низьку затримку (low latency), але є єдиною точкою відмови без реплікації. GlusterFS складніше налаштувати, зате реплікує дані між вузлами і виключає SPOF, а також запобігає split-brain завдяки механізму quorum. 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 тижні і коштує від 25 000 грн. Продакшн-схема з GlusterFS, Redis Sentinel, моніторингом та автоматизацією — 4–6 тижнів та від 60 000 грн. Економія на відмові від дорогого апгрейду сервера може сягати 60%. Наприклад, замість апгрейду сервера за 100 000 грн, ви отримаєте кластер, що обробляє в 5 разів більше запитів. Зниження витрат на серверну інфраструктуру до 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% бюджету.

Ознаки, коли кластеризація необхідна

Не кожному проекту. Конкретні маркери:

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

Іноді вистачає композитного кешу, оптимізації SQL та вертикального масштабування. Ми чесно скажемо, якщо кластер поки не потрібен. Інвестиції в кластеризацію окупаються за 3-6 місяців при пікових навантаженнях.

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

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