PostgreSQL連接池-pgbouncer


1 介紹

pgbouncer是一個PostgreSQL連接池。任何目標應用程序都可以像連接PostgreSQL服務器一樣連接到pgbouncer,並且pgbouncer將創建到實際服務器的連接,或者重用其現有的連接。

pgbouncer的目的是降低打開新連接到PostgreSQL的性能影響。

 

為了不影響連接池的事務語義,pgbouncer在旋轉連接時支持幾種類型的池:

  • Session pooling:最有禮貌的方法。當客戶端連接時,服務器連接將在整個客戶端連接期間分配給它。當客戶端斷開連接時,服務器連接將被放回池中。這是默認方法。
  • Transaction pooling:服務器連接只在事務期間分配給客戶端。當PgBouncer注意到事務結束時,服務器連接將被放回池中。
  • Statement pooling:最積極的方法。查詢完成后,服務器連接將立即放回池中。在此模式下不允許多語句事務,因為它們會中斷。

提示:對於使用了綁定變量的客戶端,需使用session pooling,因為session pooling模式中需要保存並復用named prepared statemen的信息。

 

官網:https://www.pgbouncer.org/

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM