Релиз nxs-anomaly: отечественная альтернатива Grafana OnCall для управления дежурствами, маршрутизации оповещений и эскалации инцидентов. Доступен на GitHub
Все статьи

Отказоустойчивый Bitrix-кластер: варианты инфраструктуры и особенности построения

Разбираем варианты отказоустойчивой инфраструктуры для Bitrix — от монолита до кластера

Время чтения
13 минут
Раздел
Статьи
Отказоустойчивый Bitrix-кластер: варианты инфраструктуры и особенности построения

Построение отказоустойчивой инфраструктуры для проектов на Bitrix — задача, в которой необходимо учитывать большое количество факторов. Особенности работы Bitrix-ядра накладывают определённые ограничения на архитектуру, поэтому универсального варианта инфраструктуры, одинаково подходящего для всех проектов, не существует.

В этой статье разберём основные варианты Bitrix-инфраструктуры с разным уровнем отказоустойчивости: от классического монолита до сложных кластерных решений на базе Kubernetes.

Материал представляет собой теоретическую часть серии статей. Здесь рассмотрим особенности кластеризации, варианты архитектуры и основные нюансы Bitrix-составляющей.

Что такое кластер и отказоустойчивая инфраструктура

Кластер — это объединение нескольких вычислительных систем — виртуальных или физических серверов, — которые работают совместно для выполнения общих задач.

Кластер позволяет:

1. Управлять несколькими серверами с помощью одного модуля управления.

2. Добавлять произвольное количество рабочих серверов без остановки системы.

3. Синхронизировать данные между серверами.

4. Распределять запросы по разным серверам.

5. Минимизировать время простоя в случае выхода из строя одного из серверов.


Отказоустойчивая инфраструктура — это кластер, построенный по методике обеспечения высокой доступности и гарантирующий минимальное время простоя в случае выхода из строя одного или нескольких узлов кластера — в зависимости от масштабов инфраструктуры.

Если взять за основу данные из Wikipedia, кластер характеризуется несколькими отличительными особенностями:

  • Высокая доступность — наиболее распространённый уровень, ожидаемый пользователями. Система или приложение доступны в обозначенные требованиями дни и часы без незапланированных простоев, а о запланированных остановках сообщается заранее. 
  • Непрерывный режим работы (continuous operations) — система доступна 24 часа в сутки, 7 дней в неделю без запланированных простоев. 
  • Постоянная доступность (continuous availability) — сочетание высокой доступности с непрерывным режимом работы. Система доступна 24 часа в сутки, 7 дней в неделю без запланированных или незапланированных простоев.

Вычислительные машины в кластере чаще всего называют нодами. Например: первая нода MySQL, вторая нода PHP, третья нода Redis.

Основные варианты Bitrix-инфраструктуры

По нашему опыту, чаще всего встречаются четыре разновидности Bitrix-инфраструктуры с разным процентом отказоустойчивости:

  1. 1. Инфраструктура с 0% отказоустойчивости.

  2. 2. Инфраструктура с 70% отказоустойчивости.

  3. 3. Инфраструктура с 90% отказоустойчивости.

  4. 4. Инфраструктура с 95% отказоустойчивости.

Разберём каждый из вариантов отдельно.

Инфраструктура с 0% отказоустойчивости

У системных администраторов такую инфраструктуру называют Bitrix-монолитом.
  

Существует два основных варианта Bitrix-монолита:

1. BitrixVM.

В российском сегменте такой вариант встречается чаще всего. Примерно 80% проектов работают на данной инфраструктуре.

BitrixVM — это настроенное решение от компании 1С-Битрикс, работающее на базе CentOS Linux и использующее для настройки Ansible-роли. Оно включает необходимые для работы Bitrix сервисы и инструментарий для их настройки.


Плюсы BitrixVM:

  • В тестах производительности в административной панели Bitrix можно получать очень высокие показатели скорости работы. 
  • Решение очень легко настраивается. Достаточно изучить доступные руководства и уметь пользоваться стрелками и цифрами на клавиатуре.

