Настройка резервного дата-центра для 1С-Битрикс
Если основной сервер недоступен — резервный ДЦ должен принять трафик без ручного вмешательства и без потери данных. На практике большинство «резервных ДЦ» — это сервер с устаревшим бекапом, на который переключаются вручную спустя час после аварии. Нормально работающий резервный ДЦ для Битрикс — это реплицированная БД, зеркало файлов и автоматическое переключение DNS.
Компоненты резервного ДЦ
1. Репликация базы данных
Реплика MySQL/MariaDB в резервном ДЦ — обязательна. Настраивается через стандартную бинлог-репликацию или GTID:
# На резервной реплике
[mysqld]
server-id = 10
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON
log_slave_updates = ON # нужно если реплика станет мастером
Мониторинг лага репликации — ключевая метрика для оценки RPO:
SHOW SLAVE STATUS\G
-- Seconds_Behind_Master: 2 -- приемлемо
-- Seconds_Behind_Master: 300 -- проблема, нужно расследовать
2. Синхронизация файлов
Каталог upload/ синхронизируется через rsync по расписанию или непрерывно через inotifywait:
# Непрерывная синхронизация через inotify
inotifywait -m -r -e create,modify,delete /var/www/bitrix/upload/ |
while read path action file; do
rsync -az /var/www/bitrix/upload/ \
backup-dc:/var/www/bitrix/upload/ &
done
Файлы конфигурации (/bitrix/.settings.php, dbconn.php) — через Git или отдельный rsync скрипт при каждом изменении.
3. Готовый веб-стек на резервной площадке
Резервный сервер должен иметь установленный и настроенный стек (nginx, php-fpm, redis) с корректным конфигом. Файлы Битрикс (/bitrix/, /local/) — синхронизируются раз в сутки или из последнего деплоя.
Переключение: ручное vs автоматическое
Ручное переключение — оператор меняет A-запись DNS после подтверждения аварии. Минимальный TTL для быстрого переключения — 60–300 секунд.
Автоматическое (failover) — healthcheck на основном ДЦ, при недоступности — скрипт обновляет DNS через API:
#!/bin/bash
# healthcheck.sh — запускается каждую минуту через cron
MAIN_IP="185.10.1.100"
BACKUP_IP="195.20.2.100"
DOMAIN="your-site.ru"
if ! curl -sf --max-time 10 "https://$DOMAIN/health" > /dev/null; then
# Переключаем DNS через Cloudflare API
curl -X PATCH \
"https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records/$CF_RECORD_ID" \
-H "Authorization: Bearer $CF_TOKEN" \
-H "Content-Type: application/json" \
--data '{"content":"'"$BACKUP_IP"'","ttl":60}'
# Уведомление команды
curl -s "https://api.telegram.org/bot$TG_TOKEN/sendMessage" \
-d "chat_id=$TG_CHAT&text=FAILOVER+ACTIVATED:+switched+to+backup+DC"
fi
Активация резервного ДЦ: чеклист
Когда failover срабатывает, на резервной площадке нужно:
- Повысить реплику до мастера:
STOP SLAVE; RESET SLAVE ALL; - Обновить
/bitrix/.settings.php— заменить IP мастера БД на локальный - Убедиться, что Redis запущен и сессии доступны
- Проверить cron-задачи Битрикс (агенты):
/bitrix/admin/agent_list.php - Запустить тестовую транзакцию в магазине
- Уведомить службу поддержки об изменении точки обработки заказов
Шаги 1–3 автоматизируются через Ansible playbook:
# failover.yml
- name: Promote MySQL replica to master
mysql_replication:
mode: stopreplica
- name: Update Bitrix DB config
template:
src: settings.php.j2
dest: /var/www/bitrix/bitrix/.settings.php
vars:
db_host: "127.0.0.1" # локальный мастер на резервной площадке
- name: Restart php-fpm
service:
name: php8.1-fpm
state: restarted
Сроки настройки
Настройка резервного ДЦ с репликацией БД, синхронизацией файлов и автоматическим failover DNS — 5–8 рабочих дней, включая тестирование переключения.







