自PostgreSQL 9.0開始,添加了流複製(Streaming Repulication)。流複製源於pg早期的「同步日誌傳送複製」(Synchronous Log Shipping Repulication)--一個高可用的(HA)解決方案。html
流複製是基於事務日誌傳送的。熱備份服務器能夠經過讀取WAL記錄流來保持數據庫的當前狀態。 若是主服務器失效,那麼熱備份服務器將包含幾乎全部主服務器的數據, 並能夠迅速的將本身切換爲主服務器。這能夠是同步的或者異步的, 而且只能在整個數據庫服務器上實施。 sql
centos 32bit虛擬機兩臺;shell
說明:Primary_IP 表示主服務器IP地址數據庫
Standby_IP 表示備用服務器IP地址centos
主、備庫數據庫版本:PostgreSQL9.2.13
服務器
在主服務器中安裝PostgreSQL並初始化一個數據庫集合(備用服務器同理,能夠不初始化數據庫):異步
cd ./root/Desktop (打開安裝文件所在目錄)
./configure --prefix=/opt/pgsql92
gmake -world
gmake install
在主庫中配置../data/postgresql.confpost
vi postgresql.confspa
listen_address = '*' wal_level = hot_standby max_wal_zenders = 30 (根據實際狀況本身設置便可) archive_mode = on archive_command = 'cd'
在主庫中配置../data/pg_hba_conf文件中的參數
.net
vi pg_hba.conf
host replication all Standby_IP/32 trust #用戶可設置爲all或postgres
啓動主服務器中的PostgreSQL數據庫,執行基礎備份:
../bin/psql -U posgres
postgres#select pg_start_backup('hot_backup'); (可以使用任意符號作備份標記) postgres#\q
tar -zcvf data.tar.gz data
../bin/psql -U posgres
postgres# select pg_stop_backup();
將基礎備份拷貝到備用服務器的數據庫安裝目錄下:
scp data.tar.gz Standby_IP:/opt/pgsql922
而後解壓,做爲備庫的data目錄。
在備用服務器的PostgreSQL中配置postgresql.conf文件中的參數
vi postgresql.conf
hot_standby = on
在備用服務器PostgreSQL的data目錄下創建recovery.conf文件
vi recovery.conf
standby_mode = true primary_conninfo = 'host=Primay_IP port=5432 user=postgres password=password'
至此主、備庫安裝配置完畢,重啓主庫,而後重啓備庫。
此時備庫中的數據與主庫中一致,正常狀況下,此後對主庫修改的內容將同步到備庫。
1.必定要確保修改後的參數更新完畢,例如能夠經過postgres#show wal_level來查看wal_level的參數。若是參數沒有更新則服務器沒法運行,因此必定要保證參數更新,方法是:關閉全部postgres服務後從新啓動。 2.運行PostgreSQL數據庫後,在priamy的任何修該都會同步到standby中,standby不能對數據庫作修改只能查看。
3.必定要把防火牆關閉,不然主-備服務器沒法得到鏈接,會出現以下問題:
FATAL: could not connect to the primary server: could not connect to server: No route to host Is the server running on host "192.168.100.112" and accepting TCP/IP connections on port 5432?
關閉防火牆的方法,請參考:http://my.oschina.net/liuyuanyuangogo/blog/506221。
不一樣方案比較:http://www.postgresql.org/docs/9.2/static/different-replication-solutions.html
流複製:http://www.postgresql.org/docs/9.2/static/warm-standby.html#STREAMING-REPLICATION