В крупных информационных системах часто возникает необходимость оптимизации ресурсов, а также замера производительности контура 1С и поиска узких мест. Одним из таких сценариев является использование единого физического или виртуального сервера для раздачи лицензий сразу на несколько независимых кластеров 1С (например, для рабочего контура Production и тестового Pre-production). Однако при стандартном подключении системные администраторы часто сталкиваются с тем, что в одном из кластеров рабочий процесс сервера лицензий остается неактивным, не получает порт и не выдает лицензии пользователям.
В рамках данной статьи мы подробно разберем, почему возникает эта проблема, проанализируем архитектуру взаимодействия сервиса лицензирования и предложим пошаговое решение для настройки стабильной работы системы.
Давайте разберем внутренние механизмы платформы 1С. Когда мы добавляем сервер в консоль администрирования кластера и назначаем ему роль сервера лицензирования, менеджер кластера (процесс rmngr) пытается взять этот сервер под свой контроль. Основная проблема заключается в «праве владения» конфигурационными файлами.
Если на сервере лицензирования запущен один экземпляр службы ragent (агент сервера), он работает с определенным каталогом данных (по умолчанию это C:\Program Files\1cv8\srvinfo). Для понимания структуры хранения данных полезно изучить информацию по рабочему каталогу центрального сервера (srvinfo) и методах его очистки. В этом каталоге хранится файл реестра кластера srvribrg.lst. Когда два разных управляющих кластера пытаются одновременно прописать свои настройки в этот файл и управлять рабочими процессами одного и того же агента, возникает конфликт идентификаторов (ClusterID). В результате один кластер «вытесняет» другой, и рабочий процесс (wp) во втором кластере просто не может стартовать, так как агент сервера уже занят обслуживанием первого реестра.
Проанализируем самый надежный метод решения проблемы — разделение экземпляров агентов сервера на уровне операционной системы. Чтобы одна машина обслуживала два кластера, мы запустим на ней две независимые службы 1С, которые будут работать на разных портах и иметь разные каталоги данных.
Рассмотрим пошагово процесс создания второй службы для кластера Pre-prod:
C:\1C_Data\PreProd_Lic.sc create в командной строке от имени администратора.Посмотрим на пример команды для создания службы:
sc create "1C:Enterprise 8.3 Server Licensing PreProd" binPath= "\"C:\Program Files\1cv8\8.3.25.1394\bin\ragent.exe\" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -d \"C:\1C_Data\PreProd_Lic\"" start= auto obj= "Domain\ServiceUser" password= "Password123"
Разберем параметры, которые мы использовали:
-port — порт главного агента (1640). Именно его мы укажем в консоли кластера Pre-prod при добавлении сервера.-regport — порт менеджера кластера (1641).-range — диапазон портов для рабочих процессов (в нашем случае 1660–1691), чтобы они не пересекались с основным кластером (1560–1591).-d — путь к индивидуальному каталогу данных, где будет создан свой собственный файл srvribrg.lst.После того как службы запущены, нам необходимо правильно сконфигурировать требования назначения функциональности в консоли администрирования. Вы можете использовать стандартную MMC, утилиту rac или современный OneS Cluster Admin — кроссплатформенную консоль администрирования кластера серверов 1С. Это гарантирует, что сервер будет выполнять только роль лицензирования, не отвлекаясь на другие задачи кластера.
Выполним следующие шаги в консоли для каждого кластера:
LicenseService.LicenseService.DataService, SessionService и др.) рекомендуется создать запрещающее правило с типом «Не назначать». Это позволит высвободить ресурсы сервера, так как на нем не будут запускаться лишние менеджеры и рабочие процессы.Выясним причину, по которой рабочий процесс может оставаться неактивным даже после этих действий. Часто это связано с тем, что в ветке «Рабочие процессы» для данного сервера пусто. В таком случае попробуйте создать рабочий процесс вручную. Для оперативного контроля и очистки зависших ресурсов можно использовать WEB приложение для управления сеансами сервера и завершения процессов rphost.
Важно помнить, что программные лицензии (файлы .lic) привязываются к параметрам оборудования. Если вы используете сервис лицензирования, сами файлы лицензий должны физически находиться на сервере, где запущен LicenseService. Для специалистов будет актуальна методика установки комьюнити-лицензии разработчика на сервер 1С с возможностью автоматического продления.
Проанализируем ситуацию с правами доступа. Пользователь, от имени которого запущены службы ragent, должен иметь полные права на чтение и запись в папку ALLUSERSPROFILE\Application Data\1C\1cv8\conf (или соответствующую папку в Local Settings), так как именно там по умолчанию система ищет лицензии. Если одна служба запущена от имени System, а вторая от LocalService, они могут «видеть» разные наборы файлов лицензий. Рекомендуется использовать одного и того же доменного пользователя для всех служб лицензирования на этой машине.
Если вы видите ошибку «Не найдено ни одного сервера с размещенным сервисом serviceName=LicenseService», выполните следующие проверки:
8.3.25.1394). Разрядность (x64) также должна совпадать.telnet или Test-NetConnection в PowerShell.comcntr.dll. Выполните команду:
regsvr32 "C:\Program Files\1cv8\8.3.25.1394\bin\comcntr.dll"Таким образом, мы выяснили, что схема с одним сервером лицензирования на два кластера вполне работоспособна. Ключом к успеху является изоляция управляющих служб через разные порты и каталоги данных, а также четкая настройка требований назначения функциональности. Следуя этим инструкциям, вы сможете создать гибкую и отказоустойчивую инфраструктуру для ваших баз 1С.