Настройка пула соединений
Установка pgbouncer
sudo apt-get install pgbouncer
Логи
tail -f /var/log/postgresql/pgbouncer.log
Конфиг. Основные параметры Указываем дефолтный сервер
vim /etc/pgbouncer/pgbouncer.ini
;; database name = connect string
;;
;; connect string params:
;; dbname= host= port= user= password=
;; client_encoding= datestyle= timezone=
;; pool_size= connect_query=
[databases]
* = host=localhost port=5432
Настройка способа соединения
- session - сессия удерживается клиентом пока не закроется соединение
- transaction - соединение возвращается в общий пул после завершения транзакции
- statment - соединение освобождается после выполнения каждого отдельного стейтмента
; When server connection is released back to pool:
; session - after client disconnects
; transaction - after transaction finishes
; statement - after statement finishes
pool_mode = transaction
Настройка пула Указываем максимальное кол-во одновременных клиентов
; total number of clients that can connect
max_client_conn = 1000
Значение max_client_conn, в pgbouncer, не должно превышать значения max_connections в postgres
Настройки аунтефикации
; any, trust, plain, crypt, md5
auth_type = md5
;auth_file = /8.0/main/global/pg_auth
auth_file = /etc/pgbouncer/userlist.txt
Доступ к админке pgbouncer
admin_users = postgres
Параметр `auth_type`, по умолчанию trust, т.е. pgbouncer будет пускать в базу всех без пароля
/etc/pgbouncer/userlist.txt
содержит имена и пароли по которым pgbouncer подключается к БД.
Его можно сделать вручную
echo -n "test12avis" | md5sum | awk '{print "md5"}'
md5b569f63db7a099534ce9ae73f0c16e70
sudo vim /etc/pgbouncer/userlist.txt
"avis" "md5b569f63db7a099534ce9ae73f0c16e70"
Либо с помощью psql
postgres=# \o users.txt
postgres=# \t
Tuples only is on.
postgres=# select '"' || rolname || '" "' || rolpassword || '"' from pg_authid;
postgres=# \q
postgres@ubuntu:~cat users.txt
"bar" "md55426824942db4253f87a1009fd5d2d4f"
"avis" "md5b569f63db7a099534ce9ae73f0c16e70"
Запуск pgbouncer
sudo chown postgres:postgres pgbouncer.ini
sudo -iu postgres
pgbouncer -d /etc/pgbouncer/pgbouncer.ini
2019-01-07 18:56:38.480 3914 LOG File descriptor limit: 1024 (H:1048576), max_client_conn: 1000, max fds possible: 1010
Проверяем соединение
psql -p 6432 -d dvdrental -U avis
Password for user avis:
psql (9.5.12)
Type "help" for help.
dvdrental=#
tail -f /var/log/postgresql/pgbouncer.log
2019-01-07 19:26:53.353 4581 LOG C-0xa6b550: (nodb)/(nouser)@unix(4592):6432 registered new auto-database: db = dvdrental
2019-01-07 19:26:53.354 4581 LOG C-0xa6b550: dvdrental/avis@unix(4592):6432 login attempt: db=dvdrental user=avis tls=no
2019-01-07 19:26:53.355 4581 LOG C-0xa6b550: dvdrental/avis@unix(4592):6432 closing because: client unexpected eof (age=0)
2019-01-07 19:26:56.744 4581 LOG C-0xa6b550: dvdrental/avis@unix(4592):6432 login attempt: db=dvdrental user=avis tls=no
2019-01-07 19:26:56.746 4581 LOG S-0xa70200: dvdrental/avis@127.0.0.1:5432 new connection to server (from 127.0.0.1:41824)
Подключение к админке pgboucer-а
sudo vim /etc/pgbouncer/pgbouncer.ini
admin_users = pgbouncer
echo -n "pgbpgbouncer" | md5sum | awk '{print "md5"}'
md5def3006d3446137225418cbeafd31885
sudo vim /etc/pgbouncer/users.txt
"pgbouncer" "md5def3006d3446137225418cbeafd31885"
sudo service pgbouncer restart
psql -p 6432 -U pgbouncer pgbouncer
Password for user pgbouncer:
psql (9.5.12, server 1.7/bouncer)
Type "help" for help.
pgbouncer=#
pgbouncer=# show version;
NOTICE: pgbouncer version 1.7 (Debian)
SHOW
Пароль - pgb