Рассмотрим весьма распространенную и неприятную ситуацию, с которой сталкиваются системные администраторы при масштабировании инфраструктуры 1С. Допустим, мы перевели высоконагруженную базу (например, 1С:Комплексная автоматизация) на кластер серверов, состоящий из нескольких физических машин (например, четырех серверов Windows: sql-001, sql-002, sql-003, sql-004). Неожиданно мы замечаем «сюрприз»: фоновые задания начинают запускаться параллельно сразу под всеми физическими именами серверов. При этом количество активных сеансов может многократно превышать число реальных пользователей — например, 319 сеансов на 65 живых пользователей.
Давайте подробно разберем по шагам, почему возникает эта проблема, проанализируем поведение менеджера кластера 1С и выясним, как правильно настроить распределение ролей, чтобы стабилизировать работу системы.
Проанализируем ситуацию с аномальным количеством сеансов. В консоли кластера мы можем увидеть множество процессов, которые отображаются как SystemBackgroundJob. Менеджер кластера 1С генерирует большое количество системных фоновых заданий не просто так. Выясним причину их появления:
rphost потребляет слишком много оперативной памяти, кластер заранее, в фоновом режиме, создает новый процесс. С помощью системных заданий он загружает в него контекст баз данных и кэш. Это делается для того, чтобы переключение пользователей на новый процесс прошло без задержек и «тормозов».Если лимиты памяти настроены неоптимально или происходят частые перезапуски процессов, количество фоновых сеансов начинает расти экспоненциально. Для детальной инвентаризации и выявления рисков в расписаниях можно использовать инструмент аудита регламентных и фоновых заданий 1С.
На первый взгляд кажется, что кластер просто игнорирует настройки, которые мы задаем в консоли администрирования. Задания, которые должны выполняться в одном экземпляре, дублируются. Рассмотрим подробнее архитектуру отказоустойчивости 1С.
Главная цель менеджера кластера — сохранить работоспособность системы любой ценой. Если мы жестко назначаем выполнение сервиса заданий на один конкретный сервер, но этот сервер начинает испытывать проблемы с сетью, перегружен или перестает отвечать, главный менеджер принудительно поднимет этот сервис на других доступных узлах (sql-002, sql-003 и т.д.). Визуально это выглядит так, будто кластер игнорирует наши пожелания и сервисы начинают хаотично «гулять» по узлам.
Посмотрим на еще одну частую причину дублирования заданий на нескольких физических машинах — рассинхронизацию времени. Если системное время на серверах кластера отличается хотя бы на миллисекунды, это приводит к серьезным сбоям:
Важное правило: всегда настраивайте жесткую синхронизацию времени (NTP) на всех серверах, входящих в кластер 1С.
Если мы хотим, чтобы фоновые задания не распараллеливались, настроим требования назначения функциональности комплексно. Разберем по шагам правильную настройку в консоли администрирования серверов 1С:
СервисЗаданий со значением Назначать.СервисЗаданий со значением НеНазначать.Только при наличии запрещающих правил на остальных узлах менеджер кластера перестанет распределять эту специфическую нагрузку по всем доступным серверам.
Если, несмотря на все настройки, кластер продолжает вести себя нестабильно, фоновые задачи тормозят систему, а процессы зависают, рассмотрим кардинальное архитектурное решение. Практика показывает, что объединение нескольких физических серверов в один логический кластер 1С требует идеальной сетевой инфраструктуры и глубокого понимания ролей.
Оптимальным выходом (Best Practice) для высоконагруженных систем часто является отказ от единого кластера 1С в пользу независимых серверов:
Такой подход полностью исключает проблему «блуждающих» сервисов и дублирования фоновых заданий, так как каждый сервер 1С обслуживает только свои базы и полностью контролирует свои планировщики.
Напоследок разберем ситуацию, когда фоновые задания расплодились и зависли «намертво». Большинство администраторов в такой момент перезагружают всю службу агента сервера 1С, что обрывает работу всех активных пользователей. Посмотрим на более тонкий и профессиональный подход:
rphost, в котором зависло проблемное задание.Использовать.rphost.Применяя данные подходы, мы сможем добиться стабильной и предсказуемой работы кластера 1С, избавившись от дублирования процессов и неконтролируемой нагрузки на серверное оборудование. Для устранения последствий подобных сбоев кластера подойдёт обработка для автоматического отключения старых задублированных сеансов.