Настройка автомасштабирования в облаке для 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 Appointment Booking Widget for a Medical Center
    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% бюджета, что в среднем составляет 300 000 рублей в год для проектов с 50 000+ уникальных посетителей. Подробнее о репликации — MySQL Replication Documentation и Wikipedia: Репликация базы данных.

Признаки, когда кластеризация необходима

Не каждому проекту. Конкретные маркеры:

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

Иногда хватает композитного кэша, оптимизации SQL и вертикального масштабирования. Мы честно скажем, если кластер пока не нужен. Инвестиции в кластеризацию окупаются за 3-6 месяцев при пиковых нагрузках. Средний бюджет проекта — от 150 000 рублей.

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

Балансировщик. 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 дня. Мы рассчитаем стоимость индивидуально под ваши задачи. Закажите аудит — узнайте точную архитектуру и бюджет.