前提:php
一、請肯定postgresql能夠訪問(遠程),postgres用戶密碼是否修改,不然pgpool沒法驗證經過html
二、安裝必要的安裝包,pgxs,pcp,apt-get install postgresql-server-dev-9.5,不然會報pgxs的錯誤算法
參考:sql
中文(還好蠻新):http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-zh_cn.html數據庫
英文(官網):http://www.pgpool.net/docs/latest/pgpool-en.html#install vim
下載:http://pgpool.net/mediawiki/index.php/Downloads緩存
配置:安全
一、tar zxvf 解壓,./configure編譯bash
若是你須要非默認的值,有如下選項能夠設置:ide
--prefix=path
pgpool-II 的二進制程序和文檔將被安裝到這個目錄。默認值爲 /usr/local
--with-pgsql=path
PostgreSQL 的客戶端庫安裝的頂層目錄。默認值由 pg_config
提供
--with-openssl
pgpool-II 程序將提供 OpenSSL 支持。默認是禁用 OpenSSL 支持的。
--enable-sequence-lock
在 pgpool-II 3.0 系列中使用 insert_lock 兼容。pgpool-II 針對序列表中的一行進行加鎖。PostgreSQL 8.2 或2011年六月之後發佈的版本沒法使用這種加鎖方法。
--enable-table-lock
在 pgpool-II 2.2 和 2.3 系列中使用 insert_lock 兼容。pgpool-II 針對被插入的表進行加鎖。這種鎖由於和 VACUUM 衝突,已被廢棄。
二、 make、make install
三、安裝 pgpool_regclass
若是你在使用 PostgreSQL 8.0 或以後的版本,強烈推薦在須要訪問的 PostgreSQL 中安裝 pgpool_regclass 函數,由於它被 pgpool-II 內部使用。若是不這樣作,在不一樣的 schema 中處理相同的表名會出現問題(臨時表不會出問題)。
cd pgpool-II-x.x.x/sql/pgpool-regclass make make install psql -f pgpool-regclass.sql template1
應在在每臺經過 pgpool-II 訪問的數據庫中執行 pgpool-regclass.sql。你不須要在你執行「psql -f pgpool-regclass.sql template1」後創建的數據庫中這麼作,由於這個模板數據庫將被克隆成新建的數據庫。
四、創建 insert_lock 表
若是你在複製模式中使用了 insert_lock ,強烈推薦創建 pgpool_catalog.insert_lock 表,用於互斥。到如今爲止,insert_lock 還可以工做。可是,在這種狀況下,pgpool-II 須要鎖定插入的目標表。這種行爲和 pgpool-II 2.2 和 2.3 系列相似。表鎖與 VACUUM 衝突,因此 INSERT 操做可能於是等待很長時間。
cd pgpool-II-x.x.x/sql psql -f insert_lock.sql template1(可能會提示報錯,無所謂,那是sql腳本正常報錯)
應在在每臺經過 pgpool-II 訪問的數據庫中執行 insert_lock.sql。你不須要在你執行「psql -f insert_lock.sql template1」後創建的數據庫中這麼作,由於這個模板數據庫將被克隆成新建的數據庫。
五、配置pcp.conf(其實這兒的用戶名就用數據庫自身的便可,密碼用select * from pg_shadow查到的md5,下面的方法貌似加密算法不對)
pgpool-II 有一個控制接口,管理員能夠經過它遠程收集 pgpool-II 的狀態信息或者終止 pgpool-II 進程。 pcp.conf
是用於這個接口認證的用戶/密碼文件。全部的模式都須要先設置 pcp.conf
文件。一個$prefix/etc/pcp.conf.sample
文件在 pgpool-II 安裝時已經被建立。重命名這個文件爲 pcp.conf
並添加你要的用戶名和密碼到其中。
cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf
空行或者以「#
」開始的行將被認爲是註釋,會被忽略掉。一個用戶名和對應的密碼必須以如下的方式寫成一行。
username:[password encrypted in md5]
[password encrypted in md5]
能夠經過 $prefix/bin/pg_md5
命令生成。
pg_md5 -p password: <your password>
或者
./pg_md5 foo acbd18db4cc2f85cedef654fccc4a4d8
六、配置pgpool.conf
就像以前說的,每種操做模式在 pgpool.conf
文件中有它對應的配置項。一個 $prefix/etc/pgpool.conf.sample
文件在 pgpool-II 安裝時已經被建立。重命名這個文件爲 pgpool.conf
並修改它的內容。
cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf
#公共設置 listen_addresses:改成* port:默認9999,建議改成5432 pcp_listen_addresses:改成* backend_hostname0:數據庫host backend_port0:端口 backend_data_directory0:數據主目錄 pid_file_name:(這裏默認是放在/var/run/pgpool目錄的,可是多是程序BUG,每次啓動後不會本身建立,須要/etc/rc.local啓動的時候mkdir下,不然自啓動有問題) connection_life_time = 450#緩存的鏈接的過時時長,單位爲秒。過時的緩存鏈接將被關閉。默認值爲 0,表示緩存的鏈接將不被關閉 client_idle_limit = 300#多長時間不執行sql鏈接超時斷開
七、其餘
a.配置自啓動
vim /etc/rc.local pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf
b.關閉
pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf stop #若是客戶端有鏈接保持,將一直等待。。。若是直接Kill會致使pid文件沒法釋放,緊急處理不建議用此方法 #或者 pgpool -m fast stop#該方法無論客戶端有無鏈接直接關閉,維護時推薦!
c.DEBUG模式
pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf -dn
d.開啓日誌
在日誌 /etc/rsyslog.conf 加入如下行
local0.* /var/log/pgpool.log
重啓 rsyslog 服務
/etc/init.d/rsyslog restart
pgpool.conf 配置如下行
log_destination = 'syslog'
備註: 這裏使用 syslog。
e.黑白名單
鏈接池開啓必須打開enable_pool_hba=on,該文件又關聯了pool_hba.conf
local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 md5 host all all 0.0.0.0/0 md5
這裏須要很是注意,pg那邊除了流複製規則,其餘也參考該規則來,不然有的鬱悶
注:以前配置PGHA後使用pgpool做爲鏈接池,後面配置PG的主備機,必定要配置成內網IP,千萬不要配置爲127.0.0.1或者localhost,不然根據上面的規則那就是隻要猜對數據庫和用戶名就能無密碼登錄。。。大大的安全問題!
配置完pool_hba.conf後,有些遠程訪問的用戶就須要md5加密過的密碼才能登錄(對應pool_hba.conf中md5的規則),這裏就須要用戶和加密過的密碼在pool_passwd文件有登記,經過下面的命令便可在本地生成,注意這個密碼也只能是數據庫自身的用戶和密碼
pg_md5 -u postgres -p -m more pool_passwd#查看是否登記成功