Перевод инфраструктуры «1С:Предприятие» на операционные системы семейства Linux — один из наиболее популярных сценариев оптимизации затрат на лицензирование и построения отказоустойчивых систем. Однако в процессе администрирования этой связки специалисты часто сталкиваются со специфическими трудностями. В этой статье мы подробно разберем, как устранить ошибку отсутствия библиотеки mchar при создании базы данных, выясним особенности работы СУБД MS SQL Server в среде Linux и рассмотрим механизмы связки Linux-сервера приложений с Windows-сервером лицензирования.
При создании базы данных на сервере 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 (начиная с версии SQL Server 2017) и подключить к нему базу данных через сервер приложений 1С, работающий на той же машине под Linux. При такой попытке сервер выдает ошибку: «использование microsoft sql server в качестве базы данных невозможно».
Выясним причину этого поведения:
Существует важное техническое исключение: сервер 1С на Linux может взаимодействовать с MS SQL Server, но исключительно в режиме внешнего источника данных. Для этого на Linux-сервере настраивается связка драйверов unixODBC и FreeTDS. Использовать такую связку для размещения основной (транзакционной) базы данных 1С категорически невозможно.
Если сервер приложений 1С должен работать исключительно на Linux, в качестве СУБД необходимо выбирать из официально поддерживаемых альтернатив:
Часто в инфраструктуре компании сервер приложений 1С переносится на Linux, но сервер лицензирования (с аппаратными HASP-ключами или программными пин-кодами) остается работать под управлением ОС Windows. Разберем по шагам, как настроить получение лицензий в такой конфигурации.
Если многопользовательский ключ защиты установлен в USB-порт Windows-компьютера, то на этой Windows-машине должна быть запущена служба HASP License Manager. Чтобы Linux-сервер 1С мог отправлять сетевые запросы к этому ключу, выполним следующие действия:
Шаг 1: Настройка конфигурационного файла nethasp.ini на Linux-сервере
Перейдем в каталог конфигурационных файлов сервера 1С на Linux. В зависимости от версии платформы и архитектуры, путь может отличаться:
/opt/1cv8/conf//opt/1C/v8.3/x86_64/conf/Создадим или отредактируем файл 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.
Если на Windows-сервере развернут полноценный сервер приложений 1С, на котором активированы многопользовательские программные лицензии (пин-коды), мы можем объединить Linux-сервер и Windows-сервер в единый кластер 1С:Предприятия. Это позволит централизованно раздавать лицензии.
Разберем требования и порядок настройки этой связки:
Сервис лицензирования, Тип требования — Не назначать.Сервис лицензирования, Тип требования — Назначать.После применения этих настроек Linux-сервер при запуске сеансов пользователей будет перенаправлять все запросы на получение программных лицензий Windows-серверу, входящему в этот же кластер, обеспечивая бесперебойную работу пользователей.
Проанализировав рассмотренную конфигурацию (CentOS 7 + PostgreSQL 9.6), необходимо обратить внимание на вопросы безопасности и долгосрочной поддержки инфраструктуры: