今天就跟大家聊聊有關(guān)PostgreSQL中流復(fù)制的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
井岡山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
和MySQL 不同,MYSQL的復(fù)制是基于邏輯復(fù)制,而PG 具有流復(fù)制和邏輯復(fù)制兩個功能。提到流復(fù)制如果讓我理解,想到就是ORACLE Dataguard 這樣的功能,當然ORALCE 也有流復(fù)制和高級復(fù)制等功能,這里就不再提及。
這里復(fù)制的技術(shù)很多,有shared disk failover , write-Ahead log shipping , logincal replication , 等等今天我們要學習的就是
Write-ahead log shipping ,這個功能。
那使用這個功能對我們有什么好處
1 它是一個內(nèi)建功能
2 連接的方式是通過 wal ahead log 的方式
3 沒有特別的硬件需求
4 對主機的運行基本沒有影響
5 可以設(shè)置數(shù)據(jù)的同步和異步
6 Standy 庫是可以進行只讀的活動
讀完上面的點,發(fā)現(xiàn)通過流的方式復(fù)制其實比邏輯的復(fù)制好的地方,就是1 沒有事務(wù)沖突 2 不會有事務(wù)較大,造成延遲的問題 3 數(shù)據(jù)在切換過程中,不會有數(shù)據(jù)丟失的擔心。
以上都是MYSQL 在復(fù)制的過程中,我可能會擔心的問題。
流復(fù)制是PostgreSQL 在 9.0 推出的功能,其中主要由三個進程
1 walsender
2 walreceiver
3 startup
這三者是怎么工作的我們的畫一個圖來 分析一下。
1 Standby 庫通過 walreciever 來嘗試連接到 主庫
2 Primary 主庫會通過wal sender來進行 tcp -IP 方式的連接,握手確認連接
3 從庫的standby 會發(fā)送目前他最后的一次的LSN 號碼給主庫,從庫的LSN 號必然必須小于主庫(如果是反向的,說明主庫的數(shù)據(jù)落后于從庫,或是其他問題,這樣的復(fù)制是沒有辦法進行的)
4 主庫會提供 WAL Segments 并開始進行復(fù)制的數(shù)據(jù)發(fā)送的工作
通過
select application_name,state from pg_stat_replication;以下的語句來查看當前庫是否在進行sender 的狀態(tài)。
說到這里,其實每種數(shù)據(jù)庫的復(fù)制都會存在一個問題就是如果STANDBY 庫重新啟動或者STANDBY 沒有跟上 PRIMARY 庫的發(fā)送日志的速度,則結(jié)果就是復(fù)制失敗。而PostgreSQL有兩個方法來盡力拯救這樣的事情,
1 提高 wal_keep_segments 這讓我想起了 MongoDB 提高OPLOG 的存儲大小來讓MONGODB 復(fù)制不會產(chǎn)生類似的問題。
2 使用replication slot 的方式和功能來靈活的進行WAL 數(shù)據(jù)的發(fā)送。
其實大白話就是 要不我在 發(fā)送端做點什么,要不我在接收端做點什么。
同時我們可以通過 sent_lsn, write_lsn,flush_lsn, replay_lsn, 來判斷我們的復(fù)制的狀態(tài)如何。
3 PG 的復(fù)制中,可以是多從的結(jié)構(gòu)。
說完這些,需要探討配置流復(fù)制中的參數(shù)了
首先要打開 POSTGRESQL 的復(fù)制
1 wal_level = replica
確定寫入WAL 的信息的多少, 如果想調(diào)整這個參數(shù),需要在開啟服務(wù)前就進行設(shè)置
如果設(shè)置為 minimal level 則類似 create table as create index , copy 等命令的日志就不會被記錄
2 synchronous_commit 相關(guān)的選項
on , remote_apply , remote_write , local
默認的安全值是ON 同時 如果你選擇 remote_apply 或者 remote_write 則會等待standby的主機進行相關(guān)的回饋,主庫才能繼續(xù)后面操作。
3 max_wal_sender 設(shè)置最大的primary standby的 連接數(shù),默認為10
4 wal_keep_segments 這里指定最大可以保持多少 wal 日志的數(shù)量,一個WAL 的日志數(shù)量是 16MB 。
5 wal_sender_timeout 默認檢測 standby 的沒有響應(yīng)的時間默認是60 秒
6 synchronous_standby_name = 'standby_name one by one'
在PG的設(shè)置中有一個功能是可以設(shè)置一個備用機,與PG 的主機進行流復(fù)制,當備用機停止工作的時候,主機也停止工作。在上面的參數(shù)選項中,需要填寫具體的那臺standby機器需要,與主庫中這樣的關(guān)系。
同時需要在standby庫去設(shè)置
需要在從庫的recovery.conf 中來設(shè)置
7 以下的設(shè)置時在 standby下進行的
hot_standby = on 允許在recovery 的狀態(tài)下,進行查詢的語句
其他,在配置完相關(guān)的參數(shù)后,需要使用 pg_basebackup 將主庫的數(shù)據(jù)拉到備庫,配置參數(shù)后啟動備庫,則類似 ORACLE dataguard 的PG 流復(fù)制就生效了。
看完上述內(nèi)容,你們對PostgreSQL中流復(fù)制的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站題目:PostgreSQL中流復(fù)制的原理是什么
URL鏈接:http://jinyejixie.com/article18/jjpidp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、品牌網(wǎng)站建設(shè)、、ChatGPT、網(wǎng)站改版、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)