Налаштування веб-кластера 1С-Бітрікс
Налаштування веб-кластера 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 на балансувальнику — тимчасове рішення, не рекомендується: при виходi ноди з ладу всі її користувачі втрачають сесію.
Перевірка роботи кластера
# Статус всіх нод
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';
"







