Как устранить ошибки лицензирования во втором центральном сервере кластера 1С

Системный администратор 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Промышленность, строительство и АПК
← На главную

Работа с многоузловыми кластерами 1С:Предприятия часто сопровождается сложностями в настройке программного лицензирования. Особенно остро это проявляется при попытке реализовать отказоустойчивость на лицензиях уровня ПРОФ. В данной статье мы разберем причины возникновения типовых ошибок в технологическом журнале (ТЖ) и выстроим оптимальную стратегию конфигурации серверного кластера.

Анализ ложных срабатываний в технологическом журнале

Рассмотрим ситуацию, когда в ТЖ появляется запись: Ошибка программного лицензирования. Файл программной лицензии не предусматривает возможность запуска клиентских приложений 1С:Предприятия или внешних соединений. При этом система указывает на конкретный файл .lic, который является лицензией на сервер.

Проанализируем механизм поиска лицензии платформой. Когда менеджер кластера rmngr или рабочий процесс rphost инициирует проверку лицензии, он сканирует все файлы в каталоге C:\ProgramData\1C\licenses. Платформа поочередно открывает каждый файл с расширением .lic. Если первым в списке оказывается файл серверной лицензии, система фиксирует в логах, что он не подходит для запуска клиента. Это не всегда означает ошибку — если следом за этим сообщением нет записи о критическом отказе, значит, система просто перешла к следующему файлу и успешно нашла клиентскую лицензию.

Ошибка неверного формата и сетевые таймауты

Разберем более серьезную ошибку: Ошибка программного лицензирования. Неверный формат файла программного лицензирования File=src\CryptoGeneralHelpers.cpp. Часто она сопровождается системным сообщением WSACancelBlockingCall (код 10004).

Выясним причину этой взаимосвязи. Ошибка WSACancelBlockingCall указывает на прерывание блокирующей операции сокета. В контексте лицензирования это происходит по следующим причинам:

  1. Нестабильность сетевого соединения: В многоузловом кластере компоненты обмениваются данными по портам (например, 1540, 1541, 1560-1591). Если в момент проверки лицензии происходит микро-разрыв сети, вызов службы лицензирования прерывается.
  2. Пиковая нагрузка: Ночные задания СУБД (бэкапы, обновление статистики) могут вызывать кратковременное «замирание» виртуальной машины. Это приводит к тому, что процесс 1С не получает ответа от системы защиты вовремя.
  3. Изменение параметров оборудования: Программная лицензия привязана к «отпечатку» системы. Если ночью происходят регламентные работы на гипервизоре (изменение количества ядер CPU, динамической памяти или MAC-адреса), файл лицензии мгновенно перестает распознаваться как валидный, что и порождает сообщение о «неверном формате».

Отказоустойчивость уровня 1 и пассивные сервисы

Посмотрим на специфическую ошибку кластера: Первичный вызов сервиса пришел в пассивный сервис. Активный сервис на менеджере.... Это прямое следствие работы отказоустойчивого кластера.

В кластере с несколькими центральными серверами службы работают по принципу «один активный — остальные пассивные». Если из-за сетевых проблем или высокой нагрузки менеджеры кластера теряют связь друг с другом, возникает ситуация «Split-brain», когда клиент пытается получить лицензию у сервера, который перешел в пассивный режим. Для лицензий ПРОФ это часто решается только через ТребованияНазначенияФункциональности или полный перезапуск службы Agent 1C:Enterprise на всех узлах.

Настройка выделенного сервера лицензирования

Для минимизации проблем с распределением лицензий в кластере рекомендуется выделить один из серверов под роль Сервера лицензирования. Рассмотрим, как это сделать без покупки дополнительных серверных лицензий:

  1. Установим платформу 1С на отдельную машину или выделим один из существующих узлов.
  2. В консоли администрирования кластера создадим требования назначения функциональности для конкретного рабочего сервера.
  3. Для типа объекта Сервис выберем значение Сервис лицензирования.
  4. Установим результат Назначать для выбранного сервера и Не назначать для всех остальных узлов кластера.

Важно: При использовании лицензий ПРОФ серверные лицензии лучше оставлять локально на каждом физическом сервере, а на выделенный сервер лицензирования переносить только многопользовательские клиентские лицензии.

Оптимизация рабочих процессов

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

Рекомендуемые параметры для стабильной работы:

Работа с кодом конфигурации при ошибках доступа

Иногда ошибки, похожие на лицензионные, возникают внутри прикладного решения. Например, при выполнении фоновых заданий может сработать проверка сложности пароля или динамическое обновление. Рассмотрим пример кода, который инициирует периодические проверки на сервере:


Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт
    Параметры.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", 
        КонфигурацияБазыДанныхИзмененаДинамически 
        Или Справочники.ВерсииРасширений.РасширенияИзмененыДинамически);
    
    // Вызов служебных процедур для контроля сессий
    ПользователиСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры);
    
    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
        МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный");
        МодульЦентрМониторингаСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры.ЦентрМониторинга);
    КонецЕсли;
КонецПроцедуры

Если в момент выполнения этой процедуры сервер 1С теряет связь с DBMS (СУБД) из-за блокировок или сетевых проблем, в ТЖ могут посыпаться ошибки об «отказе в подключении» (10061), которые часто путают с проблемами лицензирования.

Итоговые рекомендации по обслуживанию

Для поддержания стабильности системы выполним следующие шаги:

  1. Очистка каталога лицензий: Файлы с расширением .oldlic являются архивными копиями. Их следует переместить в отдельную папку вне каталога 1C/licenses, чтобы платформа не тратила ресурсы на их сканирование.
  2. Настройка СУБД: Проверим, чтобы регламентные задания SQL (бэкапы, дефрагментация индексов) не совпадали по времени с массовым входом пользователей или критическими расчетами.
  3. Исключения антивируса: Обязательно добавим процессы rmngr.exe, rphost.exe и папку с лицензиями в исключения антивирусного ПО на всех серверах кластера.
  4. Балансировка ресурсов: Если один сервер в кластере слабее других, используем параметр КоличествоИБНаПроцесс и требования назначения функциональности, чтобы снизить на него нагрузку.
← На главную