Минусы BitrixVM

  • Сложность администрирования. Чтобы разобраться в символьных ссылках BitrixVM, необходимо потратить достаточно много времени.
  • Безопасность. Все сайты, которые находятся на сервере, работают от одного пользователя bitrix. Кроме того, чаще всего пользователь Bitrix имеет права sudo.Если будет взломан один сайт, потенциально будут взломаны все сайты, а злоумышленник может получить доступ к root.
  • Зависимости. Это становится проблемой, если необходимо удалить или переустановить один или несколько пакетов. При удалении пакета можно затронуть важный пакет или библиотеку из-за зависимостей со скриптами BitrixVM. 
  • Сложность обновления и переезда. Если необходимо мигрировать на другой сервер, можно потерять большое количество данных и настроек. В результате время переезда может существенно увеличиться: вместо стандартных 10–12 часов Bitrix-переезда оно может занимать 20–30 часов. Кроме того, если обновление прошло не по плану, решение от Bitrix не предусматривает возможности отката к предыдущей версии. 
  • Нулевая отказоустойчивость.Что это означает на практике? Любая крупная DDoS-атака может положить проект на долгие часы. При отказе сервера будет недоступен весь проект. Иными словами: Лёг сервер — лёг проект. Поэтому BitrixVM не рекомендуется использовать в инфраструктуре, где на одном сервере одновременно работают несколько сайтов.

2. Ручное развёртывание на Debian / Ubuntu / CentOS.

Альтернативой BitrixVM является ручное развёртывание Bitrix-проектов на Debian, Ubuntu или CentOS без установки BitrixVM.

При таком варианте инфраструктуры отсутствуют первые четыре рассмотренных выше недостатка BitrixVM:

  • сложность администрирования;
  • проблемы с безопасностью;
  • большое количество зависимостей;
  • сложности с обновлением и миграцией.

При этом ручное развёртывание требует больше времени на первоначальную установку и настройку программного обеспечения.

Однако в обоих вариантах — BitrixVM и ручном развёртывании — итог один: 0% отказоустойчивости.


Почему Bitrix-монолиты так популярны:

  1. 1. Простота развёртывания BitrixVM очень легко развернуть. Путём выбора нескольких пунктов меню можно быстро создать новый проект. 
  2. 2. Низкая стоимость. Достаточно арендовать один сервер для работы всего проекта.

Кому подходит инфраструктура с 0% отказоустойчивости:

  • Проектов, которые могут позволить себе простой продолжительностью от 2 до 12 часов.
  • Порталов, которые представляют собой исключительно информационный ресурс.
  • Новостных сайтов.

Инфраструктура с 0% отказоустойчивости не подходит для:

  • Интернет-магазинов, поскольку простой проекта означает потерю клиентов.
  • Проектов, посещаемость которых превышает 10 000 пользователей в день.

Инфраструктура с 70% отказоустойчивости

Следующий вариант встречается значительно реже. По личным наблюдениям, примерно 15% проектов на Bitrix используют подобную инфраструктуру.

Она уже включает несколько серверов:

1. Ноды MySQL со slave-серверами.

2. Резервные серверы с кодом и резервными копиями.

Такой кластер уже является отказоустойчивым. В нём реализовано ручное переключение трафика на резервные серверы.

Например:

  • если выходит из строя первая PHP-нода, можно переключить A-запись на вторую ноду;
  • если выходит из строя первая MySQL-нода, можно переключить трафик на вторую MySQL-ноду.


