Налаштування автомасштабування у хмарі для 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С-Бітрікс це актуально для проектів із нерівномірним навантаженням: інтернет-магазини в сезон розпродажів, подієві портали, B2B-майданчики з денними піками. Тримати 10 серверів заради піку о 15:00 нераціонально — автоскейлінг дозволяє платити лише за фактично використані ресурси.

Хмарні платформи: Яндекс 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: ВМ додається в балансувальник
          → Трафік розподіляється на новий вузол

Вимоги до образу (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-20240315 \
    --source-disk bitrix-golden \
    --description "1C-Bitrix app node, PHP 8.1, March 2024"

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),
            ],
        ],
    ],
];

Налаштування групи ВМ у Яндекс 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 при кожному деплої незручно. Два підходи:

Підхід 1: Code on NFS — код застосунку теж лежить на NFS. Деплой = оновлення файлів на NFS-сервері. Всі ноди автоматично бачать зміни. Мінус: NFS — єдина точка відмови для коду.

Підхід 2: Pull on start — у cloud-init додаємо крок отримання коду з git або артефакту:

# У cloud-init: отримуємо потрібний тег із S3
aws s3 cp s3://bitrix-deploys/release-$(cat /etc/bitrix-release).tar.gz /tmp/
tar -xzf /tmp/release-*.tar.gz -C /var/www/html/

Змінна оточення RELEASE_TAG передається в метадані ВМ при створенні групи, cloud-init читає її та завантажує потрібний артефакт.

Підготовка Бітрікс до автоскейлінгу: чеклист

  • Сесії → 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 на ноду

Склад робіт

  • Аудит архітектури, підготовка Бітрікс до stateless-режиму
  • Налаштування Redis HA (Sentinel або Cluster) для сесій і кешу
  • Налаштування NFS/GlusterFS або S3 для файлів
  • Збірка golden image, cloud-init скрипти
  • Terraform/Pulumi конфігурація Instance Group із політиками масштабування
  • Налаштування Application Load Balancer, health-checks
  • Вирішення проблеми cron/агентів у кластері
  • Навантажувальне тестування: перевірка сценарію scale-out/scale-in

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