Налаштування автомасштабування в хмарі для 1С-Бітрікс

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

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

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

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

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

Налаштування автомасштабування в хмарі для 1С-Бітрікс

Ми часто бачимо проєкти, де сайт на Бітрікс лягає під час акції. Сервер не витримує — адміни вручну піднімають копії. Автомасштабування вирішує цю проблему: кількість вузлів змінюється автоматично. Зростає під навантаження і скорочується в простої. Для 1С-Бітрікс це особливо актуально для інтернет-магазинів у сезон розпродажів, подієвих порталів та B2B-майданчиків із денними піками. Тримати 10 серверів заради піку о 3 годині дня нераціонально. Автоскейлінг дозволяє платити лише за фактично використані ресурси. Наш досвід показує, що грамотне налаштування скорочує витрати на інфраструктуру в 2–3 рази при збереженні відмовостійкості.

Хмарні платформи: Яндекс Cloud та VK Cloud

У російському сегменті основні платформи — Яндекс Cloud (Instance Groups) та VK Cloud (Auto Scaling Groups). Архітектура ідентична AWS Auto Scaling: групи віртуальних машин з політиками масштабування на основі метрик (CPU, RPS, memory). Принцип роботи:

  • Metric Alert (CPU > 70% за 5 хвилин)
  • Scale-out trigger
  • Створюється нова ВМ із golden image
  • Cloud-init: встановлення nginx + php-fpm, монтування NFS
  • Health check: ВМ додається до балансувальника
  • Трафік розподіляється на новий вузол
Параметр Яндекс Cloud VK Cloud
Інтеграція з Terraform Підтримка офіційного провайдера Обмежена підтримка
Managed Kubernetes Є (з автоматичним масштабуванням) Є (з ручним конфігуруванням)
Техпідтримка Стандартна платна Включена в тариф

Обидві платформи забезпечують відмовостійкість, але налаштування golden image та cloud-init ідентичне. Golden image — стандартний патерн для stateless-архітектури. Офіційна документація по Terraform допоможе розібратися з провайдерами.

Чому golden image — основа автоскейлінгу?

Автоскейлінг працює тільки якщо нова ВМ готова приймати трафік без ручного втручання. Образ повинен містити:

  • nginx, php-fpm потрібної версії з розширеннями для Бітрікс
  • PHP-код додатку (або механізм його швидкої доставки)
  • Скрипт монтування спільного сховища (/upload/, кеш)
  • Скрипт підключення до Redis для сесій
  • Конфігурацію Бітрікс з правильними параметрами БД та Redis

Створення golden image в Яндекс Cloud:

# Запускаємо базову ВМ, налаштовуємо вручну
# Після налаштування створюємо знімок диска
yc compute disk create --snapshot-id <snapshot-id> --name bitrix-golden

# Створюємо образ зі знімка
yc compute image create \
    --name bitrix-app-v1 \
    --source-disk bitrix-golden \
    --description "Бітрікс 1C-Bitrix app node, PHP 8.1"

Cloud-init: автоматичне налаштування при старті ВМ

Приклад конфігурації cloud-init

Cloud-init виконується при першому старті ВМ. У нього виносимо все, що залежить від конкретного оточення:

# /etc/cloud/cloud.d/bitrix-init.yaml
#cloud-config
runcmd:
  # Монтуємо спільний том NFS
  - echo "nfs-server:/srv/bitrix-shared /var/www/html/upload nfs rw,sync,hard,intr 0 0" >> /etc/fstab
  - mount -a

  # Реєструємо ноду в consul для service discovery
  - |
    curl -X PUT http://consul:8500/v1/agent/service/register \
      -d '{"name":"bitrix-web","address":"'$(hostname -I | awk '{print $1}')'"}'

  # Прогріваємо кеш PHP OPcache
  - php /var/www/html/bitrix/cli/health.php --warmup

  # Стартуємо сервіси
  - systemctl start nginx php8.1-fpm
  - systemctl enable nginx php8.1-fpm

Конфігурація Бітрікс через змінні оточення (не хардкодимо в образі):

// /bitrix/.settings.php — читає з environment
return [
    'connections' => [
        'value' => [
            'default' => [
                'className' => '\\Bitrix\\Main\\DB\\MysqlConnection',
                'host'      => getenv('DB_HOST') ?: 'mysql-master',
                'database'  => getenv('DB_NAME') ?: 'bitrix',
                'login'     => getenv('DB_USER') ?: 'bitrix',
                'password'  => getenv('DB_PASS') ?: '',
            ],
        ],
    ],
    'cache' => [
        'value' => [
            'type'  => 'redis',
            'redis' => [
                'host' => getenv('REDIS_HOST') ?: 'redis-master',
                'port' => (int)(getenv('REDIS_PORT') ?: 6379),
            ],
        ],
    ],
];

Для зберігання сесій використовуємо Redis. Це в 10 разів швидше за файлове зберігання.

Налаштування групи ВМ в Яндекс Cloud (terraform)

resource "yandex_compute_instance_group" "bitrix_web" {
  name               = "bitrix-web-asg"
  service_account_id = var.service_account_id

  instance_template {
    platform_id = "standard-v3"

    resources {
      cores  = 4
      memory = 8
    }

    boot_disk {
      initialize_params {
        image_id = var.bitrix_golden_image_id
        size     = 50
      }
    }

    network_interface {
      subnet_ids = var.subnet_ids
    }

    metadata = {
      user-data = file("cloud-init.yaml")
    }
  }

  scale_policy {
    auto_scale {
      initial_size    = 2
      min_zone_size   = 1
      max_size        = 10
      measurement_duration = 60   # секунди
      warmup_duration      = 120  # прогрів нової ВМ

      cpu_utilization_rule {
        utilization_target = 70 # %
      }
    }
  }

  deploy_policy {
    max_unavailable = 1
    max_expansion   = 2
  }

  load_balancer {
    target_group_name = "bitrix-target-group"
  }
}

Як деплоїти код без перескладання образу?

Перескладати golden image при кожному деплої незручно. Використовуємо підхід Pull on start: у cloud-init додаємо крок отримання коду з артефакту. Змінна оточення RELEASE_TAG передається в метадані ВМ при створенні групи, cloud-init читає її та завантажує потрібний архів з S3. Деплой зводиться до зміни тега в метаданих — всі нові ноди стартують з актуальним кодом.

Ось покрокова інструкція по деплою:

  1. Зібрати артефакт з кодом додатку та завантажити в S3.
  2. Оновити метадані групи ВМ: вказати новий тег.
  3. Запустити rolling update групи: ноди по черзі перестворюються з новим тегом.
  4. Перевірити, що всі ноди працюють з новим кодом.

Як підготувати Бітрікс до stateless-архітектури: чеклист

  • Сесії → Redis (не файли)
  • Кеш → Redis або NFS (не локальний диск)
  • Файли /upload/ → NFS або S3
  • Тимчасові файли, черги → Redis або БД, не /tmp/
  • Cron-завдання → запускаються тільки на одній designated ноді (не на всіх)
  • Бітрікс агенти → переключити на cron-режим (BX_CRONTAB=Y) та запускати з designated ноди
  • REMOTE_ADDR → коректна передача через X-Forwarded-For від балансувальника

Критичний момент з cron: якщо агенти Бітрікс запустяться на всіх нодах одночасно — будуть дублі. У bitrix/.settings.php параметр bx_crontab_nodes або обмеження через iptables на cron-ноду.

Моніторинг та алерти

Метрики для політик автоскейлінгу:

Метрика Threshold scale-out Threshold scale-in
CPU середнє по групі > 70% за 3 хв < 30% за 10 хв
Середній час відповіді (p95) > 2000 ms < 500 ms
Черга запитів nginx > 100 < 10
RPS > 500 на ноду < 100 на ноду

Що ви отримуєте

  • Документацію по архітектурі з описом всіх компонентів
  • Доступи до інфраструктури та IaC-коду (Terraform)
  • Інструкції по деплою та оновленню
  • Навчання вашої команди (2-годинний воркшоп)
  • Супровід протягом місяця після введення в експлуатацію
  • Повна автоматизація: від створення ВМ до моніторингу

Замовте аудит вашої інфраструктури — ми оцінимо поточну архітектуру та запропонуємо план міграції. Отримайте консультацію інженера, щоб обговорити деталі вашого проєкту.

Кейс: замовник з піковим навантаженням 10 000 RPS у годину пік. Після впровадження автоскейлінгу downtime знизився з 15 хвилин до нуля. Вартість інфраструктури скоротилася на 40% за рахунок відключення зайвих нод у простої. Досвід нашої команди — понад 50 успішних проєктів на Бітрікс, 10+ років у розробці.

Терміни: базовий автоскейлінг з двома нодами — 3–4 тижні. Продакшн-готова схема з IaC, моніторингом та runbook — 6–10 тижнів.

Кластеризація 1С-Бітрікс

Уявіть: flash-розпродаж, 10 000 користувачів одночасно заходять на сайт, сервер падає з 502, кошики зникають, менеджери телефонують у підтримку. Ми бачили це десятки разів. Рішення — кластеризація: балансування запитів між серверами, реплікація бази даних та автоматичне перемикання при збої. Замовте аудит поточної інфраструктури — за 2 дні визначимо, чи потрібен кластер і який. Наш досвід — 40+ високонавантажених проектів на Бітрікс.

Чому кластеризація 1С-Бітрікс критична для відмовостійкості?

80-90% запитів у типовому проекті — SELECT. Каталог, картки, фільтри — все читання. Master-slave реплікація віддає SELECT на slave-сервери, master залишається тільки для запису. Модуль «Веб-кластер» (редакція «Бізнес» і вище) маршрутизує запити автоматично.

Налаштування, де спотикаються: на master binlog_format = ROW. STATEMENT-реплікація на NOW() або UUID() дає розбіжності — потім тиждень дебагу. Унікальний server-id, включений binary log. На slave — read_only = ON, relay-log. Ініціалізація через xtrabackup (не mysqldump, який блокує таблиці на півгодини на базі в 20 ГБ).

Metric #1 — Seconds_Behind_Master. Якщо slave відстає на 5+ секунд, покупець оформляє замовлення, повертається в особистий кабінет — а замовлення немає (SELECT пішов на відстаючий slave). Модуль дозволяє виключити критичні запити з маршрутизації на slave вручну.

Failover: Orchestrator або ProxySQL підвищують slave до master за 15-30 секунд. Модуль підтримує до 9 slave-з'єднань з налаштовуваними вагами. Перевірка цілісності — pt-table-checksum з Percona Toolkit. Економія на неефективній інфраструктурі — до 40% бюджету.

Ознаки, коли кластеризація необхідна

Не кожному проекту. Конкретні маркери:

  • 50 000-100 000 уніків на добу — один сервер починає віддавати 502 в пікові години
  • Пікові стрибки в 5-10 разів (розпродажі, flash-sale) — навантаження зростає за хвилини, вертикально не масштабуєшся
  • SLA 99.9% (не більше 8.7 годин простою на рік) — з одним сервером недосяжно
  • Географічна розподіленість користувачів

Іноді вистачає композитного кешу, оптимізації SQL та вертикального масштабування. Ми чесно скажемо, якщо кластер поки не потрібен. Інвестиції в кластеризацію окупаються за 3-6 місяців при пікових навантаженнях.

Архітектура — чотири рівні

Балансувальник. HAProxy, nginx upstream або хмарний LB. Round-robin для рівномірного розподілу, ip-hash для прив'язки сесій, least connections для адаптивного балансування. Health checks виводять мертві сервери з пулу. SSL-термінація на балансувальнику розвантажує веб-ноди.

