Настройка веб-кластера 1С-Битрикс
Настройка веб-кластера 1С-Битрикс
Модуль «Веб-кластер» в Битрикс — это не автоматическое горизонтальное масштабирование кнопкой. Это набор механизмов синхронизации, которые позволяют нескольким серверам работать как единое целое: общий кэш, репликация файлов, единые сессии. Без правильной настройки каждого компонента кластер работает непредсказуемо — один узел инвалидирует кэш, другой отдаёт старые данные.
Что входит в модуль веб-кластера
Модуль cluster (BitrixVM Enterprise или отдельная лицензия) включает:
- Управление узлами — регистрация серверов, мониторинг доступности
- Балансировка нагрузки — перенаправление запросов между узлами
- Синхронизация кэша — инвалидация по всем нодам через общий Memcached
-
Репликация файлов — синхронизация
upload/между серверами - Репликация БД — настройка read/write split для MySQL
Активация и настройка узлов
Модуль устанавливается на каждой ноде, но управляется через одну административную панель.
Добавление ноды через API:
\Bitrix\Main\Loader::includeModule('cluster');
$result = \Bitrix\Cluster\Node::add([
'NAME' => 'web-02',
'HOST' => '10.0.0.12',
'PORT' => 443,
'HTTPS' => 'Y',
'STATUS' => 'ACTIVE',
'SORT' => 100,
]);
if ($result->isSuccess()) {
echo 'Нода добавлена: ' . $result->getId();
}
Проверка связности нод:
# С каждой ноды должен быть доступен API других нод
curl -k https://10.0.0.12/bitrix/admin/cluster_check.php
Read/Write Split для базы данных
Самая ценная часть кластера для highload — направление SELECT-запросов на реплики, а INSERT/UPDATE/DELETE на мастер. Снижает нагрузку на мастер на 60–80% при типичном соотношении чтение/запись 10:1.
В .settings.php:
'connections' => [
'value' => [
'default' => [
'className' => '\Bitrix\Main\DB\MysqlConnection',
'host' => 'db-master:3306',
'database' => 'bitrix',
'login' => 'bitrix',
'password' => 'secret',
],
'slave' => [
'className' => '\Bitrix\Main\DB\MysqlConnection',
'host' => 'db-replica:3306',
'database' => 'bitrix',
'login' => 'bitrix_ro',
'password' => 'secret_ro',
],
],
],
Настройка в модуле кластера указывает, какие запросы идут на какое соединение. Транзакционные запросы принудительно маршрутизируются на мастер вне зависимости от типа операции.
Синхронизация файлов через модуль
Модуль умеет синхронизировать файлы между нодами через HTTP-запросы к агентам на каждом сервере. При загрузке файла через административный интерфейс на нода-1 модуль автоматически копирует его на нода-2 и нода-3.
Настройка агента синхронизации на каждой ноде:
# nginx: закрываем агент синхронизации от публичного доступа
location /bitrix/admin/cluster_file_sync.php {
allow 10.0.0.0/24; # только внутренняя сеть
deny all;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Альтернатива встроенной синхронизации — inotify + rsync через lsyncd. Работает независимо от PHP и надёжнее для больших объёмов файлов:
-- /etc/lsyncd/lsyncd.conf.lua
sync {
default.rsync,
source = "/var/www/bitrix/upload",
target = "web-02:/var/www/bitrix/upload",
delay = 1,
rsync = {
compress = false,
owner = true,
perms = true,
}
}
Управление сессиями в кластере
Сессии в файловой системе в кластере неработоспособны — запросы от одного пользователя могут попадать на разные ноды. Переводим на Memcached или Redis:
; php.ini на всех нодах (одинаковый)
session.save_handler = memcached
session.save_path = "10.0.0.30:11211,10.0.0.31:11211"
Sticky sessions на балансировщике — временное решение, не рекомендуется: при выходе ноды из строя все её пользователи теряют сессию.
Проверка работы кластера
# Статус всех нод
curl http://admin:[email protected]/bitrix/admin/cluster_nodes.php?ajax=Y
# Тест инвалидации кэша через API
php -r "
\Bitrix\Main\Loader::includeModule('cluster');
\Bitrix\Cluster\Cache::clearAll();
echo 'Cache cleared on all nodes';
"







