PostgreSQL資料庫連接池Pgbouncer的搭建

來源:互聯網
上載者:User

 

 

作者:何偉平
來源:http://www.pgsqldb.org/mwiki/index.php/Pgbouncer%E6%90%AD%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0 

 

 

 

最近有些項目我們是採用PostgreSQL進行後端資料庫,由於要對用戶端的串連使用類型和串連數進行控制,因此我們採用PgBouncer來進行實施。

PgBouncer相關的基本文檔pgsqldb中文站已經有不少文檔,這裡我就不再作過多的說明,我將集中對其中的幾個要點和我實踐中遇到的問題和大家分享一下。

OK,肺話也不多少,開始正題吧;D

 

 

gBouncer介紹
  • 什麼是PgBouncer?

PgBouncer是一個輕量級的資料庫連接池。download

  • PgBouncer的作用
  1. PgBouncer可以在後端資料庫和前端應用間建立串連的橋樑,由PgBouncer去處理和後端資料庫的串連關係。
  2. 對用戶端串連進行限制,預防過多或者惡意的串連請求。
  • PgBouncer的特點
  1. 記憶體消耗低(預設為2k/串連),因為Bouncer不需要每次都接受完整的資料包
  2. 可以把不同的資料庫連接到一個機器上,而對用戶端保持透明
  3. 支援線上的重新設定而無須重啟
  4. 僅支援V3協議,因此後端版本須>=7.4

 

開始使用PgBouncer
  • 基本ini檔案配置(假設我們建立了新的ini檔案/usr/local/pgsql/conf/pgbouncer.ini)

1. 添加目標資料庫的連接字串,這個表示PgBouncer將會在哪些後端資料庫中建立串連,比如:

template1 = host=127.0.0.1 port=5432 dbname=template1

2. 設定PgBouncer的監聽連接埠, port=5555,預設為6000

3. 建立使用者列表檔案並添加使用者資訊,此使用者為允許用戶端使用的串連使用者名稱,比如:

A. zhaoyi@zhaoyi-laptop:[~]$ echo "user" "password" > /usr/local/pgsql/user.txtB. 在ini設定:auth_file = /usr/local/pgsql/user.txt

4. 建立admin使用者,在配置中添加:admin_users = user,使用者可以使用此使用者名稱串連pgbouncer並查看健全狀態等,注意:此使用者必須為user.txt檔案中已經存在的使用者。

  • 啟動並測試連接/查看健全狀態

1. 啟動:pgbouncer -d pgbouncer.ini

2. 測試連接:psql -h 127.0.0.1 -p 6000 -U user template1

3. 通過admin使用者串連pgbouncer查看配置:

psql -h 127.0.0.1 -p 6000 -U user pgbouncerpgbouncer=# show config;

3. 通過admin使用者串連pgbouncer查看運行情況:

pgbouncer=# show stats;pgbouncer=# show lists; pgbouncer=# show pools;pgbouncer=# show databases;#其餘運行參數可以通過如下命令查看pgbouncer=# show help;

4. 參數修改:如果修改了ini檔案中相關參數,需要通過命令告知bouncer重新讀取配置內容:

pgbouncer=# reload;
  

PgBouncer連線類型
  1. 會話池串連:即以一個session為生命期,當用戶端斷開的時候,才斷開並釋放串連回串連池
  2. 事務串連:伺服器串連只是在一個事務的過程裡賦予用戶端的
  3. 語句串連:在每個查詢結束之後,伺服器的串連都會立即放回串連池。在這種模式下將不允許多語句的事務。否則,會給出如下提示,比如
test=# begin; ERROR:  Long transactions not allowed   server closed the connection unexpectedly   This probably means the server terminated abnormally   before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded.

用戶端串連方式

這裡我簡單說明一下用戶端不同串連方式時伺服器端的處理方式,以perl中為例:

$dbh = DBI -> connect('dbi:Pg:dbname=test;host=127.0.0.1;port=6000', 'postgres', ' ' ) or die $DBI::errstr;
  1. 用戶端為AutoCommit時,transaction類型 = statements類型
  2. pool類型為transaction類型,如果用戶端不為AutoCommit時,必須顯示Commit,否則串連不釋放
  3. pool類型為statements類型時,串連不支援長語句,因此用戶端必須AutoCommit,否則依然會報錯

AutoCommit配置為:

{'AutoCommit' => 0}

串連參數配置及用戶端狀態
  • max_client_conn
  1. 這個為允許用戶端串連的最大數目
  2. 你可以通過show clients進行查看,當客戶段串連大於此設定時,用戶端會得到類似如下資訊:
 psql: ERROR:  no more connections allowed
  • default_pool_size
  1. 這個為當前串連池中允許的最大處理串連
  2. 比如default_pool_size=3,如果在串連池沒有空餘串連的情況下,如果已經串連的用戶端嘗試通過PgBouncer向後端執行查詢請求,則用戶端會一直處理等待狀態,當有空餘的串連釋放時,比如其他的用戶端中斷連線時,PgBouncer才會把此請求放如串連池中,向後端提出服務要求,後端收到請求後,才執行請求返回結果,比如
 template1=# select * from test; --no result

以上測試都是基於 pgbouncer version 1.1.1 + psql (PostgreSQL) 8.3.3

 

相關文檔
  • Config file documentation
  • Usage document
  • 使用者手冊
  • 管理員手冊

  相關參考:
http://pgfoundry.org/projects/pgbouncer/ 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.