1. 程式人生 > >PostgreSQL 之 同步流複製的實現

PostgreSQL 之 同步流複製的實現

同步複製要求在資料寫入Standby資料庫後,事務的commit才返回,所以Standby庫出現問題時,會導致主庫被hang住。

解決這個問題的方法是啟動兩個Standby資料庫,這兩個standby資料庫只要有一個是正常的,就不會讓主庫hang住。所以在實際應用中,同步流複製,總是有1個主庫和2個以上的Standby庫。

同步複製的主要配置

實現同步複製主要是在主庫上設定postgresql.conf配置引數synchronous_standby_names

這個引數指定多個Standby的名稱,各個名稱通過逗號分隔,而Standby名稱是在Standby連線到主庫時,由連線引數"application_name"

指定的。

示例:主庫修改postgresql.conf

vi postgresql.conf

synchronous_standby_names = 'standby01,standby02'

同步複製的主要配置

要使用同步複製,在Standby資料庫的recovery.conf裡的primary_conninfo一定要指定連線引數"application_name"

從節點recovery.conf的配置示例:

------

standby_mode = 'on'

primary_conninfo = 'application_name=standby01 user=repl password=111111 host=192.168.137.220 port=1921 sslmode=disable sslcompression=1'

會話級別控制非同步、同步複製

當主庫已配置引數synchronous_standby_names = standby01 *

會話執行:set synchronous_commit = off;  

當前會話可以取消同步複製,改為非同步複製。

當主庫註釋配置引數synchronous_standby_names =

會話執行:set synchronous_commit = on ;  不起作用

by 波羅