postgresql實戰(zhàn)—流復制和邏輯復制

流復制:可以從實例級復制出一個與主庫一摸一樣的從庫(也稱之為備庫)

流復制同步方式有同步、異步兩種,如果主節(jié)點和備節(jié)點不是很忙,通常異布模式下備庫和主庫的延遲時間控制在毫秒級

另一種方式為邏輯復制,也稱之為選擇性復制,可以做到基于表級別的復制。選擇需要邏輯復制的表,而不是復制實例上所有數(shù)據(jù)庫的所有表

物理復制是基于實例級的復制,只能復制整個postgresql實例

WAL日志記錄數(shù)據(jù)庫的變化,格式為二進制格式。當主機出現(xiàn)異常斷電時,如果WAL文件寫入成功,但還沒來得及刷新數(shù)據(jù)文件,當數(shù)據(jù)庫再次啟動時會根據(jù)WAL日志文件信息進行事務前滾。從而恢復數(shù)據(jù)庫達到一致性狀態(tài)

盡管流復制和邏輯復制都是基于WAL,但兩者有本質(zhì)不同,流復制是基于WAL物理復制,邏輯復制是基于WAL邏輯分析,將WAL解析成一種清晰、易于理解的格式

流復制是物理復制,其核心原理是主庫將預寫日志W(wǎng)AL日志流發(fā)送給備庫,備庫接收到WAL日志流后進行重做,因此流復制是基于WAL日志文件的物理復制

邏輯復制核心原理也是基于WAL,邏輯復制會根據(jù)預先設置好的規(guī)則解析WAL日志,將WAL二進制文件解析成一定格式的邏輯變化信息,比如從WAL中解析指定表發(fā)生的DML邏輯變化信息,之后主庫將邏輯變化信息發(fā)送給備庫,備庫收到WAL邏輯解析變化信息后再應用日志

流復制只能對postgresql實例級進行復制,而邏輯復制能夠?qū)?shù)據(jù)庫表級進行復制

流復制能對DDL操作進行復制,比如主表新建表、給已有表加減字段時會自動同步到備庫,而邏輯復制主庫上的DDL操作不會復制到備庫

流復制主庫可讀寫,但從庫只運行查詢不允許寫入,而邏輯復制的從庫可讀寫

流復制要求postgresql大版本必須一致,邏輯復制支持跨postgresql大版本

異步流復制:主庫上提交事務時不需要等待備庫接收W AL日志流并寫入到備庫WAL日志文件時便返回成功,如果主庫異常宕機,主庫上已提交的事務可能還沒來得及發(fā)送給備庫,就會造成備庫手機丟失,備庫丟失的數(shù)量和WAL復制延遲有關(guān),WAL復制延遲越大,備庫上丟失的數(shù)據(jù)量越大。而同步流復制相反。

同步流復制主主庫上提交事務時需要等待備庫接收并WAL日志,當主庫至少收到一個備庫發(fā)回的確認信息時便返回成功。

異步流復制部署主要?兩種方式:一種方式是拷貝數(shù)據(jù)文件方式,另一種方式是通過pg_basebackup命令行工具。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容