Сервер администрирования кластера серверов 1C:Предприятия и deployka

В данной статье познакомимся с сервером администрирования кластера серверов 1С:Предприятия, а конкретно с утилитами rac.exe и ras.exe, а также программой deployka, с помощью которых становится возможным администрирование кластера серверов 1С:Предприятие из командной строки.

 

По традиции, всем кому лень читать, предлагаю посмотреть вебинар на указанную тему:

Ну а остальным добро пожаловать под кат:

 

0. Оглавление

  1. Общие сведения
  2. Установка компонент сервера администрирования
  3. Запуск сервера администрирования
  4. Запуск сервера администрирования в качестве службы Windows
  5. Администрирование кластера серверов с помощью утилиты rac.exe
  6. Программные обертки для работы с сервером администрирования
  7. Установка и работа с программой deployka

 

1. Общие сведения

Управлять кластером серверов 1С:Предприятие версии 8.3 возможно как с помощью консоли администрирования серверов 1С, так и из командной строки. Для этих целей служит Сервер администрирования кластера серверов, который состоит из двух утилит: непосредственно самого сервера — программы ras.exe и  утилиты командной строки rac.exe, которая обращаясь к запущенному прежде серверу ras позволяет выполнять различные операции с кластером серверов 1С:Предприятия.

Подробно про данный механизм можно прочитать в поставляемой вместе с платформой книге «Руководство администратора. Клиент-серверный вариант» (или, соответственно, на сайте ИТС).

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

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

И сервер администрирования и утилита командной строки могут работать в любой поддерживаемой платформой 1С:Предприятия ОС. Но в данной статье мы ограничимся только ОС семейства Windows.

 

2. Установка компонент сервера администрирования

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

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

Подробно про установку сервера 1С:Предприятия я писал здесь.

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

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

После установки необходимо убедиться в наличии всех необходимых компонент описанным выше способом.

 

3. Запуск сервера администрирования

Для получения подробной информации по утилите ras.exe можно вызвать справку выполнив команду

ras help

Из справки видно, что сервер администрирования может работать как в режиме приложения, так и как служба Windows (параметр service). Также мы можем задать сетевой порт, на котором будет работать сервер администрирования (параметр port, по умолчанию используется порт 1545), а для режима администрирования кластера используется режим claster. Вызвать справку к данному режиму можно командой:

rac help cluster

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

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

rac cluster 

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

rac cluster server1c:2540

 

4. Запуск сервера администрирования в качестве службы Windows

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

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

Пусть это будет локальный пользователь с именем USR1CV8_RAS и паролем Pass123

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

Файл register-ras.bat:

@echo off
rem %1 - полный номер версии 1С:Предприятия
set SrvUserName=.USR1CV8_RAS
set SrvUserPwd="Pass123"
set CtrlPort=1540
set AgentName=localhost
set RASPort=1545
set SrvcName="1C:Enterprise 8.3 Remote Server"
set BinPath=""C:Program Files1cv8\%1in
as.exe" cluster --service --port=%RASPort% %AgentName%:%CtrlPort%"
set Desctiption="1C:Enterprise 8.3 Remote Server"
sc stop %SrvcName%
sc delete %SrvcName%
sc create %SrvcName% binPath= %BinPath% start= auto obj= %SrvUserName% password= %SrvUserPwd% displayname= %Desctiption%

В файле указываем:

  • Имя пользователя и пароль из под которого будет запускаться служба — переменные SrvUserName и SrvUserPwd
  • Адрес и порт агента сервера, который мы собираемся администрировать — переменные AgentName и CtrlPort
  • А также имя службы и сетевой порт на котором будет работать сервер администрирования — переменные RASPort и SrvcName. Имеет смысл менять эти параметры только если вы хотите запустить параллельно несколько серверов администрирования, например для обслуживания разных серверов 1С.

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

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

На этом установка сервера администрирования в качестве службы завершена.

 

5. Администрирование кластера серверов с помощью утилиты rac.exe

Итак, сервер администрирования мы установили. Взаимодействием с сервером осуществляется с помощью специальной консольной утилиты rac.exe. Выполним команду

rac help

чтобы получить справку данной программы.

Как видно из справки, утилита имеет один общий аргумент, задающий адрес сервера администрирования (по умолчанию localhost:1545) и множество режимов работы: для администрирования агента кластера серверов, самого кластера, менеджера кластера, рабочих процессов и т. д. Справку по каждому режиму можно вызвать соответствующей командой.

Описывать все режимы работы, очевидно, нет никакого смысла. Приведу лишь несколько примеров работы.

Получение списка информации о кластерах:

Получение списка информационных баз на заданном кластере серверов:

Получение списка соединений с указанной информационной базой:

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

 

6. Программные обертки для работы с сервером администрирования

Как видно из примеров, работать из командной строки с утилитой rac то еще удовольствие. Но данный механизм и не создавался для ручного управления. Например, на сайте ИТС есть Java-архивов, который позволяет взаимодействовать с сервером администрирования из программы на языке Java, без помощи консольной утилиты администрирования. Скачать данный пакет можно здесь.

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

Например, среди прочего, работать с сервером администрирования может написанная на языке OneScript программа deployka.

О скиптовом движке OneScript я уже рассказывал здесь.

О программе deployka можно подробнее узнать здесь.

Ну а максимально полный обзор всех имеющихся библиотек и приложений написанных на OneScript приведен в этой замечательной статье.

 

7. Установка и работа с программой deployka

Алгоритм установки OneScript и deployka довольно подробно разобран в статьях по ссылкам, указанным в предыдущем пункте. Ну а если коротко, он состоит из следующих действий:

1. Скачиваем дистрибутив OneScript с официального сайта.

2. Устанавливаем, следуя инструкциям мастера.

3. Перелогиниваемся в системе, чтобы применились новые переменные среды.

4. Запускаем командную строку с правами администратора, проверяем, что предыдущие пункты выполнены корректно командной

oscript -help

5. Устанавливаем программу deployka с помощью пакетного менеджера opm, выполнив команду

opm install deployka

6. Проверяем, что все работает, вызвав справку «деплойки» командой

deployka help

7. Вот в общем то и все. Все режимы работы программы видны на экране. Далее читаем справку на сайте или в консоли, вызывав подсказку для каждого режима соответствующей командой:

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

deployka session kill -db Accounting_Demo -rac "C:Program Files1cv88.3.11.2867in
ac.exe" -db-user "АбрамовГС (директор)"

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

@echo on

rem Устанавливаем значения переменных
set ServerName="1CAPP:2541"
set RacPath="C:Program Files1cv88.3.11.2954in
ac.exe"
set uccode="123"

set BaseName="ERP_Test"
set UserName="Admin"
set UserPass="Pass123"
set ConStr="/S%ServerName%\%BaseName%"

set RepoPath="tcp://1CAPP/ERP_DEV"
set RepoUserName="test"
set RepoUserPass="123"

rem Завершаем работу пользователей
call deployka session kill -db %BaseName% -db-user %UserName% -db-pwd %UserPass% -rac %RacPath% -lockuccode %uccode%

rem Обновляем конфигурацию базы из хранилища
call deployka loadrepo %ConStr% %RepoPath% -db-user %UserName% -db-pwd %UserPass% -storage-user %RepoUserName% -storage-pwd %RepoUserPass% -uccode %uccode%

rem Обновляем конфигурацию базы данных
call deployka dbupdate %ConStr% -db-user %UserName% -db-pwd %UserPass% -uccode %uccode%

rem Снимаем блокировку сеансов
call deployka session unlock -db %BaseName% -db-user %UserName% -db-pwd %UserPass% -rac %RacPath% -lockuccode %uccode%

 

Всем спасибо, кто дочитал до конца. Пишите, если у вас остались вопросы.

 

