您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關PostgreSQL中流復制的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
和MYSQL 不同,MYSQL的復制是基于邏輯復制,而PG 具有流復制和邏輯復制兩個功能。提到流復制如果讓我理解,想到就是ORACLE Dataguard 這樣的功能,當然ORALCE 也有流復制和高級復制等功能,這里就不再提及。
這里復制的技術很多,有shared disk failover , write-Ahead log shipping , logincal replication , 等等今天我們要學習的就是
Write-ahead log shipping ,這個功能。
那使用這個功能對我們有什么好處
1 它是一個內建功能
2 連接的方式是通過 wal ahead log 的方式
3 沒有特別的硬件需求
4 對主機的運行基本沒有影響
5 可以設置數據的同步和異步
6 Standy 庫是可以進行只讀的活動
讀完上面的點,發現通過流的方式復制其實比邏輯的復制好的地方,就是1 沒有事務沖突 2 不會有事務較大,造成延遲的問題 3 數據在切換過程中,不會有數據丟失的擔心。
以上都是MYSQL 在復制的過程中,我可能會擔心的問題。
流復制是PostgreSQL 在 9.0 推出的功能,其中主要由三個進程
1 walsender
2 walreceiver
3 startup
這三者是怎么工作的我們的畫一個圖來 分析一下。
1 Standby 庫通過 walreciever 來嘗試連接到 主庫
2 Primary 主庫會通過wal sender來進行 tcp -IP 方式的連接,握手確認連接
3 從庫的standby 會發送目前他最后的一次的LSN 號碼給主庫,從庫的LSN 號必然必須小于主庫(如果是反向的,說明主庫的數據落后于從庫,或是其他問題,這樣的復制是沒有辦法進行的)
4 主庫會提供 WAL Segments 并開始進行復制的數據發送的工作
通過
select application_name,state from pg_stat_replication;以下的語句來查看當前庫是否在進行sender 的狀態。
說到這里,其實每種數據庫的復制都會存在一個問題就是如果STANDBY 庫重新啟動或者STANDBY 沒有跟上 PRIMARY 庫的發送日志的速度,則結果就是復制失敗。而PostgreSQL有兩個方法來盡力拯救這樣的事情,
1 提高 wal_keep_segments 這讓我想起了 MONGODB 提高OPLOG 的存儲大小來讓MONGODB 復制不會產生類似的問題。
2 使用replication slot 的方式和功能來靈活的進行WAL 數據的發送。
其實大白話就是 要不我在 發送端做點什么,要不我在接收端做點什么。
同時我們可以通過 sent_lsn, write_lsn,flush_lsn, replay_lsn, 來判斷我們的復制的狀態如何。
3 PG 的復制中,可以是多從的結構。
說完這些,需要探討配置流復制中的參數了
首先要打開 POSTGRESQL 的復制
1 wal_level = replica
確定寫入WAL 的信息的多少, 如果想調整這個參數,需要在開啟服務前就進行設置
如果設置為 minimal level 則類似 create table as create index , copy 等命令的日志就不會被記錄
2 synchronous_commit 相關的選項
on , remote_apply , remote_write , local
默認的安全值是ON 同時 如果你選擇 remote_apply 或者 remote_write 則會等待standby的主機進行相關的回饋,主庫才能繼續后面操作。
3 max_wal_sender 設置最大的primary standby的 連接數,默認為10
4 wal_keep_segments 這里指定最大可以保持多少 wal 日志的數量,一個WAL 的日志數量是 16MB 。
5 wal_sender_timeout 默認檢測 standby 的沒有響應的時間默認是60 秒
6 synchronous_standby_name = 'standby_name one by one'
在PG的設置中有一個功能是可以設置一個備用機,與PG 的主機進行流復制,當備用機停止工作的時候,主機也停止工作。在上面的參數選項中,需要填寫具體的那臺standby機器需要,與主庫中這樣的關系。
同時需要在standby庫去設置
需要在從庫的recovery.conf 中來設置
7 以下的設置時在 standby下進行的
hot_standby = on 允許在recovery 的狀態下,進行查詢的語句
其他,在配置完相關的參數后,需要使用 pg_basebackup 將主庫的數據拉到備庫,配置參數后啟動備庫,則類似 ORACLE dataguard 的PG 流復制就生效了。
看完上述內容,你們對PostgreSQL中流復制的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。