PgBouncer (https://pgbouncer.github.io/) это пулер соединений для PostgreSQL. Если планируется что к базам будет много одновременных коннектов, то необходимо настраивать пулер соединений, т.к. PostgreSQL на каждое соединение создает отдельный процесс и общая производительность СУБД начинает деградировать с увеличением числа коннектов. Если планируется более 500-1000 соединений, то настраивается пулер.
Установка
sudo apt-get install pgbouncer
Настраиваем
sudo vim /etc/pgbouncer/pgbouncer.ini
;;Указываем к какой базе данных нужен доступ, можно и не конкретизировать базу тогда балансировка будет на все базы
[databases]
testdb = host=127.0.0.1 port=5432 dbname=testdb
;;Необходима иначе будет ошибка при подключение
ignore_startup_parameters = extra_float_digits
;; IP address or * which means all IPs Ну вы поняли
listen_addr = 0.0.0.0
listen_port = 5432
;;Необходима для включение механизма авторизации при методе trust pgbouncer будет пускать всех без пароля.
auth_type = md5
;;По умолчанию стоит в session, то есть, сессия будет удерживаться клиентом до тех пор, пока он не закроет соединение. Чаще всего значение имеет смысл заменить на transaction. В этом случае соединение будет возвращаться в общий пул после завершения транзакции. Значение statement означает, что соединение будет освобождаться после выполнения каждого отдельного выражения, чего вы почти наверняка не должны хотеть.
pool_mode = transaction
max_client_conn = 1000
;; Default pool size. 20 is good number when transaction pooling
;; is in use, in session pooling it needs to be the number of
;; max clients you want to handle at any moment
default_pool_size = 40
;; Minimum number of server connections to keep in pool.
;min_pool_size = 0
; how many additional connection to allow in case of trouble
reserve_pool_size = 10
Указано только минимальное количество настроек которые я поменял или добавил, но инструмент мощный нужно читать.
Настроим пользователя для подключения pgbouncer к pgsql
Получаем md5 hash от необходимого нам пользователя
sudo -u postgres psql
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# select * from pg_shadow;
usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
-----------+----------+-------------+----------+---------+--------------+-------------------------------------+----------+-----------
postgres | 10 | t | t | t | t | | |
testuser | 16384 | f | f | f | f | md55450gfd9g049t034t954 | |
(2 rows)
И правим файл с пользователями
sudo vim /etc/pgbouncer/userlist.txt
Добавляем пользователя
"testuser" "md55450gfd9g049t034t954"
Рестартим pgbouncer
sudo service pgbouncer restart