Веб-сервери. Ідентичні nginx + php-fpm, кожна з повною копією коду. Сесії — в Redis/Memcached, не на диску (інакше при перемиканні між серверами користувач втрачає кошик). У хмарі — автоскейлінг: навантаження зросло — додалися сервери, впало — вимкнулися.

Кеш. Redis Cluster з шардінгом даних по вузлах. Redis Sentinel для невеликих кластерів. Memcached швидкий, але без persistence. Конфігурація в .settings.php — сервери, ваги, стратегія шардінгу.

Файлове сховище. Завантаження, картинки — доступні з кожної ноди. NFS для 2-3 серверів, але це єдина точка відмови. GlusterFS — розподілена ФС без single point of failure. S3 (MinIO, AWS, Яндекс Object Storage) — винос статики в об'єктне сховище, модуль Бітрікс працює з коробки.

Як забезпечити failover на кожному рівні кластера?

Рівень Механізм RTO
Балансувальник Keepalived + VRRP < 5 сек
Веб-сервери Health check балансувальника < 10 сек
MySQL master Orchestrator / ProxySQL < 30 сек
MySQL slave Виключення з пулу < 5 сек
Redis Sentinel / Cluster failover < 15 сек
Файли GlusterFS реплікація Автоматично

Кластер у 5 разів надійніший за одиночний сервер — при відмові будь-якого вузла сервіс продовжує працювати.

Типові помилки при налаштуванні кластера

  • Сесії на файлах — при відключенні сервера користувач втрачає кошик та авторизацію.
  • Не налаштований Seconds_Behind_Master — продажі падають, а SLA не виконується.
  • Одна точка відмови на рівні файлового сховища (NFS без реплікації).
  • Відсутність моніторингу реплікації — розбіжність даних залишається непоміченою.

Ми включаємо перевірку всіх цих точок в аудит та тестування.

Процес роботи

  1. Аудит навантаження — профіль навантаження, вузькі місця, навантажувальне тестування. Знаходимо стелю одиночного сервера.
  2. Проектування — компоненти під вимоги та бюджет. Не всім потрібен GlusterFS — іноді вистачить NFS та бекапів.
  3. Інфраструктура — сервери, мережа, файрволи. Ansible для автоматизації — будь-який вузол можна перестворити за хвилини.
  4. Міграція — перенесення з мінімальним простоєм. Компоненти підключаються послідовно, кожен крок з перевіркою.
  5. Тестування — імітація пікових умов. Ронимо master, відключаємо веб-сервер, вбиваємо Redis — дивимось, як система себе поводить.
  6. Документація — схема архітектури, runbook, плани аварійного відновлення.

Що входить в роботу з кластеризації?

Deliverable Опис
Аудит поточного навантаження Профіль запитів, вузькі місця, навантажувальне тестування
Проектна документація Схема архітектури, runbook, план аварійного відновлення
Інфраструктура Налаштування серверів, мережі, файрволів (Ansible)
Міграція Перенесення з мінімальним простоєм, поетапне підключення компонентів
Тестування Імітація пікових умов: ронимо master, відключаємо веб-сервер, вбиваємо Redis
Навчання команди Документація, консультації 2 тижні після впровадження
Гарантія 6 місяців на коректну роботу кластера — якщо щось пішло не за сценарієм, виправляємо за 24 години

Строки

Задача Строки
Аудит та проектування 1-2 тижні
Базовий кластер (2 веб + master-slave MySQL) 2-3 тижні
Повний кластер з failover на всіх рівнях 4-6 тижнів
Моніторинг + навантажувальне тестування 2-4 тижні

Зв'яжіться з нами — отримайте консультацію інженера та попередню оцінку проекту за 2 дні. Ми розрахуємо вартість індивідуально під ваші завдання. Замовте аудит — дізнайтеся точну архітектуру та бюджет.