PGBouncer — программа, управляющая пулом соединений PostgreSQL. Любое конечное приложение может подключиться к PGBouncer, как если бы это был непосредственно сервер PostgreSQL. PGBouncer создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений.
Назначение PGBouncer — минимизировать издержки, связанные с установлением новых подключений к PostgreSQL. Вы также можете ознакомиться с руководством в официальной документации PGBouncer.
Установка состоит из нескольких этапов:
- Установка PGBouncer
- Настройка PGBouncer
- Добавление пользователей
- Задание LimitNOFILE в файле pgbouncer.service
Установите PGBouncer на узел с PostgreSQL, используя следующую команду:
sudo apt-get install pgbouncer -y
-
Переместите конфигурационный файл по умолчанию:
sudo mv /etc/pgbouncer/pgbouncer.ini{,.original} -
Создайте и откройте для редактирования новый конфигурационный файл:
sudo nano /etc/pgbouncer/pgbouncer.ini -
Добавьте пример конфигураций в файл:
[databases]postgres = host=127.0.0.1 port=5432 dbname=vkdb* = host=127.0.0.1 port=5432[pgbouncer]logfile = /var/log/postgresql/pgbouncer.logpidfile = /var/run/postgresql/pgbouncer.pidlisten_addr = *listen_port = 6432unix_socket_dir = /var/run/postgresqlauth_type = md5auth_file = /etc/pgbouncer/userlist.txtadmin_users = postgresignore_startup_parameters = extra_float_digits,geqopool_mode = sessionserver_reset_query = DISCARD ALLmax_client_conn = 10000default_pool_size = 800reserve_pool_size = 150reserve_pool_timeout = 1max_db_connections = 1000pkt_buf = 8192listen_backlog = 4096log_connections = 0log_disconnections = 0где:
listen_addr— список адресов через запятую, где прослушивать соединения TCP. Если вы установите *, будут прослушивать все адреса;listen_port— порт для прослушивания, по умолчанию установлено 6432;pool_mode— режим работы;auth_type— режим аутентификации пользователей;max_client_conn— максимально допустимое количество клиентских подключений;default_pool_size— размер пула открытых подключений к базам данных;reserve_pool_size— размер резервного пула открытых подключений к базам данных;max_db_connections— максимально допустимое количество открытых подключений к базам данных[databases]— определяет имена баз данных, к которым могут подключаться клиенты PgBouncer. Указывает, куда будут маршрутизироваться эти подключения.
Настройка включения TLS/SSL в PGBouncer
Для включения поддержки TLS/SSL в PGBouncer дабавьте в файл конфигурации /etc/pgbouncer/pgbouncer.ini следующие параметры:
client_tls_sslmode — задайте режим работы TLS, выставив require; client_tls_ca_file — укажите путь до файла корневого CA; client_tls_cert_file — укажите путь до файла сертификата сервера; client_tls_key_file — укажите путь до файла закрытого ключа.
[databases]postgres = host=127.0.0.1 port=5432 dbname=vkdb* = host=127.0.0.1 port=5432[pgbouncer]logfile = /var/log/postgresql/pgbouncer.logpidfile = /var/run/postgresql/pgbouncer.pidlisten_addr = *listen_port = 6432unix_socket_dir = /var/run/postgresqlauth_type = md5auth_file = /etc/pgbouncer/userlist.txtadmin_users = postgresignore_startup_parameters = extra_float_digits,geqopool_mode = sessionserver_reset_query = DISCARD ALLmax_client_conn = 10000default_pool_size = 800reserve_pool_size = 150reserve_pool_timeout = 1max_db_connections = 1000pkt_buf = 8192listen_backlog = 4096log_connections = 0log_disconnections = 0client_tls_sslmode = requireclient_tls_ca_file = /etc/ssl/certs/rootCA.pemclient_tls_key_file = /etc/ssl/private/selfsigned.keyclient_tls_cert_file = /etc/ssl/certs/selfsigned.crtПодробнее о настройке TLS/SSL в PGBouncer читайте в официальной документации PGBouncer.
Добавьте в файл /etc/pgbouncer/userlist.txt имена пользователей и пароли, с которыми PGBouncer подключается к базе. Для этого:
-
Создайте файл
userlist.txt, выполнив команду:sudo nano /etc/pgbouncer/userlist.txt -
Добавьте в файл
userlist.txtпользователя и пароль для подключения к PostgreSQL. Пользователь vkuser был ранее создан при развертывании PostgreSQL."vk" "SecretPassword"
Добавьте в файл сервиса PGBouncer в секцию Service параметр LimitNOFILE.
-
Откройте файл
/lib/systemd/system/pgbouncer.service, выполнив команду:sudo nano /lib/systemd/system/pgbouncer.service -
Задайте лимит на открытие файлов
LimitNOFILEравным15000.Пример добавления LimitNOFILE в pgbouncer.service
[Unit]Description=connection pooler for PostgreSQLDocumentation=man:pgbouncer(1)Documentation=https://www.pgbouncer.org/After=network.target#Requires=pgbouncer.socket[Service]Type=notifyUser=postgresExecStart=/usr/sbin/pgbouncer /etc/pgbouncer/pgbouncer.iniExecReload=/bin/kill -HUP $MAINPIDKillSignal=SIGINTLimitNOFILE=15000[Install]WantedBy=multi-user.target -
Перезапустите PGBouncer, выполнив команду:
sudo systemctl daemon-reloadsudo systemctl restart pgbouncer
Технический писатель: Белова Ирина