PgBouncer улучшает производительность PostgreSQL в условиях высокой нагрузки

Приложения и игры / Desktop / PgBouncer улучшает производительность PostgreSQL в условиях высокой нагрузки
05.07.2024

Эффективное управление подключениями к базе данных имеет решающее значение для поддержания производительности и надежности ваших экземпляров PostgreSQL. Производительность PostgreSQL может ухудшаться при чрезмерном количестве одновременных подключений, что делает решения для пула подключений, такие как PgBouncer, необходимыми для сред с высоким трафиком. В этой статье мы рассмотрим шаги по настройке PgBouncer, легковесного пулера подключений для PostgreSQL, и его конфигурации для оптимизации подключений к базе данных.

Почему стоит использовать PgBouncer?

PostgreSQL может эффективно обрабатывать ограниченное количество одновременных подключений. Рекомендуется устанавливать максимальное количество подключений ниже 10 на одно ядро ЦП, с максимальным пределом в 20 на одно ядро ЦП. Если вашему приложению необходимо обрабатывать больше сеансов пользователей, использование пулера подключений, такого как PgBouncer, становится необходимым. PgBouncer снижает накладные расходы на установление и закрытие подключений за счет повторного использования пула установленных подключений.

Предварительные требования

Прежде чем начать, убедитесь, что у вас установлены следующие зависимости:

  • PostgreSQL
  • Python3 с psycopg2

Вы можете установить эти зависимости с помощью следующих команд:

dnf install python3-psycopg2-2.9.9-1PGDG.rhel9.x86_64.rpm # Зависимость
dnf install pgbouncer-1.22.1-42PGDG.rhel9.x86_64.rpm

Настройка PgBouncer

  1. Настройка аутентификации пользователей

    Сначала создадим файл userlist для управления аутентификацией пользователей в PgBouncer.

    psql -Atq -h 10.*.**.** -p 5432 -U postgres -d postgres -c "SELECT concat('"', usename, '" "', passwd, '"') FROM pg_shadow" >> /etc/pgbouncer/userlist.txt
  2. Редактирование конфигурации PgBouncer

    Далее настроим файл pgbouncer.ini. Откройте файл в вашем любимом текстовом редакторе:

    vi /etc/pgbouncer/pgbouncer.ini

    Добавьте следующую конфигурацию:

    [databases]
    * = port=5432
    
    [pgbouncer]
    pool_mode = session
    listen_addr = 10.5.**.**
    default_pool_size = 100
    reserve_pool_size = 20
    max_client_conn = 500
    admin_users = postgres
    ignore_startup_parameters = extra_float_digits
    logfile = /var/log/pgbouncer/pgbouncer.log
    pidfile = /var/run/pgbouncer/pgbouncer.pid
    listen_port = 6432
    auth_file = /etc/pgbouncer/userlist.txt
    client_tls_sslmode = require
    client_tls_ca_file = /etc/pgbouncer/root.crt
    client_tls_key_file = /etc/pgbouncer/pgbouncer.key
    client_tls_cert_file = /etc/pgbouncer/pgbouncer.crt
  3. Перезапуск и включение PgBouncer

    После редактирования конфигурации перезагрузите и перезапустите службу PgBouncer для применения изменений:

    systemctl restart pgbouncer
    systemctl enable pgbouncer

    Вы можете проверить статус службы PgBouncer, чтобы убедиться, что она работает правильно:

    systemctl status pgbouncer
  4. Подключение к PgBouncer

    Теперь вы можете выполнять операции с базой данных через порт PgBouncer:

    psql -p 6432

    Для подключения к интерфейсу управления PgBouncer:

    psql -p 6432 pgbouncer
  5. Мониторинг и управление PgBouncer

    Для мониторинга управления пулом:

    show pools;

    Для просмотра статистики:

    show stats;

    Для получения дополнительных команд вы можете обратиться к:

    psql -Atq -h 10.*.**.** -p 5432 -U postgres -d postgres -c "SELECT concat('"', usename, '" "', passwd, '"') FROM pg_shadow" >> /etc/pgbouncer/userlist.txt
  6. Обновление системных лимитов

    Наконец, обновите файл службы systemd для увеличения лимитов файловых дескрипторов. Чтобы PgBouncer мог обрабатывать большое количество одновременных подключений, необходимо увеличить лимиты файловых дескрипторов. Файловые дескрипторы являются важными ресурсами, используемыми операционной системой для управления открытыми файлами и сокетами. Каждое подключение к базе данных через PgBouncer потребляет файловый дескриптор. Если лимит слишком низок, PgBouncer не сможет принять дополнительные подключения.

Эти шаги помогут вам настроить и оптимизировать PgBouncer для эффективного управления подключениями к базе данных PostgreSQL в высоконагруженных средах.

Обновлено: 05.07.2024