Настройка кластерной конфигурации 1С-Битрикс
Настройка кластерной конфигурации 1С-Битрикс
Один сервер не может масштабироваться бесконечно. При пиковых нагрузках (акции, праздники) сайт падает или отвечает за 10+ секунд — вертикальное масштабирование упирается в стоимость и физические ограничения железа. Битрикс поддерживает горизонтальное масштабирование через встроенный механизм веб-кластера: несколько серверов приложений, общая база данных с репликацией, распределённый кэш.
Архитектура кластера Битрикс
Стандартная схема для highload:
[Load Balancer]
/ | \
[web-1] [web-2] [web-3]
| | |
[Shared Storage - NFS/GlusterFS]
|
[DB Master] ---> [DB Replica-1]
---> [DB Replica-2]
|
[Memcached / Redis Cluster]
[Elasticsearch Cluster]
Все веб-узлы работают с одним хранилищем файлов, общей БД и общим кэшем. Загрузки файлов (изображения, прайсы) попадают в разделяемое хранилище, доступное всем нодам.
Требования к кластеризуемому проекту
До перехода на кластер проверяем:
- Нет хранения данных в
$_SESSIONбез общего хранилища сессий - Нет прямых записей в локальную файловую систему (временные файлы — в
/tmpна shared, кэш — в Memcached) - Нет hardcoded путей, зависящих от конкретного сервера
- Файлы кэша Битрикс (
/bitrix/cache/) смонтированы с NFS или вынесены в Memcached
Настройка модуля веб-кластера
В административной панели: Управление → Производительность → Кластер.
Активация через PHP:
\Bitrix\Main\Loader::includeModule('cluster');
// Регистрируем узлы кластера
$cluster = new \CCluster();
$cluster->Add([
'NAME' => 'web-02',
'HOST' => '10.0.0.12',
'PORT' => 80,
'STATUS' => 'ACTIVE',
]);
Shared Storage: NFS vs GlusterFS
NFS — проще в настройке, подходит для 2–3 нод в одном датацентре:
# На NFS-сервере
apt install nfs-kernel-server
echo "/var/www/bitrix/upload 10.0.0.0/24(rw,sync,no_root_squash)" >> /etc/exports
exportfs -a
# На веб-нодах
apt install nfs-common
mount -t nfs 10.0.0.20:/var/www/bitrix/upload /var/www/bitrix/upload
Монтируем только директории с пользовательским контентом: upload/, cache/ (если не Redis), resize_cache/.
GlusterFS — распределённая FS с репликацией, без единой точки отказа. Сложнее в настройке, но нет SPOF при выходе NFS-сервера.
Распределённый кэш
Без общего кэша каждый веб-узел имеет свой изолированный файловый кэш. После обновления товара инвалидация происходит только на одном узле — остальные отдают устаревшие данные.
// /bitrix/.settings.php — единый для всех нод
'cache' => [
'value' => [
'type' => 'memcache',
'memcache' => [
['host' => '10.0.0.30', 'port' => 11211],
['host' => '10.0.0.31', 'port' => 11211],
],
'sid' => 'bitrix_production',
],
],
Синхронизация файлов конфигурации
.settings.php, dbconn.php и php_interface/ должны быть идентичны на всех узлах. Используем rsync через cron или ansible:
# Мастер-нода синхронизирует конфиги на остальные
rsync -az /var/www/bitrix/bitrix/.settings.php web-02:/var/www/bitrix/bitrix/
rsync -az /var/www/bitrix/bitrix/.settings.php web-03:/var/www/bitrix/bitrix/
В production-окружениях конфигурация хранится в Git и деплоится через CI/CD одновременно на все ноды.
Сроки
Проектирование и развёртывание кластера из 3 веб-нод с NFS-хранилищем, репликацией БД и Memcached — 5–10 рабочих дней в зависимости от сложности проекта и текущего состояния инфраструктуры.







