digoal
2016-10-06
postgresql , 9.6 , 同步多副本 , remote_apply , 全同步
對于金融級的應用場景,2個副本通常是不夠的,使用者可能會需要多個副本。
例如,一主4從,要求除了主以外,還需要2個同步的副本,其他可以為異步的副本。

另一方面,我們在使用資料庫時,為了擴充讀的能力,讀寫分離是比較常見的用法。
9.6以前的版本,同步複制是確定xlog已經複制到備庫,而不是已經在備庫apply,雖然apply通常都很快,可能也在毫秒級别完成,但是以前沒有apply級别的同步機制。
例如,使用者a往使用者b的賬戶彙了一筆錢,同一時間使用者b在異地馬上要看到a彙過來的錢,這種異地、異庫的讀寫分離場景,就需要主備事務級的嚴格一緻,是以9.6的remote_apply就非常有效。
還有一種場景,在主備切換時,要求備庫快速激活成和主庫一樣的狀态,也需要remote_apply級别的複制。
以上是postgresql 9.6在流複制方面的增強。
參數配置如下
synchronous_standby_names (string)
支援兩種寫法
num_sync 數字,表示同步的副本數。
沒有寫num_sync的格式相容以前的配置,表示1個副本。
standby_name是standby配置在recovery.conf中的application_name,可以使用*代替所有standby。
例子
表示2個副本為同步standby,其他為異步standby。
事物送出時,確定xlog已同步到任意2個副本(前面兩個是同步節點,後面2個是替補,目前面兩個中任意的節點出問題,後面的會依次替補上)。
手冊說明
注意standby_name隻是指定了同步的standby節點,而事務級别還有一個開關為synchronous_commit,通過配置synchronous_commit用于控制事務的同步級别,可以是異步的,也可以是同步的。
對于可靠性要求高的,可以配置為同步,否則可以為了性能配置為異步。
通過參數synchronous_commit (enum)配置事務的同步級别。
如果要配置事務或者會話級别的參數,通過以下文法
也就是說,使用者可以根據實際的業務需求,對不同的事務,設定不同的同步級别。
目前支援的同步級别如下
1. 可靠性
結合synchronous_standby_names與synchronous_commit的設定,可以實作非常靈活的事務級别可靠性的要求。
2. 讀寫分離的讀一緻性保證
當synchronous_commit=remote_apply時,這個事務産生的redo必須要在sync standby(s)已apply,才傳回給用戶端事務結束。
這類事務,事務結束後發起的讀請求,在primary以及sync standby可以做到讀寫完全一緻。
犧牲寫事務的rt,獲得在多借點的讀事務的完全一緻。
3. 切換時延
當設定了synchronous_commit=remote_apply事務同步複制級别時,可以降低切換延遲。
備庫在激活時,不需要apply redo,可以迅速的激活成為主庫。
<a href="http://info.flagcounter.com/h9v1">count</a>