Рассмотрим распространенную и сложную ситуацию: в компании используется два или более аппаратных USB-ключа защиты 1С (например, на 50 и 100 пользователей), но клиенты периодически не могут войти в программу из-за отсутствия лицензии, хотя мониторинг показывает, что свободные лицензии есть. Часто временным решением становится перезапуск службы менеджера лицензий (HASP License Manager), но проблема возвращается, особенно в часы пиковой нагрузки, например, утром. Давайте пошагово разберем причины такого поведения и найдем стабильное решение.
Исходные данные проблемы: имеется один физический сервер, на котором установлены два аппаратных ключа. Порты USB проброшены в две разные виртуальные машины, каждая из которых должна раздавать свой пул лицензий. Несмотря на это, возникает нехватка лицензий.
Первая и фундаментальная ошибка, которую часто допускают, — это попытка раздавать лицензии с нескольких ключей одной серии с одного и того же компьютера. Проанализируем, почему это приводит к сбоям.
Ключи на 50 и 100 пользователей (серии ORGL8) не могут корректно раздаваться с одной физической или виртуальной машины. Платформа 1С обращается в сеть за лицензией, и ей отвечает первый откликнувшийся менеджер лицензий. Если он не может выдать лицензию (например, все заняты), поиск на этом часто и заканчивается, даже если на втором ключе лицензии есть. Возникает "гонка состояний", когда результат зависит от того, какая служба запустилась или ответила первой, что приводит к непредсказуемой работе.
Решение: Физически или виртуально разнесите менеджеры лицензий. Каждый аппаратный ключ должен обслуживаться своим экземпляром HASP License Manager на отдельной машине (физической или виртуальной). Это базовое требование для стабильной работы.
Даже если вы разнесли ключи по разным серверам, клиентам нужно как-то их различать. Для этого каждому менеджеру лицензий необходимо присвоить уникальное имя. Это делается в конфигурационном файле nhsrv.ini, который находится в папке с установленным HASP License Manager.
Разберем по шагам настройку:
nhsrv.ini на первом сервере лицензий (например, том, где ключ на 100 пользователей).NHS_SERVERNAMES.LM100. Имя может быть произвольным, но коротким и понятным.Пример содержимого файла nhsrv.ini на сервере с ключом на 100 пользователей:
[NHS_SERVER]
NHS_SERVERNAMES = LM100
Аналогичную операцию проделайте на втором сервере лицензий (с ключом на 50 пользователей), но задайте другое имя, например, LM50.
Пример содержимого файла nhsrv.ini на сервере с ключом на 50 пользователей:
[NHS_SERVER]
NHS_SERVERNAMES = LM50
После внесения изменений обязательно перезапустите службу HASP License Manager на обоих серверах, чтобы настройки применились.
Теперь, когда у наших серверов лицензий есть уникальные имена, нужно "научить" клиентские машины и сервер 1С обращаться к ним в правильном порядке. Это делается с помощью файла nethasp.ini.
Этот файл нужно создать или отредактировать в папке conf каталога установки платформы 1С на каждой клиентской машине и на сервере 1С:Предприятия.
В файле необходимо указать IP-адреса серверов лицензий и их уникальные имена.
Пример содержимого файла nethasp.ini:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.10, 192.168.1.11
NH_SERVER_NAME = LM100, LM50
Что означают эти параметры:
NH_SERVER_ADDR: через запятую перечислены IP-адреса ваших серверов, где установлены менеджеры лицензий.NH_SERVER_NAME: через запятую перечислены уникальные имена менеджеров в том же порядке, что и IP-адреса.Такая конфигурация заставит платформу 1С последовательно опрашивать сначала сервер 192.168.1.10 (LM100), и если там нет свободных лицензий, то переходить к опросу сервера 192.168.1.11 (LM50). Это обеспечивает предсказуемый и управляемый поиск лицензий.
Если проблемы продолжаются, необходимо обратиться к главному инструменту диагностики — журналу поиска лицензий. В нем подробно описывается, где и как платформа пыталась получить лицензию.
В проблемной теме пользователь предоставил лог, который очень показателен:
Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!
...
nethasp.ini: /home/MARBUM/log-kip-sklad/.1cv8/1C/1cv8/conf/nethasp.ini, прочитан успешно,
ошибка соединения с менеджером лицензий: Net Status=0, System Error=0, Warning=15, ORGL8 Сетевой, не установлен
...
Поиск лицензии на сервере:
Выдача клиентских лицензий сервером 1С:Предприятия запрещена
Проанализируем ключевые моменты:
nethasp.ini.Существует два принципиально разных способа раздачи клиентских лицензий 1С, и их одновременное использование с одним и тем же ключом приводит к "залипанию" и быстрой нехватке лицензий.
ВНИМАНИЕ! Не рекомендуется использовать один и тот же многопользовательский ключ HASP для одновременного получения лицензий с помощью HASP License Manager и сервера 1С:Предприятия. Это приводит к тому, что лицензии, выданные сервером 1С, в утилите мониторинга `Aladdin Monitor` помечаются с нулевым таймаутом (Timeout = 0) и считаются вечно занятыми до перезапуска службы. Именно это и вызывает эффект "залипания" и быстрой нехватки.
Кроме того, сервер 1С имеет ограничение: он может получать лицензии с локально установленного в него ключа и только с одного сетевого HASP License Manager. Он не будет искать второй, третий и последующие менеджеры в сети.
На основе вышеизложенного, у нас есть два правильных варианта конфигурации.
Это самый простой и надежный способ. Вся ответственность за выдачу лицензий ложится на настроенные нами HASP LM.
nethasp.ini (Шаги 1-3).Преимущества: Экономный расход лицензий (на компьютер, а не на сеанс), предсказуемая работа.
Требования: Все клиентские машины должны иметь сетевой доступ к серверам лицензий по UDP-порту 475. Это может быть проблемой, если пользователи подключаются извне через интернет без VPN.
Этот вариант подходит, если нужно совместить оба механизма. Например, один ключ обслуживает локальных пользователей, а второй — удаленных.
В такой конфигурации порядок поиска будет следующим: при подключении клиент сначала запросит лицензию у сервера 1С. Сервер выдаст ее со своего локального ключа. Когда лицензии на этом ключе закончатся, сервер 1С (или клиент, в зависимости от настроек) начнет искать лицензию в сети и найдет ваш второй сервер с HASP LM.
Этот метод более сложен в настройке, но также является рабочим при правильном понимании механики.
Следуя этим шагам, вы сможете построить стабильную и предсказуемую систему лицензирования 1С, которая не будет доставлять проблем ни вам, ни пользователям.