1 介紹
pgbouncer是一個PostgreSQL連接池。任何目標應用程序都可以像連接PostgreSQL服務器一樣連接到pgbouncer,並且pgbouncer將創建到實際服務器的連接,或者重用其現有的連接。
pgbouncer的目的是降低打開新連接到PostgreSQL的性能影響。
為了不影響連接池的事務語義,pgbouncer在旋轉連接時支持幾種類型的池:
- Session pooling:最有禮貌的方法。當客戶端連接時,服務器連接將在整個客戶端連接期間分配給它。當客戶端斷開連接時,服務器連接將被放回池中。這是默認方法。
- Transaction pooling:服務器連接只在事務期間分配給客戶端。當PgBouncer注意到事務結束時,服務器連接將被放回池中。
- Statement pooling:最積極的方法。查詢完成后,服務器連接將立即放回池中。在此模式下不允許多語句事務,因為它們會中斷。
提示:對於使用了綁定變量的客戶端,需使用session pooling,因為session pooling模式中需要保存並復用named prepared statemen的信息。
pgcouncer下載地址:http://www.pgbouncer.org/downloads/
2 安裝
操作系統:CentOS 7.6
安裝依賴包
[root]# yum install -y openssl openssl-devel libevent libevent-devel
源碼安裝pgbouncer
[root]# wget http://www.pgbouncer.org/downloads/files/1.16.1/pgbouncer-1.16.1.tar.gz
[root]# tar -zxvf pgbouncer-1.16.1.tar.gz
[root]# cd pgbouncer-1.16.1
[root]# ./configure --prefix=/usr/local/
[root]# make && make install
或者通過YUM安裝
[root]# yum install pgbouncer -y
查看pgbouncer版本
[root]# pgbouncer -V
PgBouncer 1.14.0
libevent 2.0.21-stable
adns: evdns2
tls: OpenSSL 1.0.2k-fips 26 Jan 2017
3 配置及使用
3.1 創建pgbouncer.ini
[root]# mkdir -p /etc/pgbouncer
[root]# vi /etc/pgbouncer/pgbouncer.ini
[databases]
template1 = host=10.150.57.9 port=5432 dbname=postgres user=postgres
[pgbouncer]
listen_port = 6432
listen_addr = 10.150.57.9
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
logfile = /etc/pgbouncer/pgbouncer.log
pidfile = /etc/pgbouncer/pgbouncer.pid
admin_users = postgres
stats_users = pgmon
server_reset_query = DISCARD ALL
server_check_query = select 1
server_check_delay = 30
max_client_conn = 5000
default_pool_size = 20
reserve_pool_size = 5
dns_max_ttl = 15
注釋:
template1是通過pgbouncer連接池連接postgres數據庫的虛擬庫名。
3.2 配置userlist.txt文件
[root]# vi /etc/pgbouncer/userlist.txt
"postgres" "Psswd@123"
"gaoyu" "Passwd@123"
注釋:
只有userlist.txt文件中的用戶才能通過pgbouncer連接池連接PostgreSQL。
3.3 啟動pgbouncer
[root]# pgbouncer -d /etc/pgbouncer/pgbouncer.ini
3.4 通過pgbouncer連接PG
[postgres]# psql -h 10.150.57.9 -p 6432 -U postgres template1
Password for user postgres:
psql (9.6.0)
Type "help" for help.
template1=#
4 管理pgbouncer
pgbouncer有一個console控制台,可以通過連接pgbouncer數據庫進行管理。只有配置了admin_user/admin_users的用戶才能登錄,或者auth_type=any則代表任何用戶都可以登錄console。
連接console
[postgres]# psql -p 6432 -U postgres pgbouncer
Password for user postgres:
psql (9.6.0, server 1.16.1/bouncer)
Type "help" for help.
pgbouncer=#
重新加載pgbouncer.ini
pgbouncer=# reload
show users
pgbouncer=# show users;
name | pool_mode
-----------+-----------
pgbouncer |
postgres |
show databases
pgbouncer=# show databases;
-[ RECORD 1 ]-------+------------
name | pgbouncer
host |
port | 6432
database | pgbouncer
force_user | pgbouncer
pool_size | 2
min_pool_size | 0
reserve_pool | 0
pool_mode | statement
max_connections | 0
current_connections | 0
paused | 0
disabled | 0
-[ RECORD 2 ]-------+------------
name | template1
host | 10.150.57.9
port | 5432
database | postgres
force_user | postgres
pool_size | 20
min_pool_size | 0
reserve_pool | 0
pool_mode |
max_connections | 0
current_connections | 0
paused | 0
disabled | 0