Плюсы:

  • Несколько рабочих копий проекта. Проект имеет несколько рабочих копий, синхронизированных между собой.
  • Возможность быстрого восстановления. В случае выхода из строя основной ноды всегда остаётся вариант восстановления проекта в кратчайшие сроки.
  • Горизонтальное масштабирование. Можно добавлять несколько нод того или иного сервиса — например, MySQL или PHP.
  • Возможность распределять запросы MySQL. Если используется лицензия Bitrix, можно настроить кластер MySQL таким образом, чтобы запросы на запись направлялись на master, а запросы на чтение — на slave. Это позволяет ускорить работу проекта. Однако необходимо учитывать, что такая лицензия стоит от 1 000 000 рублей, поэтому позволить её себе может далеко не каждый проект.
  • Горизонтальное масштабирование инфраструктуры. Архитектура позволяет постепенно увеличивать количество серверов по мере роста проекта.

Минусы:

  • Ручное переключение трафика В случае выхода из строя основной ноды необходимо вручную изменить A-запись и адрес базы данных в коде Bitrix. Это может занимать определённое время. Например, если аварийное отключение ноды произойдёт ночью.
  • Уязвимость к DDoS-атакам. Инфраструктура всё ещё уязвима для DDoS-атак. Мощная DDoS-атака может положить проект на несколько часов. В такой ситуации простое переключение A-записи не поможет.

Инфраструктура с 70% отказоустойчивости подходит для:

  • Проектов, для которых простой продолжительностью один-два часа допустим.
  • Проектов с посещаемостью от 10 000 до 100 000 пользователей в день.
  • Небольших интернет-магазинов.

Инфраструктура с 70% отказоустойчивости не подходит для:

  • Проектам, для которых простой на один-два часа недопустим.
  • Проектам с посещаемостью свыше 100 000 пользователей в день.

Инфраструктура с 95% отказоустойчивости

Это практически идеальный и при этом крайне редко встречающийся вариант — Bitrix в Kubernetes с использованием CI/CD.

Такой вариант встречается крайне редко — менее чем в 1% случаев.

Инфраструктура строится на базе Kubernetes (k8s) с использованием Docker.

Почему такой вариант встречается крайне редко:

1. Высокая стоимость.

Построение подобной инфраструктуры требует существенных затрат.

При этом такие решения действительно способны выдерживать очень серьёзные нагрузки. Например, встречались ситуации, когда Bitrix-проект подвергался DDoS-атакам 24/7 и при этом продолжал работать.

2. Особенности работы Bitrix.

Главная проблема связана с тем, как Bitrix работает с изменениями.

Любое изменение страницы через административную панель Bitrix может привести к полной поломке проекта на стороне серверов, поскольку Bitrix изменяет не только код, но и базу данных.

Поэтому необходимо приучить разработчиков не использовать административную панель для подобных изменений, а вносить изменения в код через систему контроля версий, например Git.

На практике это не так просто, как может показаться.

Для перехода в Kubernetes подходят проекты:

1. Которые уже давно являются кастомными. Всё, что объединяет их с Bitrix, — это ядро Bitrix.

2. Которые уже давно не используют административную панель и вносят все изменения в код только через CI.

Такой вариант является наиболее отказоустойчивым и включает несколько уровней защиты от отказов:

  • защиту от DDoS;
  • отказоустойчивость базы данных;
  • отказоустойчивость PHP-серверов.

Инфраструктура с 90% отказоустойчивости

Теперь вернёмся к более практичному варианту и рассмотрим инфраструктуру с 90% отказоустойчивости.

Она включает:

1. Автоматическое переключение трафика при выходе из строя основных нод.

2. Несколько рабочих PHP- и MySQL-нод.

3. Отличную вертикальную масштабируемость.

Для построения такой архитектуры необходимо реализовать четыре основных компонента:

1. Распределённая файловая система Нужна распределённая файловая система для кода Bitrix, чтобы любое изменение в коде проекта сразу фиксировалось на нескольких серверах.

2. Синхронная репликация MySQL Необходима синхронная репликация MySQL для распределения запросов и автоматического переключения трафика между MySQL-серверами.

