Как правильно обнов​и​ть платформу 1С и запустить несколько служб 1С на одном сервере​?

02/03/2016

Как правильно обнов​и​ть платформу 1С и запустить несколько служб 1С на одном сервере​?

Введение

Как быстро и без проблем установить новую версию платформы 1С и при этом минимизировать прерывание работы пользователей? Как запустить несколько экземпляров сервера 1С на одной машине? Данные вопросы являются распространенным предметом для обсуждения среди администраторов серверов 1С. В общем, ответы на них вы можете найти на сайте ИТС по этой ссылке, а также по этой.

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

Обновление платформы

Так как установка службы 1С на сервер, где ее еще не было, не представляет никаких сложностей и не отличается какими-то особенностями, рассмотрим другую задачу, когда у нас уже есть продуктивный сервер с запущенным сервером приложений, в котором работают пользователи, и нам необходимо обновить на нем версию платформы 1С. Эту задачу можно разбить на два условных этапа: подготовительный этап и этап обновления.

Подготовительный этап

Когда мы убедились, что все в порядке, можем запускать установку платформы 1С на сервере приложений. Если при его установке снять галочку «установить как сервис», можно не останавливать службу 1С, обслуживающую текущую версию платформы 1С и, что очень важно, можно не прерывать работу пользователей.

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

Этап обновления

После того, как подготовительный этап закончен, необходимо согласовать с пользователями время, когда можно будет прервать их работу на несколько минут. Когда это время настанет, нужно остановить службу 1С и изменить строку запуска службы 1С, а именно путь к исполняемому файлу ragent.exe. Это можно сделать несколькими способами:

  • вручную, при помощи regedit:

  • при помощи заранее подготовленного файла реестра:

В нужный момент кликаем правой кнопкой мыши на экспортированный файл реестра с измененной строкой запуска службы 1С и нажимаем «Слияние». Преимущество данного метода в том, что данный файл мы можем подготовить заранее и выполнить изменение параметров службы 1С в два клика без необходимости «копаться» в реестре.

  • или с помощью скрипта, с применением утилиты sc (выполняется из командной строки с правами администратора):

sc config [имя службы 1С в которой меняем версию платформы 1С] binPath= [строка запуска службы 1С новой версии платформы]

Строку запуска службы 1С новой версии платформы можно получить из строки запуска службы 1С текущей версии платформы, заменив в ней путь до исполняемого файла ragent.exe:

Например, если мы хотим обновить версию платформы с текущей (например, 8.3.7.1873) до 8.3.7.1917, тогда строка запуска текущей версии может выглядеть так:

"C:\Program Files\1cv8\8.3.7.1873\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
из неё получим строку запуска службы 1С новой версии платформы:
"C:\Program Files\1cv8\8.3.7.1917\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"

имя службы 1С, например, следующее:
1C:Enterprise 8.3 Server Agent (x86-64)

тогда скрипт будет выглядеть так:

sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "/"C:\Program Files\1cv8\8.3.7.1917\bin\ragent.exe/" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d /"C:\Program Files\1cv8\srvinfo/""

Установка дополнительной службы 1С

Итак, для того, чтобы использовать несколько экземпляров сервера 1С на одной машине, для обеих версий серверов 1С(если они отличаются) сначала выполняем «Подготовительный этап» из предыдущего пункта.

Далее нам понадобится следующий скрипт:

@echo off
rem %1 — полный номер версии 1С:Предприятия
rem %2 — первые цифры номеров портов
rem %3 — цифра сотого разряда номеров портов
rem %4 — каталог с данными службы 1С
set SrvUserName=<имя пользователя>
set SrvUserPwd=<пароль пользователя>
set RangePort=%2%301:%2%399
set BasePort=%2%300
set CtrlPort=%2000
set SrvcName="1C:Enterprise 8.3 Server Agent %CtrlPort%"
set BinPath="\"C:\Program Files\1cv8\%1\bin\ragent.exe\" /srvc /agent /regport %BasePort% /port %CtrlPort% /range %RangePort% /d \"%~4\" /debug"
set Desctiption="Агент сервера 1С:Предприятия 8.3. Параметры: %1, %CtrlPort%"
if not exist "%~4" mkdir "%~4"
sc stop %SrvcName%
sc delete %SrvcName%
sc create %SrvcName% binPath= %BinPath% start= auto obj= %SrvUserName% password= %SrvUserPwd% displayname= %Desctiption% depend= Dnscache/Tcpip/Tcpip6/lanmanworkstation/lanmanserver

Процесс Порты
ragent 1540
rmngr 1541
rphost 1560:1591

К сожалению, такая структура портов не всегда является удобной. Например, если мы захотим использовать несколько кластеров в рамках одной службы 1С, а служб мы при этом используем несколько на одной машине. В этом случае может возникнуть путаница с диапазоном используемых процессами rphost портов. Если, например, процесс ragent одной службы 1С занимает порт 1540, а другой — 1640, для первой создан кластер 1С диапазон портов которого 1560:1591 и мы хотим создать еще один кластер, то диапазон портов для него, по логике, должен быть 1660:1691, но этот диапазон может быть занят (и, скорее всего так и будет) рабочими процессами кластера ragent’а занимающего порт 1640.

Процесс

Порты

ragent *000 (вместо * — любое число больше 2)
rmngr **00 (вместо * — любая цифра)
rphost **01: **99

