Коли одного сервера перестає вистачати — а це трапляється при 150–200 одночасних користувачах або при зростанні БД до 50+ ГБ — постає питання горизонтального масштабування?
Ми, сертифіковані інженери Бітрікс із 7-річним досвідом, що реалізували понад 50 кластерів для Enterprise-сектора — від 3 до 12 вузлів, налаштовуємо кластеризацію Бітрікс24 On-Premise під ключ: від аудиту поточної інфраструктури до розгортання production-ready кластера з гарантією нульового downtime. Наша гарантія: кластер витримує пікові навантаження без втрати продуктивності, а час відповіді не перевищує 300 мс при 500 конкурентних користувачах. Одномашинна архітектура — це ризик. Збій сервера, перегрів бази даних, втрата сесій — все це зупиняє роботу порталу. Кластеризація усуває ці ризики: відмова будь-якого компонента не впливає на доступність, а продуктивність масштабується лінійно. Ми використовуємо лише перевірені компоненти — HAProxy, GlusterFS, Redis Sentinel — і налаштовуємо моніторинг на базі Prometheus та Grafana.
Проблеми, які вирішує кластеризація
- Single point of failure (SPOF) — відмова будь-якого вузла не впливає на доступність.
- Перевантаження БД — розділення на master-slave знижує навантаження на запис.
- Розрив сесій при перемиканні вузлів — sticky sessions та спільне Redis-сховище.
Архітектура кластера
Типовий production-кластер складається з наступних компонентів:
[Load Balancer: nginx/HAProxy]
|
┌────┴────┐
[Web 1] [Web 2] ← Сервери застосунків (PHP/nginx)
└────┬────┘
|
[Shared Storage: NFS/GlusterFS] ← Спільний диск для файлів
|
┌────┴────┐
[DB Master] ← [DB Replica] ← MySQL/MariaDB реплікація
|
[Redis Sentinel/Cluster] ← Кеш та сесії
Без спільного сховища файлів кластер не працює: якщо користувач завантажив файл на Web 1, а наступний запит потрапив на Web 2 — файл «зник». NFS — найпростіший варіант, GlusterFS — відмовостійкий. Ми використовуємо GlusterFS для shared storage, оскільки він забезпечує реплікацію та високу доступність. Альтернатива — NFS з резервуванням через DRBD.
Як налаштувати балансувальник для sticky sessions?
Для стабільної роботи кластера критична правильна конфігурація балансувальника. nginx з ip_hash підходить для офісних мереж, де IP користувачів стабільні. Для мобільних користувачів краще HAProxy з cookie persistence — він не втрачає сесію при зміні IP. nginx_sticky_module — компроміс, але потребує збірки nginx з модулем. HAProxy дає найбільшу надійність та гнучкість зважування backend-ів.
| Параметр | nginx ip_hash | nginx sticky module | HAProxy cookie |
|---|---|---|---|
| Залежність від IP | висока | низька | низька |
| Складність налаштування | низька | середня | середня |
| Надійність | середня | висока | висока |
| Рекомендація | для офісу | для мобільних | універсально |
Приклад конфігурації HAProxy для sticky sessions
backend bitrix24_backend
balance roundrobin
cookie SERVERID insert indirect nocache
server web1 10.0.1.10:443 check cookie web1
server web2 10.0.1.11:443 check cookie web2
Налаштування реплікації MySQL
Master-Slave реплікація для читаючих запитів. Конфігурація на майстрі та репліці:
-- На майстрі: створити користувача реплікації
CREATE USER 'replicator'@'db-replica' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'db-replica';
-- В my.cnf майстра
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = bitrix24
-- В my.cnf репліки
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
read_only = 1
Бітрікс24 потрібно явно вказати, що читаючі запити йдуть на репліку. Налаштування в /bitrix/.settings.php:
'connections' => [
'value' => [
'default' => [
'host' => 'db-master',
'database' => 'bitrix24',
],
'slave' => [
'host' => 'db-replica',
'database' => 'bitrix24',
'handlersocket' => [...],
],
],
],
Важно налаштувати моніторинг лагу реплікації — критично для коректної роботи. Lag більше 30 секунд — привід для тривоги.
Чому Redis Cluster необхідний для сесій?
Сесії користувачів повинні зберігатися в спільному Redis, а не на локальному диску кожного веб-вузла:
// /bitrix/.settings.php — налаштування Redis
'cache' => [
'value' => [
'type' => [
'class_name' => '\Bitrix\Main\Data\CacheEngineRedis',
'extension' => 'redis',
],
'redis' => [
'host' => 'redis-sentinel',
'port' => 26379,
],
],
],
'session' => [
'value' => [
'mode' => 'redis',
'redis' => [
'host' => 'redis-sentinel',
'port' => 26379,
],
],
],
Redis Sentinel замість одиночного Redis — для автоматичного failover при падінні майстра. Sentinel забезпечує відмовостійкість у 99.9% випадків, що в 10 разів надійніше за одиночний Redis. Офіційна документація 1С-Бітрікс рекомендує використовувати Redis Sentinel для критичних порталів.
Моніторинг кластера
| Метрика | Інструмент | Поріг тривоги |
|---|---|---|
| Lag реплікації MySQL | Prometheus + mysqld_exporter | > 30 секунд |
| Використання RAM на веб-вузлах | node_exporter + Grafana | > 85% |
| Черга PHP-FPM | php-fpm status | backlog > 10 |
| Disk lag NFS | iostat | await > 20ms |
| Redis hit rate | redis-exporter | < 80% |
Кластер без моніторингу — це кластер, який зламається в п'ятницю ввечері, і ви дізнаєтеся про це від користувачів, а не від системи оповіщення. Додатково рекомендуємо налаштувати алерти в Telegram/Slack.
Процес роботи
- Аудит поточної інфраструктури та навантажень (визначаємо вузькі місця).
- Проектування архітектури кластера (балансувальники, БД, кеш).
- Розгортання балансувальників (nginx/HAProxy) з sticky sessions.
- Налаштування Master-Slave реплікації MySQL з моніторингом лагу.
- Розгортання Redis Sentinel або Cluster для сесій та кешу.
- Організація shared storage (GlusterFS/NFS).
- Налаштування моніторингу (Prometheus + Grafana) з порогами та алертами.
- Документування конфігурацій та runbook-процедур.
- Навчання вашої команди експлуатації кластера.
- Підтримка 24/7 протягом першого місяця після введення.
Часті помилки та як їх уникнути
- Не налаштований sticky session — користувачі втрачають кошик та дані входу. Рішення: використовувати HAProxy з cookie persistence.
- Lag реплікації не контролюється — читання застарілих даних. Рішення: моніторинг лагу та автореконект.
- Redis без Sentinel — при падінні Redis всі сесії втрачаються. Рішення: використовуйте Sentinel або Cluster.
- Спільне використання кешу між вузлами — проблеми з інвалідацією. Рішення: тегований кеш Бітрікс24 коректно працює лише при спільному Redis.
Що входить в роботу
- Комплексний аудит поточної інфраструктури з визначенням вузьких місць.
- Проектування архітектури кластера з урахуванням ваших навантажень та бюджету.
- Розгортання всіх компонентів: балансувальники, БД, кеш, shared storage, моніторинг.
- Написання документації та runbook для вашої команди.
- Навчання адміністраторів: типові сценарії управління кластером, додавання вузлів, оновлення без downtime.
- Підтримка 24/7 протягом першого місяця експлуатації.
Терміни та вартість
Терміни налаштування кластеризації: від 5 робочих днів для базової конфігурації (2 веб-вузли, master-slave БД, Redis) до 20 робочих днів для повноцінного кластера з моніторингом та документацією. Вартість розраховується індивідуально після аудиту.
Зв'яжіться з нами для аудиту вашої інфраструктури — ми оцінимо поточні вузькі місця та запропонуємо оптимальну конфігурацію кластера під ваші навантаження. Отримайте консультацію з масштабування Бітрікс24 On-Premise.







