Второй экземпляр ragent на том же сервере: службы, порты и кластеры

· 10 мин

Содержание

Чтобы запустить два агента сервера 1С на одном компьютере, зарегистрируйте вторую службу Windows с тем же ragent.exe, но со своими портами и своим каталогом данных: например, -port 2540 -regport 2541 -range 2560:2591 -d "D:\1C\srvinfo2". Первый агент остаётся на стандартных 1540/1541/1560–1591. Пересекаться у двух экземпляров не должно ничего: ни порты, ни папка srvinfo, ни имя службы.

Частая ошибка — запустить установщик платформы второй раз и ждать, что он создаст ещё одну службу. Не создаст: штатный путь даёт один агент на версию. Второй экземпляр регистрируют вручную. Ниже — порядок для Windows Server 2016 и новее и платформы 8.3.2x.

Зачем это нужно на практике:

  • 🧪 тестовый кластер рядом с рабочим, чтобы проверять обновления, не трогая пользователей;
  • 🔢 две версии платформы на одном железе, например 8.3.22 для старой конфигурации и 8.3.24 для новой;
  • 🧱 разделение баз по кластерам, чтобы тяжёлая база не тормозила остальные рабочими процессами;
  • 🛠 отдельный кластер для разработчиков с включённой отладкой.

Подготовка каталогов и файлов платформы

Сначала решите, будут оба агента на одной версии платформы или на разных. От этого зависит, что копировать.

Одна версия. Копировать ничего не нужно. Обе службы запускают один и тот же исполняемый файл, например C:\Program Files\1cv8\8.3.24.1586\bin\ragent.exe. Разделяет экземпляры только каталог данных и порты.

Разные версии. Установите вторую версию платформы обычным дистрибутивом, отметив компонент «Сервер 1С:Предприятия». Каждая версия ляжет в свою папку C:\Program Files\1cv8\<номер версии>\. На шаге установщика, где предлагают установить сервер как службу Windows, для второй версии снимите флажок. Службу зарегистрируете сами, с нужными портами.

Дальше создайте пустой каталог данных для второго агента. Лучше на диске с данными, а не в Program Files:

mkdir D:\1C\srvinfo2

Не копируйте в новый каталог содержимое рабочего srvinfo. В нём лежит реестр кластера (1CV8Clst.lst) с портами и списком баз первого агента. Копия запустится с теми же настройками и сразу упрётся в конфликт портов. Агент сам создаст структуру в пустой папке при первом старте.

После первого запуска внутри D:\1C\srvinfo2 появится подкаталог reg_2541. Цифры в его имени — порт менеджера кластера. По этому имени удобно сразу понять, какому кластеру принадлежит папка.

Порты второго агента: как развести их с первым

У каждого агента три группы портов. Их нужно развести полностью.

Параметр ragentЧто слушаетАгент 1 (по умолчанию)Агент 2 (пример)
-portагент сервера, к нему подключается консоль15402540
-regportглавный менеджер кластера15412541
-rangeрабочие процессы и дополнительные менеджеры1560:15912560:2591
порт RASсервер администрирования для rac15452545

Схема «прибавить тысячу» проста и легко запоминается. Но перед выбором убедитесь, что порты свободны. Проверка в PowerShell:

Get-NetTCPConnection -LocalPort 2540,2541,2545 -ErrorAction SilentlyContinue

Пустой вывод — порты свободны. Если что-то слушает, возьмите другую сотню.

Диапазон -range должен быть достаточно широким. Каждому рабочему процессу нужен свой порт, плюс порты занимают дополнительные менеджеры кластера. Тридцать два порта хватает для небольшого сервера. Если на втором кластере планируете много рабочих процессов, расширьте диапазон, например до 2560:2691.

Откройте порты во входящих правилах брандмауэра, если к серверу подключаются клиенты с других машин:

netsh advfirewall firewall add rule name="1C Agent 2" dir=in action=allow protocol=TCP localport=2540-2541,2560-2591

Регистрация второй службы агента в Windows

Ключ ragent.exe -instsrvc регистрирует службу с фиксированным именем. Для второго экземпляра имя совпадёт с первым, поэтому надёжнее создать службу через sc create. Командная строка — от имени администратора.

sc create "1C:Enterprise 8.3 Server Agent 2541" binPath= "\"C:\Program Files\1cv8\8.3.24.1586\bin\ragent.exe\" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d \"D:\1C\srvinfo2\"" start= auto obj= ".\USR1CV8" password= "ПарольУчётки" DisplayName= "Агент сервера 1С (кластер 2541)"

Три детали, на которых чаще всего спотыкаются:

  1. После каждого = в синтаксисе sc стоит пробел: start= auto, а не start=auto. Без пробела команда выдаст справку вместо создания службы.
  2. Путь к ragent.exe и путь к каталогу данных заключены в кавычки, а внутренние кавычки экранированы \". Иначе пробел в Program Files разорвёт строку.
  3. Ключ -srvc обязателен. Без него ragent не понимает, что работает как служба, и служба не стартует.

Добавьте описание, чтобы через год было ясно, что это за служба:

sc description "1C:Enterprise 8.3 Server Agent 2541" "Второй агент 1С: порты 2540/2541, диапазон 2560-2591, данные D:\1C\srvinfo2"

Запуск и проверка состояния:

sc start "1C:Enterprise 8.3 Server Agent 2541"
sc query "1C:Enterprise 8.3 Server Agent 2541"

Ключ -debug добавляйте в binPath только тому агенту, где действительно нужна отладка на сервере. На рабочем кластере отладку обычно держат выключенной.

Включите имя порта в имя службы. Когда на сервере две-три службы агента, «Server Agent 2541» сразу говорит, к какому кластеру она относится, без открытия свойств.

Второй сервер администрирования (RAS)

Утилита rac подключается не к агенту напрямую, а к серверу администрирования RAS. Для второго агента нужен свой экземпляр RAS на своём порту:

sc create "1C:Enterprise 8.3 RAS 2545" binPath= "\"C:\Program Files\1cv8\8.3.24.1586\bin\ras.exe\" cluster --service --port=2545 localhost:2540" start= auto obj= ".\USR1CV8" password= "ПарольУчётки" DisplayName= "Сервер администрирования 1С (агент 2540)"
sc start "1C:Enterprise 8.3 RAS 2545"

Здесь --port=2545 — порт, который слушает RAS, а localhost:2540 — адрес второго агента. Если RAS для первого агента у вас тоже не запущен, а нужен, зарегистрируйте его так же с портом 1545 и адресом localhost:1540.

Кластер второго агента и рабочие процессы

При первом старте с пустым каталогом данных агент создаёт кластер с портом из -regport. В нашем примере — 2541. Отдельно кластер создавать не нужно.

Подключите его в консоли администрирования серверов 1С:

  1. Откройте консоль, щёлкните правой кнопкой по узлу «Central 1C:Enterprise 8.3 servers» и выберите создание центрального сервера.
  2. Укажите протокол tcp, имя компьютера и IP-порт 2540. Именно порт агента, а не кластера.
  3. Раскройте новый узел. Внутри будет кластер с портом 2541.
  4. В свойствах кластера переименуйте его, например в «Тестовый 2541». Иначе в консоли окажутся два кластера с одинаковым именем по умолчанию.

Тот же результат в командной строке через второй RAS:

"C:\Program Files\1cv8\8.3.24.1586\bin\rac.exe" localhost:2545 cluster list

Команда вернёт идентификатор кластера, его порт 2541 и имя. Остальные команды rac смотрите в rac help.

Рабочие процессы и нагрузка

Оба агента делят одно железо. Рабочие процессы rphost двух кластеров конкурируют за те же ядра и ту же память. Что стоит настроить сразу:

  • 📏 в свойствах рабочего сервера второго кластера задайте ограничения по памяти рабочих процессов, чтобы тестовый кластер не выдавил рабочий;
  • ⚙️ там же проверьте диапазон портов рабочих процессов: он должен лежать внутри -range этого агента;
  • 🔁 параметры перезапуска рабочих процессов настраивайте для каждого кластера отдельно, они не наследуются от первого.

Как клиенты подключаются ко второму кластеру

Базу на втором кластере регистрируют в кластере 2541. В списке баз клиента в поле кластера серверов указывают имя сервера с портом через двоеточие:

Srvr="srv-1c:2541";Ref="buh_test";

Если порт не указать, клиент постучится на стандартный 1541 и попадёт в первый кластер. Там такой базы нет, и подключение завершится ошибкой.

Учётная запись службы и права доступа

Обычно обе службы работают от одной учётной записи USR1CV8. Это допустимо, но второй агент требует тех же прав, что и первый, на свою папку.

Что проверить:

  • 🔐 у USR1CV8 есть право «Вход в качестве службы» в локальной политике безопасности. Если учётку создавал установщик, право уже выдано; для новой учётки его назначают вручную;
  • 📁 полный доступ к D:\1C\srvinfo2 и ко всем вложенным папкам. Без права записи агент не создаст реестр кластера и остановится сразу после старта;
  • 📖 чтение и выполнение для каталога платформы C:\Program Files\1cv8\<версия>\bin;
  • 🗄 доступ к СУБД. Если базы второго кластера лежат на том же сервере PostgreSQL или MS SQL, достаточно существующего логина. Если на другом — заведите логин отдельно.

Выдать права на каталог данных можно одной командой:

icacls D:\1C\srvinfo2 /grant ".\USR1CV8:(OI)(CI)F"

Администраторы агента и кластера

Список администраторов у второго агента свой. Он не берётся из первого. Сразу после запуска любой пользователь, подключившийся консолью к порту 2540, может управлять кластером.

Задайте администраторов в двух местах:

  1. Администраторы центрального сервера — в узле «Администраторы» второго сервера в консоли.
  2. Администраторы кластера — в узле «Администраторы» внутри кластера 2541.

Запишите пароли администраторов второго кластера и сохраните их там же, где пароли первого. Если пароль потерян, помочь может только остановка службы и восстановление реестра кластера из резервной копии папки srvinfo2. Остановка службы обрывает все сеансы этого кластера, поэтому делайте её вне рабочего времени.

Проверка: оба агента работают и не мешают друг другу

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

Шаг 1. Список служб агентов:

Get-CimInstance Win32_Service | Where-Object { $_.PathName -like "*ragent*" } | Select-Object Name, State, PathName

В выводе две строки, у каждой своё значение -port, -regport и -d.

Шаг 2. Кто держит порты:

netstat -ano | findstr ":1540 :1541 :2540 :2541"

Последняя колонка — PID. У портов 1540/1541 и 2540/2541 должны быть разные процессы ragent.exe. Сверить PID с именем процесса можно через tasklist /fi "pid eq 1234".

Шаг 3. Рабочие процессы. Команда tasklist /fi "imagename eq rphost.exe" покажет все rphost обоих кластеров. Чтобы понять, какой кластер какой процесс породил, смотрите список рабочих процессов в консоли: там указан порт каждого.

Шаг 4. Журнал Windows. Ошибки старта службы пишутся в журнал «Приложение» и «Система». Откройте eventvwr.msc и отфильтруйте по времени запуска службы.

Технологический журнал при двух агентах

Настройки технологического журнала лежат в файле logcfg.xml в папке conf каталога платформы. Если оба агента одной версии, файл у них общий. Значит, журнал включится сразу для обоих кластеров.

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

Диагностика: выберите симптом

Типичные промахи при настройке второго агента

  • ❌ Одна папка srvinfo на два агента. Агенты перезаписывают общий реестр кластера, и списки баз путаются. У каждого экземпляра свой каталог.
  • ❌ Одинаковые имена кластеров. В консоли «Локальный кластер» дважды, и администратор останавливает не тот. Переименуйте второй сразу.
  • ❌ Удаление службы через sc delete без остановки. Сначала sc stop, затем удаление. Остановка обрывает сеансы этого кластера, так что предупредите пользователей.
  • ❌ Обновление платформы установщиком поверх второй службы. Установщик не знает о вручную созданной службе. После установки новой версии поправьте путь к ragent.exe в binPath через sc config, иначе служба продолжит запускать старую версию.
  • ❌ Нет резервной копии каталога данных. Папку srvinfo2 копируйте вместе с остальными резервными копиями сервера. Без неё восстановить список баз кластера после сбоя придётся вручную.

Частые вопросы

Можно ли запустить два агента одной версии платформы?
Да. Обе службы ссылаются на один и тот же ragent.exe, различаются только порты и каталог данных.
Нужна ли отдельная лицензия на второй агент?
Лицензии хранятся на компьютере и общие для всех экземпляров. Как именно они распределяются между двумя кластерами в вашей схеме, уточните у партнёра, который продавал лицензии: ответ зависит от вида лицензии.
Можно ли перенести базу из одного кластера в другой?
Да. Удалите регистрацию базы в первом кластере, не удаляя саму базу в СУБД, и зарегистрируйте её во втором с тем же именем базы данных. Сеансы базы при этом нужно завершить.
Сколько агентов можно запустить на одном сервере?
Ограничение задают ресурсы и свободные порты. На практике дальше двух-трёх экземпляров обычно не идут: рабочие процессы начинают делить память.
Как удалить второй агент, если он больше не нужен?
Остановите службу, удалите её через sc delete и снимите регистрацию сервера в консоли. Каталог данных удаляйте после того, как убедитесь, что базы перенесены.