При планировании архитектуры высоконагруженных систем на базе 1С:Предприятие часто возникает вопрос создания «резервного» сервера. Мы часто сталкиваемся с заблуждением, что достаточно просто добавить второй сервер в кластер, и всё заработает само собой. В этой статье мы подробно проанализируем механизмы отказоустойчивости платформы 8.3, разберем понятия центральных серверов и выясним, как настроить систему так, чтобы пользователи не замечали сбоев оборудования.
В первую очередь нам необходимо прояснить важный технический момент. В старых версиях платформы (8.2) существовало понятие Группы резервирования кластеров. В версии 8.3 этот механизм был полностью переработан. Теперь отказоустойчивость обеспечивается наличием нескольких Центральных серверов внутри одного кластера. Мы больше не создаем «запасной» кластер, мы расширяем текущий, добавляя в него новые рабочие серверы и назначая им роль центральных.
Основной параметр, определяющий поведение системы при сбое — это Уровень отказоустойчивости. Давайте разберем, что означают его значения:
Важное уточнение: Настройка уровня отказоустойчивости выше нуля требует наличия лицензий уровня КОРП. В версии ПРОФ этот параметр жестко зафиксирован на значении 0.
Рассмотрим ситуацию, когда в нашем кластере всего два центральных сервера. Для принятия решений кластер использует алгоритм большинства (majority). Если связь между серверами разрывается или один из них падает, оставшийся сервер «видит», что он один из двух (50%), что не является большинством. В такой ситуации кластер может стать нестабильным или прекратить работу для предотвращения повреждения данных. Это называется потерей кворума.
Поэтому мы рекомендуем использовать формулу: Количество центральных серверов = Уровень отказоустойчивости * 2 + 1. Для обеспечения надежной работы при выходе из строя одного сервера (уровень 1) желательно иметь три центральных сервера. В этом случае при падении одного сервера оставшиеся два (66%) составят кворум и продолжат работу в штатном режиме.
Чтобы система работала максимально эффективно, мы можем использовать Требования назначения функциональности. Это позволяет нам гибко распределять нагрузку. Проанализируем сценарий, в котором у нас три сервера:
rphost.В такой конфигурации, если упадет один из «рабочих» серверов (1 или 2), сеансовые данные сохранятся на третьем сервере, и переключение для пользователя произойдет максимально прозрачно.
Разберем вопрос, который часто ставит в тупик администраторов: где хранить лицензии? В отказоустойчивом кластере есть два пути:
Решение: Нам необходимо либо активировать дополнительные комплекты лицензий на резервном сервере, либо вынести Сервис лицензирования на отдельный маломощный сервер (возможно, виртуальный), параметры которого не будут меняться при сбое основных физических серверов. В настройках кластера через Требования назначения функциональности мы жестко фиксируем Сервис лицензирования за этим стабильным узлом.
Посмотрим на логику действий при добавлении второго сервера в существующий кластер:
Рабочие серверы добавляем новый сервер (указываем его имя и порт 1540).Уровень отказоустойчивости равным 1 (требуется лицензия КОРП).Центральный сервер.Требования назначения функциональности. Например, для переноса журналов регистрации на конкретный сервер:
Тип объекта требования: Сервис регистрации событий
Действие: Назначать
Имя сервера: Server02
Приоритет: 10
Выясним причину, по которой пользователи могут «вылетать» даже при настроенной репликации. Если ваш Журнал регистрации хранится в текстовом формате (.lgp), он физически находится на диске конкретного сервера. При падении этого сервера другие узлы кластера не смогут получить доступ к его части журнала.
Мы рекомендуем переводить журнал регистрации в формат СУБД (.lgd). Аналогично, начиная с версии платформы 8.3.18, можно настроить хранение сеансовых данных во внешнем хранилище (например, Redis). Это гарантирует, что даже при полной остановке всех процессов rphost, информация о том, что делал пользователь, не будет потеряна.
Возвращаясь к вопросу «взлетит ли система с двумя серверами», проанализируем ситуацию:
Таким образом, для создания действительно надежной системы недостаточно просто добавить «железо». Необходимо грамотно распределить роли сервисов и обеспечить корректную работу системы лицензирования, чтобы в критический момент у пользователей были права на вход в систему.