Налаштування автоматичного failover для 1С-Бітрікс

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

Налаштування автоматичного failover для 1С-Bitrix

Primary-сервер бази даних упав о 3 годинах ночі. Дежурний інженер недоступний. Без автоматичного failover сайт буде лежати до ранку. З правильно налаштованим failover — через 30–60 секунд трафік переключиться на реплику, та користувачі нічого не помітять.

Компоненти автоматичного failover

Автоматичний failover для Bitrix складається з трьох незалежних шарів:

1. Failover БД — переключення з primary на replica при падінні primary. 2. Failover веб-сервера — балансувальник виводить недоступний вузол з ротації. 3. Оновлення конфігурації Bitrix — переключення рядка підключення на новий master.

Усі три повинні працювати узгоджено, інакше failover БД без оновлення конфіга програми дасть помилки підключення.

Failover PostgreSQL через Patroni

Patroni — де-факто стандарт для автоматичного failover PostgreSQL. Архітектура: Patroni-агент на кожному вузлі, etcd/Consul як DCS (distributed configuration store), HAProxy або pgBouncer перед кластером.

Patroni стежить за станом вузлів та при недоступності primary проводить вибори нового лідера через DCS. Реплика з мінімальним відставанням (найменшим LSN lag) стає новим primary. Весь процес займає 10–30 секунд.

Критично важливо для Bitrix: програма підключається до БД не напрямо до IP-сервера, а через HAProxy або через віртуальний IP (VIP), керований Patroni:

# /bitrix/.settings.php — підключення через HAProxy
'dsn' => 'pgsql:host=haproxy.internal;port=5432;dbname=bitrix',

HAProxy перевіряє Patroni REST API (http://patroni-node:8008/master) та спрямовує трафік тільки на поточний primary.

Failover MySQL через Orchestrator

Для MySQL-інсталяцій Bitrix аналог Patroni — Orchestrator. Він стежить за топологією репліцирування, виявляє падіння master та автоматично промотує найбільш актуальну replica.

Після промоції Orchestrator викликає hook-скрипт, який оновлює DNS або notify-скрипт для HAProxy.

Налаштування Bitrix для роботи з репліцею

При failover новий primary — це бувша read-replica. До failover Bitrix міг бути налаштований на розділення read/write:

// /bitrix/.settings.php
'connections' => [
    'default' => [
        'host' => 'primary.db',
        'port' => '5432',
        // ... write-з'єднання
    ],
    'replica' => [
        'host' => 'replica.db',
        'port' => '5432',
        'readonly' => true,
        // ... read-з'єднання
    ],
],

Після failover replica стала primary — рядок replica більше не повинна використовуватися для read-only з'єднання (вона тепер приймає write). HAProxy з перевіркою Patroni API вирішує це автоматично: обидва порти (write 5432, read 5433) перевіряються окремо.

Перевірка після failover

Після переключення Bitrix може утримувати застарілі дані в кеші, якщо кеш був налаштований з привязкою до old primary. Для memcached/Redis — проблем немає. Для файлового кешу: інвалідуємо через BXClearCache(true) або через адміністративну частину.

Інша проблема — незафіксовані транзакції на момент падіння primary. WAL-репліцирування гарантує застосування всіх записаних транзакцій на replica, але транзакції, які перебували в пам'яті primary у момент краху, втрачаються. Це нормальна поведінка синхронної/асинхронної репліцирування з втратами в секунди.

Моніторинг стану

# Patroni — поточний лідер
curl http://patroni-node1:8008/cluster | jq '.members[] | {name, role, lag}'

# Затримка репліцирування (PostgreSQL)
SELECT
    client_addr,
    pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lag_bytes
FROM pg_stat_replication;

Алерт: якщо lag_bytes > 50MB — репліцирування не встигає, ризик втрати даних при failover зростає.

Що налаштовуємо

  • Patroni (PostgreSQL) або Orchestrator (MySQL) на кластері БД
  • HAProxy з health-check через Patroni REST API
  • Підключення Bitrix через HAProxy, а не напрямо до IP БД
  • Hook-скрипт post-failover для інвалідації кешу та сповіщення
  • Моніторинг LAG репліцирування з алертом при перевищенні порога
  • Регулярне тестування failover на навантажувальному стенді