Как решить проблемы при установке сервера 1С на Linux CentOS, подружить его с PostgreSQL и настроить получение лицензий

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Перевод инфраструктуры «1С:Предприятие» на операционные системы семейства Linux — один из наиболее популярных сценариев оптимизации затрат на лицензирование и построения отказоустойчивых систем. Однако в процессе администрирования этой связки специалисты часто сталкиваются со специфическими трудностями. В этой статье мы подробно разберем, как устранить ошибку отсутствия библиотеки mchar при создании базы данных, выясним особенности работы СУБД MS SQL Server в среде Linux и рассмотрим механизмы связки Linux-сервера приложений с Windows-сервером лицензирования.

Устранение ошибки отсутствия библиотеки mchar в PostgreSQL

При создании базы данных на сервере 1С под управлением PostgreSQL администраторы часто сталкиваются с системной ошибкой, сообщающей об отсутствии библиотеки mchar (или сопутствующей ей fulleq). Эта проблема возникает из-за использования стандартной (так называемой «ванильной») сборки СУБД из официальных репозиториев PostgreSQL (PGDG), которая не содержит необходимых для 1С специфических патчей.

Для корректной работы платформы 1С с СУБД PostgreSQL требуются специальные доработки механизма работы со строками, сортировками и индексами. Без этих доработок СУБД не сможет обрабатывать запросы платформы. Давайте разберем по шагам, как выявить и исправить эту коллизию в операционной системе CentOS.

Шаг 1: Анализ установленных пакетов

Выясним, какие именно пакеты СУБД сейчас присутствуют в нашей системе. Для этого выполним команду поиска установленных RPM-пакетов:

rpm -qa | grep -i postgres

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


postgrespro-1c-centos96-9.6-1.noarch
postgresql-9.2.24-1.el7_5.x86_64
postgresql96-server-9.6.12-1PGDG.rhel7.x86_64
postgresql96-libs-9.6.12-1PGDG.rhel7.x86_64
postgresql96-contrib-9.6.12-1PGDG.rhel7.x86_64
postgresql-contrib-9.2.24-1.el7_5.x86_64
postgresql96-9.6.12-1PGDG.rhel7.x86_64
postgresql-libs-9.2.24-1.el7_5.x86_64

Из данного вывода видно, что в системе установлена «каша» из трех разных версий СУБД: стандартной для CentOS 7 (версия 9.2), оригинальной сборки PostgreSQL 9.6 от PGDG и мета-пакета Postgres Pro 1C. Запущенная служба при этом использует бинарные файлы оригинального дистрибутива PostgreSQL 9.6, в котором физически нет библиотек mchar.so и fulleq.so в каталоге /usr/pgsql-9.6/lib/.

Шаг 2: Полная очистка системы от некорректных версий СУБД

Чтобы избежать конфликтов библиотек и путаницы с портами служб, полностью удалим все пакеты PostgreSQL. Перед этим обязательно остановите службу СУБД и при необходимости сделайте резервные копии баз данных.


systemctl stop postgresql-9.6
yum remove postgresql* postgrespro*

После удаления пакетов убедимся, что конфигурационные файлы и директории данных также очищены (или перенесены в архив), чтобы новая установка не подхватила старые некорректные параметры.

Шаг 3: Установка правильной сборки PostgreSQL для 1С

Для работы с «1С:Предприятием» необходимо использовать специализированные дистрибутивы СУБД. Их можно получить двумя путями: скачать сборку PostgreSQL от самой компании 1С с портала ИТС или воспользоваться дистрибутивом Postgres Pro 1C от компании Postgres Professional.

Подключим репозиторий Postgres Pro и установим СУБД, предназначенную специально для работы с платформой 1С. Для версии PostgreSQL 9.6 на CentOS 7 команды установки будут выглядеть следующим образом:


rpm -Ivh https://repo.postgrespro.ru/pgpro-9.6/keys/postgrespro-repo-centos.noarch.rpm
yum install postgrespro-1c-9.6

Шаг 4: Инициализация и запуск СУБД

После чистой установки инициализируем базу данных с поддержкой правильных локалей (для корректной работы сортировок в 1С крайне важна локаль UTF-8, настроенная по умолчанию):


/usr/pgsql-9.6/bin/postgresql96-setup initdb
systemctl enable postgresql-9.6
systemctl start postgresql-9.6

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

Ограничения использования MS SQL Server на операционной системе Linux

