При развертывании высоконагруженных систем на базе 1С:Предприятие под управлением ОС Linux часто возникает вопрос оптимизации взаимодействия между сервером приложений и системой управления базами данных (СУБД). Традиционно подключение настраивается через TCP/IP (даже если оба сервера находятся на одной машине через localhost), однако существует более эффективный способ — использование Unix-сокетов (Inter-Process Communication, IPC). В этой статье мы подробно разберем, почему этот метод быстрее, как его правильно настроить и какие нюансы прав доступа следует учесть.
Рассмотрим механизм работы стандартного TCP-соединения. Когда сервер 1С обращается к PostgreSQL через 127.0.0.1, данные проходят через весь сетевой стек ядра Linux. Система инкапсулирует данные в пакеты, вычисляет контрольные суммы, выполняет маршрутизацию и проверку правил брандмауэра (iptables/nftables). Несмотря на то, что пакеты не покидают сетевую карту, ресурсы процессора тратятся на "обслуживание" протокола.
Unix-сокеты работают иначе. Они обмениваются данными напрямую через буферы в оперативной памяти ядра, минуя сетевые протоколы. Это значительно снижает задержки (latency). Проанализируем, что это дает практике 1С:
Прежде чем подключать 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.
Теперь выясним, как указать серверу 1С, что вместо сетевого адреса нужно использовать путь к файловой системе. Это делается при создании или редактировании информационной базы в консоли администрирования 1С или через диалог запуска.
В поле "Сервер базы данных" вместо привычного localhost или IP-адреса 127.0.0.1 необходимо прописать путь к директории, которую мы указали в настройках PostgreSQL.
Важный нюанс: указывается именно путь к КАТАЛОГУ, а не к самому файлу сокета. Например, если файл сокета лежит по адресу /var/run/postgresql/.s.PGSQL.5432, то в 1С мы пишем:
/var/run/postgresql
Платформа 1С автоматически "достроит" имя файла сокета, используя стандартный префикс и номер порта (по умолчанию 5432).
Самая распространенная ошибка при такой настройке — отсутствие прав у процесса 1С на чтение и запись в файл сокета. Процесс сервера 1С обычно запускается от имени пользователя usr1cv8, в то время как сокет создается пользователем postgres.
Проанализируем ситуацию по шагам:
postgres.usr1cv8 мог работать с сокетом, добавим его в группу владельца сокета. Выполним команду в терминале:
usermod -aG postgres usr1cv8
usr1cv8 имеет права на выполнение (x) для всех родительских каталогов в пути. Если сокет лежит в /var/run/postgresql, то права должны быть корректными на каждом уровне иерархии.После добавления пользователя в группу необходимо перезапустить службу сервера 1С: systemctl restart srv1cv8-xxx.
Для достижения максимальной скорости работы мы можем перенести директорию сокета в оперативную память. В современных дистрибутивах Linux каталог /run или /var/run уже смонтирован как tmpfs (файловая система в RAM). Если же это не так, рекомендуем настроить монтирование этой папки в оперативную память.
Это исключит любые задержки, связанные с обращениями к дисковой подсистеме при инициализации соединения, и сделает коммуникацию между 1С и "слоном" (PostgreSQL) максимально прозрачной и быстрой.
Несмотря на высокую эффективность, разберем случаи, когда Unix-сокеты использовать нельзя:
Использование Unix-сокетов — это проверенный временем (как отмечают опытные администраторы, более 10 лет эксплуатации) метод стабилизации и ускорения работы 1С. Мы получаем более надежное соединение, которое не зависит от состояния сетевого интерфейса и правил фильтрации трафика. Стабильность работы остается на высоком уровне, а небольшой прирост в 5-10% станет отличным бонусом к общей отзывчивости системы.