Как настроить подключение сервера 1С к PostgreSQL через Unix-сокеты в Linux и повысить производительность?

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

При развертывании высоконагруженных систем на базе 1С:Предприятие под управлением ОС Linux часто возникает вопрос оптимизации взаимодействия между сервером приложений и системой управления базами данных (СУБД). Традиционно подключение настраивается через TCP/IP (даже если оба сервера находятся на одной машине через localhost), однако существует более эффективный способ — использование Unix-сокетов (Inter-Process Communication, IPC). В этой статье мы подробно разберем, почему этот метод быстрее, как его правильно настроить и какие нюансы прав доступа следует учесть.

Зачем переходить с TCP на Unix-сокеты?

Рассмотрим механизм работы стандартного TCP-соединения. Когда сервер 1С обращается к PostgreSQL через 127.0.0.1, данные проходят через весь сетевой стек ядра Linux. Система инкапсулирует данные в пакеты, вычисляет контрольные суммы, выполняет маршрутизацию и проверку правил брандмауэра (iptables/nftables). Несмотря на то, что пакеты не покидают сетевую карту, ресурсы процессора тратятся на "обслуживание" протокола.

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

  1. Ускорение коротких запросов: 1С активно использует временные таблицы и частые обращения к СУБД. Снижение сетевых задержек на каждом запросе суммарно дает заметный эффект.
  2. Экономия портов: При экстремальных нагрузках в TCP-режиме может возникнуть проблема "исчерпания динамических портов" (ephemeral ports). Unix-сокеты лишены этого недостатка, так как используют файловый дескриптор.
  3. Прирост производительности: По результатам тестов, реальное ускорение на операциях записи и чтения небольших объемов данных составляет от 5% до 15%.

Шаг 1. Настройка сервера PostgreSQL

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

Найдем файл postgresql.conf. Нам нужно проверить параметр unix_socket_directories. Он определяет, в какой папке будет создан файл сокета (обычно он называется .s.PGSQL.5432).


# Пример в postgresql.conf
unix_socket_directories = '/var/run/postgresql'
unix_socket_permissions = 0770

Далее настроим права доступа в файле pg_hba.conf. Это критически важный этап. Для работы через сокет используется тип подключения local, а не host. Убедимся, что для пользователя 1С разрешен доступ:


# Тип    База          Пользователь    Метод
local    all           all             md5

Если вы используете специфического пользователя для базы 1С, лучше указать его явно вместо all. После внесения изменений не забудем перезапустить службу PostgreSQL командой systemctl restart postgresql.

Шаг 2. Настройка сервера 1С:Предприятие

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

В поле "Сервер базы данных" вместо привычного localhost или IP-адреса 127.0.0.1 необходимо прописать путь к директории, которую мы указали в настройках PostgreSQL.

Важный нюанс: указывается именно путь к КАТАЛОГУ, а не к самому файлу сокета. Например, если файл сокета лежит по адресу /var/run/postgresql/.s.PGSQL.5432, то в 1С мы пишем:

/var/run/postgresql

Платформа 1С автоматически "достроит" имя файла сокета, используя стандартный префикс и номер порта (по умолчанию 5432).

Шаг 3. Решение проблем с правами доступа (Permission Denied)

Самая распространенная ошибка при такой настройке — отсутствие прав у процесса 1С на чтение и запись в файл сокета. Процесс сервера 1С обычно запускается от имени пользователя usr1cv8, в то время как сокет создается пользователем postgres.

Проанализируем ситуацию по шагам:

  1. Проверка групп: Проверим, в какую группу входит файл сокета. Обычно это группа postgres.
  2. Добавление пользователя: Чтобы usr1cv8 мог работать с сокетом, добавим его в группу владельца сокета. Выполним команду в терминале: usermod -aG postgres usr1cv8
  3. Права на папки: Убедимся, что пользователь usr1cv8 имеет права на выполнение (x) для всех родительских каталогов в пути. Если сокет лежит в /var/run/postgresql, то права должны быть корректными на каждом уровне иерархии.

После добавления пользователя в группу необходимо перезапустить службу сервера 1С: systemctl restart srv1cv8-xxx.

Шаг 4. Оптимизация через tmpfs (для продвинутых)

Для достижения максимальной скорости работы мы можем перенести директорию сокета в оперативную память. В современных дистрибутивах Linux каталог /run или /var/run уже смонтирован как tmpfs (файловая система в RAM). Если же это не так, рекомендуем настроить монтирование этой папки в оперативную память.

Это исключит любые задержки, связанные с обращениями к дисковой подсистеме при инициализации соединения, и сделает коммуникацию между 1С и "слоном" (PostgreSQL) максимально прозрачной и быстрой.

Ограничения метода

Несмотря на высокую эффективность, разберем случаи, когда Unix-сокеты использовать нельзя:

Подведем итоги

Использование Unix-сокетов — это проверенный временем (как отмечают опытные администраторы, более 10 лет эксплуатации) метод стабилизации и ускорения работы 1С. Мы получаем более надежное соединение, которое не зависит от состояния сетевого интерфейса и правил фильтрации трафика. Стабильность работы остается на высоком уровне, а небольшой прирост в 5-10% станет отличным бонусом к общей отзывчивости системы.

← На главную