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

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

Сервер лицензирования позволяет значительно упростить развертывание кластера серверов в виртуальной среде и динамическое изменение ресурсов, выделенных серверу.

Преимущества кластера с сервером лицензирования


  • Если в кластере несколько машин, не нужно активировать лицензии на каждом из них, так как они будут централизованы на одном сервере.
  • При изменении конфигурации сервера не нужно будет получать лицензию заново, так как она привязана к отдельному серверу.
  • Не нужно повторно активировать лицензии, например, при пересборке кластера.

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

Часто задаваемые вопросы


— Нужны ли дополнительные лицензии для сервера лицензирования 1С?

Нет, сервер лицензирования не требует установки дополнительных лицензий. Если вы запускаете сервер 1С, у вас уже есть дистрибутив — доплачивать не нужно.

1С не распространяет свои дистрибутивы свободно, для легитимного доступа нужно приобрести информационно-техническое сопровождение (1С: ИТС). Если хотите упростить задачу — арендуйте лицензии у нас, мы предоставим ИТС.

— Помогают ли экономить серверы лицензирования?

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

— Какие конфигурации подходят для серверов лицензирования?

Как ПО, сервер лицензирования 1С потребляет не много вычислительных ресурсов. Для небольшого кластера до пяти серверов будет достаточно двух ядер, 4 ГБ оперативной памяти и примерно 20 ГБ на диске для хранения лицензий.



Задача: собрать кластер 1С


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

Подготовка кластера


1. Переходим в раздел Облачная платформа внутри панели управления.

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


3. В разделе Облачные базы данных создаем кластер PostgreSQL-14-1C, пользователя и базу данных. Подробнее о работе с услугой можно ознакомиться в документации.


Настройка сервера приложений


1. Подключаемся к серверу приложений (demo-server) по SSH и устанавливаем переменные окружения:

export PLATFORM_VERSION='8.3.23.1912'
export PLATFORM_ARCH='x86_64'
export PKG_SERVER_NAME='server64_8_3_23_1912.tar.gz'

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


2. Загружаем необходимые дистрибутивы для сервера приложений:

wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/server64_8_3_23_1912.tar.gz
wget http://www.gilev.ru/1c/tpc/GILV_TPC_G1C_83.dt

Снапшоты дистрибутивов доступны в хранилище Selectel, но их также можно взять с официального сайта 1C.

3. Устанавливаем необходимые пакеты для работы 1С и Apache. Это можно сделать с помощью одной команды:

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections &&
    apt-get -qq update &&
    apt-get install -y \
        iproute2 \
        curl wget \
        ttf-mscorefonts-installer \
        imagemagick \
        unixodbc \
        fontconfig \
        libgtk-3-0 \
        libenchant1c2a \
        libharfbuzz-icu0 \
        libgstreamer1.0-0 \
        libgstreamer-plugins-base1.0-0 \
        gstreamer1.0-plugins-good \
        gstreamer1.0-plugins-bad \
        libsecret-1-0 \
        libsoup2.4-1 \
        libgl1 \
        libegl1 \
        libxfixes3 \
        libxslt1.1 \
        geoclue-2.0 \
        openjdk-8-jre \
        jq \
        netcat \
        apache2

4. Обновляем шрифты клиента на сервере:

fc-cache -fv

5. Распаковываем и устанавливаем платформу:

tar vxf "${PKG_SERVER_NAME}"
//Настройка сервера приложений
    --enable-components liberica_jre,server,server_admin,ws

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

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

ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/webinst /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ragent /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ras /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/rac /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibcmd /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibsrv /usr/local/bin

7. Регистрируем необходимые сервисы, в частности — сервер приложений 1С: Предприятие:

systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/srv1cv8-${PLATFORM_VERSION}@.service
systemctl enable srv1cv8-${PLATFORM_VERSION}@default
systemctl start srv1cv8-${PLATFORM_VERSION}@default
systemctl status srv1cv8-${PLATFORM_VERSION}@default

8. На этом этапе сервис уже работает. Запускаем сервер ras:

systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/ras-${PLATFORM_VERSION}.service
systemctl enable ras-${PLATFORM_VERSION}
systemctl start ras-${PLATFORM_VERSION}
systemctl status ras-${PLATFORM_VERSION}

ras — сервер удаленного администрирования кластера 1С. Он позволяет прослушивать порт 1545/tcp и принимать команды на управление от утилиты rac.

Отлично — сервер приложений готов. Теперь нужно настроить сервер лицензирования.

Настройка сервера лицензирования


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

1. Подключаемся к серверу лицензирования (demo-licence) по SSH и устанавливаем следующие переменные окружения:

export PLATFORM_VERSION='8.3.23.1912'
export PLATFORM_ARCH='x86_64'
export PKG_LIC_NAME='1c_enterprise_license_tools_0.15.0_2_linux_x86_64.tar.gz'
export PKG_SERVER_NAME='server64_8_3_23_1912.tar.gz'

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

2. Загружаем необходимые дистрибутивы для сервера лицензирования:

wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/server64_8_3_23_1912.tar.gz
wget https://52772e2d-80a1-4cab-a8a3-d66ac287e640.selstorage.ru/1c_enterprise_license_tools_0.15.0_2_linux_x86_64.tar.gz

Снапшоты дистрибутивов доступны в хранилище Selectel, но их также можно взять с официального сайта 1C.

3. Далее нужно установить необходимые пакеты для работы 1С и Apache. Это можно сделать с помощью одной команды:

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections &&
    apt-get -qq update &&
    apt-get install -y \
        iproute2 \
        curl wget \
        ttf-mscorefonts-installer \
        imagemagick \
        unixodbc \
        fontconfig \
        libgtk-3-0 \
        libenchant1c2a \
        libharfbuzz-icu0 \
        libgstreamer1.0-0 \
        libgstreamer-plugins-base1.0-0 \
        gstreamer1.0-plugins-good \
        gstreamer1.0-plugins-bad \
        libsecret-1-0 \
        libsoup2.4-1 \
        libgl1 \
        libegl1 \
        libxfixes3 \
        libxslt1.1 \
        geoclue-2.0 \
        openjdk-8-jre \
        jq \
        netcat

Процесс установки может занять до 10 минут.

4. Обновляем шрифты клиента на сервере:

fc-cache -fv

5. Распаковываем и устанавливаем платформу:

tar vxf "${PKG_SERVER_NAME}"
//Настройка сервера лицензирования
    --enable-components liberica_jre,server,server_admin,ws

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

ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/webinst /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ragent /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ras /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/rac /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibcmd /usr/local/bin
ln -s /opt/1cv8/${PLATFORM_ARCH}/${PLATFORM_VERSION}/ibsrv /usr/local/bin

7. Регистрируем и запускаем сервис 1С:

# license-tools (https://releases.1c.ru/project/EnterpriseLicenseTools)
tar vxf "$PKG_LIC_NAME"
//Настройка сервера лицензирования
systemctl link \
    /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/srv1cv8-${PLATFORM_VERSION}@.service
systemctl enable srv1cv8-${PLATFORM_VERSION}@default
systemctl start srv1cv8-${PLATFORM_VERSION}@default
systemctl status srv1cv8-${PLATFORM_VERSION}@default

8. На этом этапе сервис уже работает. Запускаем сервер ras:

systemctl link \
  /opt/1cv8/$PLATFORM_ARCH/$PLATFORM_VERSION/ras-${PLATFORM_VERSION}.service
systemctl enable ras-${PLATFORM_VERSION}
systemctl start ras-${PLATFORM_VERSION}
systemctl status ras-${PLATFORM_VERSION}


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

/opt/1C/1CE/components/1c-enterprise-ring-0.19.5+12-x86_64/ring license activate ...

Вместо многоточия необходимо указать данные для активации: --company, --town, --country, --zip-code, --street, --house, --email, --serial, --pin, --previous-pin.


Пример активации 1C:Enterprise Server и записи параметров.

Вы можете вывести информацию о статусе сервера приложений 1С:

systemctl status srv1cv8-8.23.1912@default.service


10. Выдадим права на запуск сервера приложений отдельному пользователю, созданному инсталлятором 1С (usr1cv8:grp1cv8):

chown usr1cv8:grp1cv8 -R /var/1C/licenses

11. Последним этапом нужно проверить, прописан ли адрес сервера приложений в списке хостов:

vi /etc/hosts

Без этого сервер лицензирования не сможет раздавать лицензии по запросу. В результате список хостов должен выглядеть так:


Загрузка информационной базы


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

1. Производим загрузку с помощью утилиты ibcmd из файла DT в облачную базу данных:

NOW="$(date +%s)"
DT_FILE=~/GILV_TPC_G1C_83.dt
DATA_DIR="/home/usr1cv8/data/${NOW}"
DATABASE_HOST=master.f09aa6eb-2810-465b-90ff-df8d8a160859.pvc.c.dbaas.selcloud.ru
DATABASE_USER="test"
DATABASE_PASS="test"
DATABASE_NAME="test"
ibcmd infobase restore \
    --data="${DATA_DIR}" \
    --dbms=PostgreSQL \
    --db-server=${DATABASE_HOST} \
    --db-user=${DATABASE_USER} \
    --db-pwd=${DATABASE_PASS} \
    --db-name=${DATABASE_NAME} \
    ${DT_FILE} || err_code=$?

Обратите внимание на параметры: для подключения к информационной базе нужно указать адрес хоста, данные пользователя и название БД.

2. Добавляем информационную базу в кластер 1С:

PUB_NAME="test"
IB_NAME="test"
IB_DSCR="test"
CLUSTER_UID=$(rac cluster list | awk '$1 == "cluster" {sub(/[\r\n]/, x);print $3}')
rac infobase create \
        --cluster="${CLUSTER_UID}" \
        --name="${IB_NAME}" \
        --descr="${IB_DSCR}" \
        --dbms=PostgreSQL \
        --db-server="${DATABASE_HOST}" \
        --db-name="${DATABASE_NAME}" \
        --locale=ru \
        --db-user="${DATABASE_USER}" \
        --db-pwd="${DATABASE_PASS}" \
        --license-distribution=allow

3. Публикуем информационную базу для доступа через веб-клиент 1С:

webinst -apache24 -wsdir "${PUB_NAME}" -dir "/var/www/data/${PUB_NAME}" -connstr "Srvr=\"localhost\";Ref=\"${PUB_NAME}\";"

4. Перезагрузим установленный Apache, чтобы применить все изменения:

systemctl restart apache2


Сборка кластера


Последним этапом необходимо «объединить» сервер приложений и лицензирования воедино.

1. Устанавливаем переменные и назначаем запросы функциональности для сервера приложений:

SRV_UID=$(rac server list --cluster="${CLUSTER_UID}" | awk -F'[:]' '$1 ~ "^server" {gsub(/^[ \t]+/,"",$2);gsub(/[ \t]+$/,"",$2);print $2}')
LIC_PORT="1540"
LIC_HOST="172.24.21.4"
LIC_PORT_RANGE="1560:1591"
rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${SRV_UID} \
    --position=1 --object-type=LicenseService --rule-type=never
rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${SRV_UID} \
    --position=2 --rule-type=always

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

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

LIC_SRV_UID=$(rac server insert \
    --cluster=${CLUSTER_UID} \
    --agent-host=${LIC_HOST} \
    --name="license" \
    --agent-port=$LIC_PORT \
    --port-range=$LIC_PORT_RANGE | awk '$1 == "server" {sub(/[\r\n]/, x);print $3}')
rac rule insert \
    --cluster=${CLUSTER_UID} \
    --server=${LIC_SRV_UID} \
    --position=1 --object-type=LicenseService --rule-type=always

Назначаем id с помощью переменной LIC_SRV_UID для дальнейшего использования в скрипте.

3. Применяем правила и запросы функциональности:

rac rule apply \
    --cluster=${CLUSTER_UID}

До запуска этой команды мы только задали правила и записали их в конфигурацию кластера, но они еще не действовали. После сервер считал и включил их. Теперь роль сервера лицензирования сможет взять только demo-license.

Результат: тестирование кластера


Мы можем подключиться к серверу приложений и проверить, работают ли лицензии. Для этого копируем адрес demo-server из панели управления и отправляем такой HTTP-запрос:

http://172.24.21.3/test

Параметр test — это PUB_NAME, который мы указали в 11 пункте при добавлении информационной базы 1С.



Готово — 1C:Enterprise доступна через интернет, сервер лицензирования работает. Если вы получили код 500, подключитесь к серверу приложений и перезагрузите Apache.

Остались вопросы после прочтения статьи? Может, хотите поделиться опытом? Присоединяйтесь к обсуждениям в комментариях!