Рассмотрим ситуацию, когда администраторы пытаются развернуть MS SQL Server на ОС Linux (начиная с версии SQL Server 2017) и подключить к нему базу данных через сервер приложений 1С, работающий на той же машине под Linux. При такой попытке сервер выдает ошибку: «использование microsoft sql server в качестве базы данных невозможно».

Выясним причину этого поведения:

  1. Ограничение исполняемых файлов сервера 1С под Linux: Сервер приложений «1С:Предприятия» для Linux физически не содержит программного кода для прямого взаимодействия с СУБД MS SQL Server. Разработчики платформы компилируют поддержку MS SQL только в сборках сервера 1С под операционную систему Windows.
  2. Официальные системные требования: Согласно архитектуре 1С, хранение рабочей информационной базы на MS SQL Server возможно только тогда, когда сам сервер приложений «1С:Предприятие» запущен под управлением ОС Windows. При этом СУБД MS SQL Server физически может располагаться как на Windows, так и на Linux.

Существует важное техническое исключение: сервер 1С на Linux может взаимодействовать с MS SQL Server, но исключительно в режиме внешнего источника данных. Для этого на Linux-сервере настраивается связка драйверов unixODBC и FreeTDS. Использовать такую связку для размещения основной (транзакционной) базы данных 1С категорически невозможно.

Если сервер приложений 1С должен работать исключительно на Linux, в качестве СУБД необходимо выбирать из официально поддерживаемых альтернатив:

Связка сервера 1С на Linux с сервером лицензирования на Windows

Часто в инфраструктуре компании сервер приложений 1С переносится на Linux, но сервер лицензирования (с аппаратными HASP-ключами или программными пин-кодами) остается работать под управлением ОС Windows. Разберем по шагам, как настроить получение лицензий в такой конфигурации.

Вариант А: Использование аппаратных USB-ключей защиты (HASP)

Если многопользовательский ключ защиты установлен в USB-порт Windows-компьютера, то на этой Windows-машине должна быть запущена служба HASP License Manager. Чтобы Linux-сервер 1С мог отправлять сетевые запросы к этому ключу, выполним следующие действия:

Шаг 1: Настройка конфигурационного файла nethasp.ini на Linux-сервере

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

Создадим или отредактируем файл nethasp.ini, прописав в нем параметры прямого обращения к Windows-серверу лицензирования по IP-адресу, минуя неэффективный в разных подсетях широковещательный поиск:


[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.50 ; Укажите IP-адрес вашего Windows-сервера лицензирования
NH_TCPIP_METHOD = UDP
NH_USE_BROADCAST = Disabled

Шаг 2: Настройка сетевых экранов (Firewall)

Для того чтобы сетевые пакеты беспрепятственно проходили между серверами, на стороне Windows-сервера в брандмауэре необходимо открыть входящий порт 475 (UDP и TCP). На Linux-сервере убедитесь, что исходящие запросы на этот порт не блокируются правилами iptables или службы firewalld.

Вариант Б: Использование программных лицензий через кластер 1С

Если на Windows-сервере развернут полноценный сервер приложений 1С, на котором активированы многопользовательские программные лицензии (пин-коды), мы можем объединить Linux-сервер и Windows-сервер в единый кластер 1С:Предприятия. Это позволит централизованно раздавать лицензии.

Разберем требования и порядок настройки этой связки:

  1. Идентичность версий платформы: На обоих серверах (на Linux и на Windows) должна быть установлена абсолютно одинаковая версия платформы 1С:Предприятие (например, 8.3.12.1714). Различие даже в последней цифре сборки не позволит объединить их в кластер.
  2. Создание кластера: С помощью консоли администрирования кластера 1С добавим оба сервера в качестве рабочих серверов одного кластера. При этом центральным сервером кластера может выступать любой из них.
  3. Настройка требований назначения функциональности: Чтобы лицензии брались именно с Windows-машины, настроим правила для рабочих процессов:
    • Для рабочего сервера на Linux добавим новое требование: Объект требования — Сервис лицензирования, Тип требования — Не назначать.
    • Для рабочего сервера на Windows добавим требование: Объект требования — Сервис лицензирования, Тип требования — Назначать.

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

Важные рекомендации по актуализации системного ПО

Проанализировав рассмотренную конфигурацию (CentOS 7 + PostgreSQL 9.6), необходимо обратить внимание на вопросы безопасности и долгосрочной поддержки инфраструктуры:

← На главную