33 Comments

  1. Evil Beaver

    Буквально недавно появился пакет для более удобной работы с rac — https://github.com/oscript-library/irac

    Автор — Артем Кузнецов.

    #Использовать irac
    Админка = Новый АдминистрированиеКластера(«localhost», 1545);
    
    Кластеры = Админка.Кластеры();
    
    // Обходим список кластеров
    Для Каждого Кластер Из Кластеры.Список() Цикл
    Сообщить(Кластер.Получить(«Имя»));
    КонецЦикла;
    
    Серверы = Кластер.Серверы();
    

    Показать

    Ну и так далее…

    Reply
  2. ktb

    (1) Пасиб, опередил 😀

    Reply
  3. o.egorova.omsu

    Виталя, как всегда — все детально и по полочкам, очень понятно. спасибо!

    Reply
  4. Tavalik

    (3) Спасибо. 🙂

    Reply
  5. Tavalik

    (1)

    Вам надо выпускать какой-нибудь ежемесячный дайджест, что-то вроде «Новинки в мире OneScript», чтобы все могли оставаться в курсе новинок и изменений.

    Reply
  6. nixel

    (5) хорошая идея. давно думаем над этим)

    Reply
  7. ImHunter

    (1) (2) Попробовал irac. Пока что, не очень понравилось.

    Слишком много получается лишних запросов к RAS — не подбирается максимум информации из результата команд list.

    Ошибочки. Например, в develop.Сеанс.ОбновитьДанныеСеанса() — ошибочное использование переменной (вместо Процесс_Параметры нужно Сеанс_Параметры).

    Еще надо иметь возможность, чтобы настраивать кодировку для ИсполнительКоманд — для Jenkins’a пришлось захардкодить Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8)

    Reply
  8. Evil Beaver

    (10) ошибку в гитхаб, а лучше исправить и прислать пулреквест

    Reply
  9. ktb

    (10) Посмотрите ветку develop, там многое поправлено. Также просьба сделать issue на gitHub по тем моментам, которые не понравились.

    Reply
  10. ImHunter

    (12) Да, хотел в issue отписать. Но их наличие не настроено.

    Reply
  11. ktb

    (13)

    Но их наличие не настроено.

    Можете пояснить, в чем проблема?

    Reply
  12. ImHunter

    (14) Не вижу вкладки Issues. Похоже, я вчера уже переработал;) Хотел, видимо, в форке написать.

    Reply
  13. ktb

    (15) Зайдите в оригинальный репозитарий: https://github.com/arkuznetsov/irac.

    Reply
  14. ImHunter

    (16) Да особого смысла уже нет. Найденные замечания я уже отписал тут. Нового от меня пока что не будет. IRAC не покатил сходу. Поэтому стал доделывать команду для vanessa-runner. Вот ее после тестов обяз выложу.

    Reply
  15. ktb

    (17) Если что, вчера зарелизил. Исправлена ошибка в сеансе. Реализовано заполнение свойств объектов по данным из списка (rac … list).

    Reply
  16. ZAOSTG

    Артем

    Исправьте пожалуйста самый первый пример!



    ПолучитьСтруктуруПараметровОбъекта()

    на

    ПараметрыОбъекта()

    а то примеры не запускаются!

    А так разбираюсь с — не все понятно и просто, но процесс идет.

    И что есть такие разработки -респект!

    Reply
  17. ildary

    (19)

    ПараметрыОбъекта()

    Спасибо тебе добрый человек, выручил!

    Reply
  18. Drivingblind

    Объясните, пожалуйста, новичку, в чем разница между ragent и ras и rac. Зачем нужны эти компоненты, если большинство типовых ситуаций можно выполнить через MMC? Для автоматического выполнения скриптов? И зачем вообще нужен OneScript, если для выполнения сторонних задач существует уйма других языков программирования?

    Reply
  19. xzfantom

    (21)

    ragent — агента сервера «1С:Предприятия»

    ras — сервер администрирования кластера серверов

    rac — консольный клиент к ras

    Вообще, если такой вопрос возникает, то лучше пока голову не забивать, особенно если хватает консоли MMC, вся работа ведётся в windows и баз не много.

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

    Reply
  20. Xershi

    Много танцев с бубнами не понадобилось!

    Работать можно в режиме приложения:

    https://infostart.ru/public/876329/

    И доступен весь функционал.

    И не нужен ни какой OneScript!

    Reply
  21. dgeday

    Коллеги добрый день. Подскажите пожалуйста кто-нибудь при запуске команды:

    C:WindowsSystem32
    egister-ras.bat

    сталкивался с ошибкой:

    [SC] CreateService FAILED 1057:

    The account name is invalid or does not exist, or the password is invalid for the account name specified.

    Если удалось, то как решить данную проблему?

    При чем специально (проверял) на другой машине удалось аналогично зарегистрировать под таким же пользователем и паролем службу.

    Спасибо.

    Reply
  22. oldgabber0

    Есть ли возможность получить в какую-то переменную результат выполнения команды?

    Вот мы например сделали «rac connection —cluster». Как мне теперь результат программно проанализировать?

    В файл сохранить, или даже на почту отправить, как в соседней статье.

    Reply
  23. user700211_a.straltsou

    Консоль администрирования у вас кармане! — https://infostart.ru/public/591608/

    Ну и 1С тоже не стоит на месте — в 8.3.14 можно будет админить из Предприятия —

    https://wonderland.v8.1c.ru/blog/razvitie-klastera-serverov/

    Reply
  24. user792443

    А есть возможность управлять сеансами нескольких кластеров? А то [ deployka session search -db base123 ] говорит, что не может найти в кластере такую базу. В отладке видно, что базы ищутся в только первом по списку кластере. Указание параметра rac «C..rrac.exe —cluster=<мой-уид>» ни к чему не приводит(

    Reply
  25. user792443

    (27) Пока добавил ключ «-cluster», чтобы ИдентификаторКластера() возвращал нужный уид, если указываю его внаглую

    Reply
  26. artbear

    (1) Ну и напомню, что deployka портирована в приложение vanessa-runner и дальнейшее развитие этого функционала идет именно в vanessa-runner

    Reply
  27. artbear

    (17)Ждем доработок в ванесса-раннер.

    Reply
  28. ImHunter

    (30) Так уже давно там:) Это про команды session closed и session info.

    Reply
  29. 6en9er

    (28) Подскажите пример, как вы кластер указали? ключ «-cluster» не определяется.

    Reply
  30. user792443

    (32) уже не вспомню) там пару строк пришлось добавить в деплойку. Могу завтра на работе глянуть, если очень надо

    Reply
  31. 6en9er

    (33) Буду очень признателен.

    Reply
  32. user792443

    (34) файл .os заменить в каталоге с библиотекой, у меня это «C:Program Files (x86)OneScriptlibdeploykasrcКлассы». Там можете глянуть изменения

    Reply
  33. 6en9er

    (35) Спасибо большое. Разобрался

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *