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 波羅