Налаштування веб-кластера 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування веб-кластера 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування веб-кластера 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';
"