Итак, приведенный выше скрипт следует сохранить в командный файл, который назовем register-service.bat. Перед его применением необходимо указать в нем данные реального пользователя (имя и пароль) от имени которого будет работать служба кластера серверов (строки set SrvUserName= и set SrvUserPwd=). Примечание: если в скрипте используются символы кириллицы, командный файл следует сохранять в кодировке OEM 866.

Для регистрации службы выполните из командной строки следующую команду:

register-service [номер версии платформы] [первые цифры номеров портов] [цифра сотого разряда номеров портов] [каталог службы 1С]

Например, если нам необходимо зарегистрировать две службы для двух серверов 1С одинаковой версии 8.3.6.2332, то в командной строке напишем следующее:

register-service 8.3.6.2332 2 1 "C:\Program Files\1cv8\srvinfo_2000
register-service 8.3.6.2332 3 1 "C:\Program Files\1cv8\srvinfo_3000

Типичные ошибки и возможные проблемы

Помимо этого, необходимо помнить, что по умолчанию 1С регистрирует порт 1541 для менеджера кластера, то есть в параметрах запуска службы 1С можно увидеть:

/regport 1541

Это значит, что после установки новой версии платформы при запуске службы по умолчанию всегда будет создан новый кластер и запущен процесс rmngr.exe, даже если он в принципе на сервере нам не нужен, и мы не хотим использовать этот рабочий сервер, как центральный. Также в строке запуска указан диапазон портов rphost для нового кластера:

/range 1560:1591

К сожалению, на данный момент нет возможности управлять созданием локального кластера при первоначальном запуске службы 1С с помощью параметров командной строки службы. Но эту задачу можно решить следующими двумя способами.

Первый и, пожалуй, самый простой — это удалить созданный локальный кластер из консоли кластера 1С:

Удалить созданный локальный кластер из консоли кластера 1С

000 — dfd

Второй вариант: для того, чтобы при первоначальном запуске службы 1С новый кластер не создавался, перед её запуском в каталоге служебных файлов данной службы, который указан в строке её запуска после ключа –d, необходимо создать файл с именем 1cv8wsrv.lst следующего содержания:

{
{0},
{0},0,1}

Мы получим такой же файл при удалении локального кластера, как это описано в первом варианте.

После этого можем запускать данную службу 1С. При старте службы, происходит проверка наличия файла 1cv8wsrv.lst в каталоге служебных файлов новой службы 1С. Из этого файла читаются данные о зарегистрированных кластерах. Если файла нет – создается кластер по умолчанию с параметрами, заданными в строке запуска службы, если файл есть, данные читаются из него и автоматического создания не происходит. Соответственно, в этом случае наличие данного файла подтверждается и новый кластер не создается.

Если новый кластер создать все-таки нужно, то необходимо проверить, что порт в параметре /regport (или порт по умолчанию — 1541, если параметр /regport не указан), при регистрации новой службы не занят. Если этого не сделать, то возможно проявление ситуации, когда две службы будут работать с одним менеджером кластера, если, например, для порта, указанного в строке запуска новой службы (или для порта по умолчанию — 1541, если ключ –regport не указан в строке запуска) уже зарегистрирован менеджер кластера. Причиной этого является то, что при первоначальном старте службы и регистрации порта для менеджера кластера не происходит проверки занят этот порт или нет. Задача по реализации данной проверки известна и будет реализована в следующих версиях платформы.

Еще один параметр строки запуска службы 1С, который стоит рассмотреть, это:

/d <каталог>

Он отвечает за каталог, в котором будут расположены (или располагаются) служебные файлы службы сервера 1С (в том числе список кластеров). По умолчанию каталог устанавливается следующий:

C:\Program Files\1cv8\srvinfo

Также многие забывают указывать ключ в строке запуска, отвечающий за возможность использования приложения в режиме отладки, если он необходим:

/debug

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

Каталог реестра кластера выглядит следующим образом:

«C:\Program Files\1cv8\srvinfo\reg_[номер порта менеджера кластера]»

Каталог служебных файлов информационной базы:

«…\srvinfo\reg_****\[UUID информационной базы]»

Например, если номер порта менеджера кластера 1541, то каталог служебных файлов некоторой информационной базы с уникальным идентификатором «0c1bd57c-4a1b-47df-a229-ade9833de359» будет:

«C:\Program Files\1cv8\srvinfo\reg_1541\0c1bd57c-4a1b-47df-a229-ade9833de359»

Список неиспользуемых баз можно получить, сравнив по уникальному идентификатору список баз в файле «1CV8Clst.lst» (располагается в каталоге реестра кластера) и список баз, для которых существуют каталоги со служебными файлами. Для быстрого получения идентификаторов баз и их имен из файла реестра кластера можно воспользоваться следующим регулярным выражением: «\{(\w{8}\-.*\w{12})\,\"(.*?)\"\,.*[\\r]*\n+.*\"\,\d+\}».

Заключение

Мы постарались скомпоновать в статье достаточно полную и подробную информацию о том, как правильно и быстро обновить версию платформы 1С. Такая информация может быть полезна на предприятиях, где длительное прерывание работы пользователей может быть достаточно критичным.

Также достаточно важным было для нас описать, как настроить одновременную работу нескольких служб кластера 1С на одной машине. Эта информация может быть полезна тем, кто хочет изолировать несколько кластеров 1С, например, для целей разработки или тестирования или вы используете в работе информационные базы, управляемые разными версиями 1С:Предприятия.

Надеемся, вы сможете с легкостью выполнить нужную вам задачу и продолжите с удовольствием пользоваться продуктами 1С. Ну а если у вас что-то не получится, или вы столкнетесь с какими-то трудностями, обращайтесь к нам, мы обязательно поможем!