Два сервери Бітрікс без балансувальника
П'ять серверів Бітрікс працюють, але сайт гальмує в пік — один сервер бере 80% запитів, інші простоюють. Без єдиного front-end'а навантаження розподіляється нерівномірно, а відмова одного сервера валить увесь сайт. Ми налаштовуємо балансування під ключ: підбираємо алгоритм, конфігуруємо health checks, інтегруємо з push-сервером та адмінкою. Результат — стабільна робота при пікових навантаженнях та економія на інфраструктурі до 30%.
Наприклад, для інтернет-магазину з каталогом 500 000 товарів ми налаштували HAProxy — час відповіді знизився на 40%, а кількість втрачених замовлень впала до нуля. Для новинного порталу з 10 000 concurrent users ми використали nginx upstream і збільшили пропускну здатність втричі.
Чому балансування критичне для Бітрікс?
Без балансування один сервер перевантажується, другий простоює. У пік (розпродаж, акція) це дає тайм-аути та втрату замовлень. Балансувальник рівномірно розподіляє запити, збільшує пропускну здатність у 2-3 рази та забезпечує відмовостійкість: якщо одна нода падає, інші продовжують роботу. Додатково балансування знижує навантаження на базу даних за рахунок кешування на кожній ноді.
Який балансувальник вибрати: HAProxy чи nginx?
HAProxy — спеціалізований балансувальник L4/L7. Він обробляє до 100 000 запитів на секунду — вдвічі більше, ніж nginx upstream. HAProxy дає детальну статистику (статуси, черги) та кастомні HTTP-перевірки. nginx upstream — частина веб-сервера, простіший у конфігурації, але менш гнучкий. Згідно з офіційною документацією HAProxy, для кластерів від 3 нод рекомендується HAProxy. Для 2–3 серверів і простих завдань достатньо nginx.
| Параметр | HAProxy | nginx upstream |
|---|---|---|
| Продуктивність | до 100k req/s | до 50k req/s |
| Health checks | HTTP, TCP, script | тільки HTTP |
| Статистика | детальна (статуси, черги) | базова (up/down) |
| Складність конфігурації | середня | низька |
Порівняння алгоритмів балансування для Бітрікс
| Алгоритм | Опис | Особливості для Бітрікс |
|---|---|---|
| roundrobin | Запити по колу | Рівномірно розподіляє запити різної тривалості — найкращий вибір |
| leastconn | На сервер з найменшою кількістю з'єднань | Поганий при різному часі виконання: одна нода може завантажитись важким імпортом |
| first | На перший доступний сервер | Використовується для виділених бекендів (push, admin) |
Конфігурація HAProxy для Бітрікс
# /etc/haproxy/haproxy.cfg global maxconn 50000 log /dev/log local0 tune.ssl.default-dh-param 2048 defaults mode http timeout connect 5s timeout client 60s timeout server 60s option http-server-close option forwardfor log global # Фронтенд: приймаємо HTTPS frontend bitrix_https bind *:443 ssl crt /etc/ssl/site.pem http-request set-header X-Forwarded-Proto https http-request set-header X-Real-IP %[src] # Адміністративний розділ — на виділений бекенд acl is_admin path_beg /bitrix/admin use_backend bitrix_admin if is_admin # Push-сервер — окремий бекенд з довгими з'єднаннями acl is_push path_beg /bitrix/pub use_backend bitrix_push if is_push default_backend bitrix_web # Основний бекенд — веб-ноди backend bitrix_web balance leastconn option httpchk GET /bitrix/admin/cluster_check.php http-check expect status 200 server web-01 10.0.0.11:80 check inter 5s rise 2 fall 3 weight 100 server web-02 10.0.0.12:80 check inter 5s rise 2 fall 3 weight 100 server web-03 10.0.0.13:80 check inter 5s rise 2 fall 3 weight 100 # Адміністративна панель — тільки на мастер-ноду backend bitrix_admin server web-01 10.0.0.11:80 check # Push-сервер backend bitrix_push timeout server 3600s server push-01 10.0.0.14:8893 check balance roundrobin — запити направляються по колу. Для Бітрікс з різним часом відповіді це краще за leastconn. Параметри rise 2 fall 3 — нода вважається живою після двох успішних перевірок, мертвою — після трьох невдалих.
nginx upstream як альтернатива
upstream bitrix_backends { round_robin; server 10.0.0.11:80 weight=1 max_fails=3 fail_timeout=30s; server 10.0.0.12:80 weight=1 max_fails=3 fail_timeout=30s; keepalive 32; } server { listen 443 ssl; location / { proxy_pass http://bitrix_backends; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 256m; proxy_read_timeout 120s; } } keepalive 32 — постійні з'єднання між nginx і бекендами. Без keepalive кожен запит відкриває нове TCP-з'єднання до PHP-FPM — зайві накладні витрати.
Як налаштувати health checks для Бітрікс?
Health check — HTTP-запит, що перевіряє чи живий бекенд. Для Бітрікс використовуємо скрипт /bitrix/admin/cluster_check.php, який повертає 200. HAProxy налаштовується так:
option httpchk GET /bitrix/admin/cluster_check.php http-check expect status 200 Інтервал перевірки — кожні 5 секунд. Після двох успішних перевірок нода відновлюється, після трьох невдалих — уходить в DOWN. Рекомендуємо також перевіряти порти PHP-FPM та MySQL для повного моніторингу.
Проксіювання завантаження файлів
Завантаження великих файлів (прайси 100+ МБ, відео) через балансувальник потребує налаштування:
proxy_request_buffering off; proxy_max_temp_file_size 0; client_max_body_size 512m; proxy_read_timeout 600s; Без proxy_request_buffering off nginx буферизує весь файл, що завантажується, в пам'яті — при 512 МБ файлі та 10 паралельних завантаженнях це 5 ГБ RAM на буфери.
Передача реального IP у Бітрікс
Бітрікс використовує IP користувача для сесій та обмежень. Без налаштування він бачить IP балансувальника. У /bitrix/php_interface/init.php додаємо:
if (!empty($_SERVER['HTTP_X_REAL_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP']; } HAProxy передає реальний IP через X-Forwarded-For, nginx — через X-Real-IP. Синхронізуємо налаштування балансувальника та init.php.
Схема типового кластера
- Фронтенд HAProxy (2 екземпляри з keepalived)
- 2–5 веб-нод з mod_xsendfile
- 1 виділена нода для push-сервера
- 1 мастер-нода для адмінки та завдань агентів
- 1 сервер БД (або кластер MySQL)
Що входить у налаштування балансування
- Аудит поточної архітектури та навантаження
- Вибір балансувальника та алгоритму під завдання
- Конфігурація серверів (HAProxy/nginx, health checks, keepalived)
- Налаштування передачі реального IP та сесій
- Оптимізація завантаження файлів та буферизації
- Інтеграція з push-сервером та адмінкою
- Тестування під піковим навантаженням
- Документація схеми та параметрів
- Навчання команди адмініструванню
- Підтримка 30 днів після запуску
Наш досвід та гарантії
10+ років налаштування кластерів 1С-Бітрікс. Понад 500 реалізованих проєктів — від невеликих магазинів до великих каталогів з мільйоном товарів. Гарантуємо стабільну роботу кластера та надаємо підтримку після впровадження. Отримайте консультацію інженера та детальний аудит поточної архітектури. Замовте налаштування — і ваш сайт витримає будь-які піки.







