При работе с 1С на платформе Linux, использование СУБД Postgres Pro является распространенным и эффективным решением. Однако процесс установки, настройки и управления может вызвать вопросы, особенно при необходимости запуска нескольких экземпляров или тонкой настройки для оптимальной производительности. В этой статье мы подробно разберем, как преодолеть основные сложности и обеспечить стабильную работу вашей системы.
Прежде чем углубляться в тонкости, давайте выясним, почему иногда возникают проблемы с подключением к PostgreSQL на Linux. Одна из частых причин связана с некорректной работой или расположением Unix-сокета.
По умолчанию, PostgreSQL, включая Postgres Pro, создает Unix-сокет для локальных подключений. Обычно он располагается в директории /tmp или /var/run/postgresql. Расположение сокета определяется параметром unix_socket_directories в файле конфигурации postgresql.conf. Если сокет не создался автоматически при старте сервера, нам потребуется создать его вручную и выдать необходимые права.
Как проверить и подключиться:
Проверим расположение сокета: Откройте файл postgresql.conf и найдите параметр unix_socket_directories. Скорее всего, там будет указана директория /tmp, но могут быть и другие варианты, специфичные для вашей сборки Postgres Pro.
Подключимся с принудительным указанием сокета: Если вы столкнулись с проблемой подключения через стандартные методы, попробуйте явно указать путь к директории сокета при подключении через утилиту psql:
sudo -u postgres psql -h /tmp -d postgres
Здесь -h /tmp указывает на директорию, где расположен сокет. Обратите внимание, что сам файл сокета обычно имеет имя в формате .s.PGSQL.NNNN, где NNNN — это номер порта сервера (по умолчанию 5432). Рядом с ним также создается файл блокировки с именем .s.PGSQL.NNNN.lock, который не следует удалять вручную.
В отличие от операционной системы Windows, где несколько экземпляров PostgreSQL обычно реализуются как отдельные службы, в Linux для этого часто используются утилиты, позволяющие создавать и управлять кластерами. Давайте разберем этот процесс подробнее.
Концепция кластеров в Linux:
Каждый "кластер" PostgreSQL — это по сути отдельный экземпляр сервера, работающий со своим набором файлов данных (PGDATA) и, как правило, на своем уникальном порту. Таким образом, мы можем запустить несколько независимых серверов PostgreSQL на одной машине.
Методы создания и управления:
Использование утилит дистрибутива (например, pg_createcluster для Debian/Ubuntu):
В дистрибутивах на основе Debian/Ubuntu существует удобная утилита pg_createcluster, которая значительно упрощает создание нового кластера. Мы можем создать новый кластер, указав версию PostgreSQL и имя кластера. При этом для нового кластера автоматически выбирается следующий доступный порт (например, 5433, если 5432 занят) и инициализируется отдельная директория для данных.
Например, для создания нового кластера версии 17 с именем main_second на другом порту, мы можем использовать:
sudo pg_createcluster 17 main_second
Управление такими кластерами осуществляется с помощью команд, таких как pg_ctlcluster:
sudo pg_ctlcluster 17 main_second start
sudo pg_ctlcluster 17 main_second stop
sudo pg_ctlcluster 17 main_second restart
Каждый кластер будет иметь свою собственную директорию данных (PGDATA) и может быть запущен на отдельном порту.
Ручная настройка (для Red Hat-подобных систем и общего понимания):
Для систем на основе Red Hat (CentOS, RHEL, Fedora) или в случаях, когда pg_createcluster недоступен, мы можем настроить несколько экземпляров вручную. Это часто включает создание отдельных файлов конфигурации для каждого экземпляра, где указываются уникальные значения для PGDATA (путь к директории данных) и PGPORT (номер порта). Затем каждый экземпляр запускается как отдельный сервис или с помощью скриптов init.d, указывающих на свои конфигурационные файлы.
Ключевые моменты при ручной настройке:
Отдельные директории PGDATA: Для каждого кластера создаем свою уникальную директорию для хранения данных.
Отдельные порты: Каждый кластер должен прослушивать свой уникальный TCP-порт (например, 5432, 5433, 5434).
Отдельные файлы конфигурации: Для каждого кластера создаем свои postgresql.conf и pg_hba.conf.
Инициализация базы данных: Каждый новый PGDATA должен быть инициализирован с помощью команды initdb.
Для оптимальной работы Postgres Pro с решениями 1С требуется внимательная настройка. Мы рассмотрим ключевые шаги, которые помогут вам адаптировать СУБД под специфику 1С.
Если вы хотите разместить базу данных на другом дисковом массиве (например, для повышения производительности или увеличения объема), нам потребуется изменить путь к директории данных PGDATA.
Примонтируйте носитель: Убедитесь, что новый дисковый массив примонтирован к вашей системе. Например, добавьте запись в файл /etc/fstab:
UUID=fkel90-jnkj-kjnkjvk-xxxxxx /data/bazas ext4 defaults,noatime,nodiratime 0 0
Здесь UUID — уникальный идентификатор вашего диска, /data/bazas — точка монтирования, ext4 — файловая система, а defaults,noatime,nodiratime 0 0 — опции монтирования.
Создайте каталог и выдайте права: Создайте каталог для данных PostgreSQL на новом носителе и выдайте ему права для пользователя postgres (или того пользователя, от имени которого работает сервер PostgreSQL):
sudo mkdir -p /data/bazas/pgdata
sudo chown -R postgres:postgres /data/bazas/pgdata
Измените параметр PGDATA: Найдите файл конфигурации сервиса Postgres Pro (например, /etc/default/postgrespro-1c-17 или аналогичный для вашей версии) и измените значение параметра PGDATA на новый путь:
# Пример содержимого файла /etc/default/postgrespro-1c-17
# Исходное значение
# PGDATA=/var/lib/pgpro/1c-17/data
# Измененное значение
PGDATA=/data/bazas/pgdata
Очистите и переинициализируйте базу данных: После изменения пути необходимо очистить старые данные (если они были) и переинициализировать базу данных с помощью initdb. Это критически важно для создания новой структуры данных в новой директории. Убедитесь, что вы указываете правильную кодировку и локаль:
sudo -u postgres /opt/pgpro/1c-17/bin/initdb -D /data/bazas/pgdata --encoding=UTF-8 --locale=ru_RU.UTF-8
Важно: Убедитесь, что русская локаль (например, ru_RU.UTF-8) установлена в вашей системе и является активной локалью для пользователя postgres. Команда initdb по умолчанию использует настройки локали из окружения, но их всегда лучше явно задавать.
Для обеспечения возможности подключения к PostgreSQL извне (например, с сервера 1С) необходимо корректно настроить сетевые параметры и правила файрвола.
Проверим статус UFW: В Linux часто используется файрвол UFW (Uncomplicated Firewall). Давайте проверим его статус:
sudo systemctl status ufw
Если UFW активен, нам потребуется открыть порт.
Откроем порты: Откроем стандартный порт PostgreSQL (по умолчанию 5432) для входящих подключений. Мы можем разрешить подключение со всех IP-адресов или, что безопаснее, только с определенных IP-адресов или подсетей, с которых будут подключаться серверы 1С:
# Разрешить подключение со всех IP (менее безопасно)
sudo ufw allow 5432/tcp
# Разрешить подключение только с конкретного IP-адреса (например, 192.168.1.100)
sudo ufw allow from 192.168.1.100 to any port 5432
Настроим postgresql.conf: В файле postgresql.conf найдите параметр listen_addresses. По умолчанию он может быть установлен в localhost, что разрешает только локальные подключения. Измените его, чтобы разрешить удаленные TCP/IP подключения:
# Разрешить прослушивание всех доступных IP-интерфейсов
listen_addresses = '*'
# Или указать конкретные IP-адреса, например, 'localhost, 192.168.1.10'
# listen_addresses = 'localhost, 192.168.1.10'
Иногда после автоматического тюнинга этот параметр может быть раскомментирован. Обратите внимание, что в конфиге могут добавляться новые строки, и система исполняет только самые последние в конфиге значения.
Настроим pg_hba.conf: Этот файл управляет аутентификацией клиентов. Нам нужно добавить запись, разрешающую подключение с сервера 1С. В секцию # IPv4 local connection или в конец файла добавьте строку, указывающую разрешенный IP-адрес и метод аутентификации:
host all all 192.168.1.xxx/32 scram-sha-256
Здесь 192.168.1.xxx/32 — это IP-адрес сервера 1С, с которого идет подключение к базе данных PostgreSQL.
Метод аутентификации SCRAM-SHA-256 является более безопасным по сравнению с устаревшим MD5. Он предотвращает перехват паролей и хранит их на сервере в криптографически хешированной форме. Postgres Pro поддерживает этот метод начиная с 10-й версии.
Включим SCRAM-SHA-256: В файле postgresql.conf установите параметр:
password_encryption = scram-sha-256
Обновим пароли пользователей: После изменения параметра необходимо обновить пароли всех пользователей, даже если они остаются прежними. Это заставит PostgreSQL перехешировать пароли с использованием нового метода. Для этого можно подключиться к базе данных и выполнить команду ALTER USER:
ALTER USER someuser WITH PASSWORD 'new_password';
Изменим метод аутентификации в pg_hba.conf: Как мы уже видели выше, в файле pg_hba.conf необходимо указать scram-sha-256 в качестве метода аутентификации для соответствующих записей.
Для достижения оптимальной производительности 1С на Postgres Pro, нам потребуется скорректировать некоторые параметры в postgresql.conf. Рассмотрим ключевые из них:
max_connections: Увеличьте количество максимально разрешенных одновременных подключений. Для 1С часто рекомендуется устанавливать значения от 500 до 1000 и более, в зависимости от количества пользователей и характера нагрузки.
temp_buffers: Увеличьте размер буфера для временных таблиц. Например, до 32MB. Это может улучшить производительность запросов, использующих временные таблицы.
max_locks_per_transaction: Установите более высокое значение, например, 256 или выше. Этот параметр определяет максимальное количество блокировок, которые может удерживать одна транзакция, что важно для сложных операций в 1С.
effective_cache_size: Установите этот параметр не менее чем в половину доступной оперативной памяти на сервере. Он помогает оптимизатору запросов принимать более правильные решения о том, какие данные, скорее всего, находятся в кеше ОС.
standard_conforming_strings: Отключите этот параметр, установив его в off. Это может быть необходимо для совместимости со строками в 1С.
escape_string_warning: Также рекомендуется отключить, установив в off.
Использование pgpro_tune: Компания Postgres Professional предоставляет утилиты, такие как pgpro_tune, которые могут помочь с автоматической базовой настройкой Postgres Pro, исходя из характеристик оборудования и предполагаемых нагрузок. В будущих версиях могут появиться предустановленные наборы настроек специально для 1С.
Важно: После любых изменений в postgresql.conf или pg_hba.conf необходимо перезапустить сервис PostgreSQL, чтобы изменения вступили в силу.
Эффективный просмотр логов является ключом к быстрой диагностике и устранению проблем. В Linux для работы с системными журналами, включая логи Postgres Pro, мы часто используем утилиту journalctl.
Основные команды journalctl для работы с логами сервиса Postgres Pro (например, postgrespro-1c-17.service):
Просмотр логов в реальном времени: Эта команда позволяет нам наблюдать за логами по мере их появления, что очень удобно при поиске ошибок во время запуска или выполнения операций.
sudo journalctl -u postgrespro-1c-17.service -f
Просмотр всех логов с начала загрузки журнала: Используйте эту команду, чтобы увидеть полную историю логов сервиса.
sudo journalctl -u postgrespro-1c-17.service
Просмотр логов за сегодня: Если проблема возникла недавно, эта команда поможет нам сфокусироваться на актуальных событиях.
sudo journalctl -u postgrespro-1c-17.service --since today
Просмотр только ошибок: Для быстрой фильтрации и выявления критических проблем мы можем использовать флаг -p err.
sudo journalctl -u postgrespro-1c-17.service -p err
sudo journalctl -u postgrespro-1c-17.service -p err --since today
Просмотр логов за определенный период: Если вы знаете точное время возникновения проблемы, эта команда поможет вам проанализировать события в заданном временном интервале.
sudo journalctl -u postgrespro-1c-17.service --since "2025-08-19 00:00:00" --until "2025-08-21 23:59:59"
Дополнительные рекомендации по логированию:
Защита логов: Логи сервера могут содержать конфиденциальную информацию. Убедитесь, что они защищены от несанкционированного доступа. journalctl ограничивает доступ к логам членам определенных групп операционной системы, таких как adm, systemd-journal и wheel.
Ротация логов: Настройте ротацию логов, чтобы избежать переполнения диска и обеспечить управление старыми файлами журналов. Это обычно настраивается через logrotate или механизмы systemd-journald.
Надеемся, что это подробное руководство поможет вам успешно установить, настроить и управлять Postgres Pro для ваших решений 1С на Linux, а также эффективно диагностировать и решать возникающие проблемы.
← К списку