3. Проксирование трафика Необходимо проксирование трафика для переключения запросов между серверами при выходе из строя одной из нод.

4. Проксирование MySQL-трафика Необходимо проксирование MySQL-трафика для автоматического переключения запросов к базе данных между серверами в случае выхода из строя одной из нод.

Для достижения этих целей можно использовать следующие решения:

  • Для первой цели можно использовать Ceph или GlusterFS. Bitrix активно работает с файлами, и при их расхождении между серверами могут возникать ошибки и критические последствия. Поэтому необходимо обеспечить актуальность файлов на всех серверах. lsyncd не подходит из-за возможных задержек синхронизации.
  • Для второй цели рекомендуем Percona XtraDB Cluster. Это удобный в администрировании MySQL-кластер с автоматическим восстановлением репликации и удобным Dashboard.

  • Для третьей цели подойдут Nginx Upstream, HAProxy или Network Load Balancer. Они позволяют отслеживать состояние PHP-нод и управлять трафиком внутри кластера.

  • Для четвёртой цели рекомендуем ProxySQL. Он позволяет управлять трафиком между MySQL-серверами, настроить резервирование и обойти ограничение Bitrix, связанное с кластеризацией MySQL.

Схема инфраструктуры

На данный момент существует несколько вариантов построения данной инфраструктуры. Основное отличие заключается во входной точке в кластер.

Вариант 1. Proxy-серверы.

На входе используются proxy-серверы с nginx upstream или HAProxy.

В этом случае в инфраструктуру добавляются ещё два сервера. Стоимость их аренды будет относительно невысокой, поскольку для этих серверов не требуются большие вычислительные мощности.

При этом увеличивается количество серверов, которыми необходимо управлять, а значит, возрастает нагрузка на системных администраторов.

В данном варианте A-запись указывает сразу на два сервера, после чего proxy-ноды распределяют трафик по кластеру.


Вариант 2. Network Load Balancer

Более предпочтительным вариантом является использование Network Load Balancer.

По себестоимости такой вариант будет сопоставим с предыдущим, однако нагрузка на системных администраторов будет несколько ниже.

Основное преимущество такого решения — отсутствие дополнительных серверов, за которыми необходимо постоянно следить.


Особенности инфраструктуры

В этой инфраструктуре можно менять количество серверов. Главное - это иметь нечетное количество серверов mysql и php с ceph. Зачем это необходимо? Это необходимо для того, чтобы не было рассинхронизации данных в связи с проблемами в сети. 

Например, в случае проблем с сетью две ноды mysql будут считать себя главными и будут считать свои данные самыми актуальными. Когда сеть восстановится, будут проблемы и ошибки в данных, что приведет к проблемам работы проекта. Для устранения этой проблемы всегда необходимо использовать нечетное количество серверов.

Для отслеживания конфигурации сервисов на всех серверах можно использовать:

  • lsync-репликацию.
  • Управление серверами с помощью систем автоматизации (например, Ansible).
  • Использовать систему контроля версий Git.

В этом кластере удобно управлять серверами. Если необходимо провести работы на одной из нод, просто отключаете ее из проксирования и проводите свои работы. Также удобно добавлять новые ноды в кластер, если ваш проект вырос, и ему требуется дополнения вычислительной мощности. 

Как работает кластер

Трафик идет по А-записи на Load Balancer. В данном случае Load Balancer является точкой входа в кластер.

В Load Balancer трафик фильтруется с помощью встроенной защиты от DDoS, после чего легитимный трафик попадает в кластер. Load Balancer будет самостоятельно фильтровать трафик по нодам. Схему данной инфраструктуры можно масштабировать увеличивая количество нод.

Варианты фильтрации трафика на трех нодах?

1. 50%/50%/0%.
Трафик будет идти на две ноды, а третью ноду можно использовать для cron задач или как запасной сервер для случая когда идет активная DDoS атаки или в связи с возросшим трафиков из-за распродажи.


2. 33%/33%/33%.
Трафик идет на три ноды одинаково.


3. 100%/0%/0%
Трафик идет только на одну ноду. Другие ноды будут резервные, либо ноды для тестирования конфигурации. 


Что происходит при отказе PHP-ноды

Рассмотрим ситуацию, когда в кластере выходит из строя PHP-нода №1.

После получения от ноды 5–10 ошибок — в зависимости от настроек — Load Balancer исключает её из проксирования и помечает как недоступную.

После этого весь трафик направляется только на рабочие ноды.

В результате пользователи не заметят простоя.


Как проверяется доступность PHP-ноды

Load Balancer отправляет запросы на порт 80 каждой ноды.

Если он не получает определённое количество ответов, нода помечается как нерабочая и исключается из проксирования.


Что происходит при отказе MySQL-ноды

В случае выхода из строя MySQL-ноды ProxySQL помечает её как нерабочую и перенаправляет запросы на другие ноды.

Даже при выходе из строя двух MySQL-нод проект не должен потерять работоспособность и продолжит работать.

Кому подходит данный кластер с 90% отказоустойчивости:

  • Проекты с большой аудиторией. От 100 000 пользователей в день.
  • Большие интернет-магазины.
  • Все те, для кого простой площадок и сервисов неприемлем.

Кому не подходит данный кластер?

  • Маленькие проекты. Данный кластер будет для них избыточен, а также нерентабелен ввиду высокой стоимости инфраструктуры проекта.

Плюсы:

  • Высокий процент отказоустойчивости на различных уровнях.
  • В случае выхода из строя нескольких нод проект продолжит работать без простоя, даже под нагрузкой.
  • Легко масштабируется. Необходимо добавить диск или оперативной памяти? Просто отключаете сервер из проксирования и выполняете работы по замене.

Минусы:

  • Высокий уровень знаний для входа, так как мало кластер развернуть - его еще необходимо администрировать, поддерживать, мониторить и настраивать.
  • Данный вариант инфраструктуры очень чувствителен к ширине канала сети в Дата-центре, и потребует высокого производительных сетевых интерфейсов, т.к. Ceph и Percona XtraDB cluster очень зависит от скорости и качества работы сети.

Итоги

В этой статье мы рассмотрели различные варианты отказоустойчивой инфраструктуры для Bitrix — от классического монолита до сложного кластера с несколькими уровнями защиты.

В зависимости от требований проекта можно использовать:

  • 0% отказоустойчивости — Bitrix-монолит на одном сервере;
  • 70% отказоустойчивости — несколько серверов с резервными нодами и ручным переключением трафика;
  • 90% отказоустойчивости — полноценный кластер с автоматическим переключением трафика, несколькими PHP- и MySQL-нодами, распределённой файловой системой, синхронной репликацией и проксированием;
  • 95% отказоустойчивости — инфраструктура на Kubernetes с Docker и CI/CD.

Какой вариант подходит конкретному проекту, зависит от того, какие задачи необходимо решить и какой уровень простоя допустим.

Безусловно, всем хотелось бы иметь инфраструктуру с 95% отказоустойчивости. Однако построение такой схемы требует значительных капитальных вложений, а также больших усилий для настройки и дальнейшего сопровождения.

При выборе архитектуры необходимо учитывать не только технические возможности, но и экономическую целесообразность.

Минимизация простоя сайта и обеспечение его стабильной работы на протяжении всего периода эксплуатации имеют критическое значение для бизнеса.

В следующей статье можно перейти от теории к практике и рассмотреть пример настройки кластера с 90% отказоустойчивостью, включая основные нюансы и подводные камни такого решения.

Оставьте заявку, чтобы обсудить проект

Ваши контакты
О вашем проекте

Нажав на кнопку, соглашаюсь на обработку персональных данных, Ознакомлен со всеми документами, размещенными на сайте

См. Политику обработки персональных данных
См. Пользовательское соглашение