国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

postgresql 流復(fù)制原理

這篇具有很好參考價(jià)值的文章主要介紹了postgresql 流復(fù)制原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

這部分純理論內(nèi)容,結(jié)合配圖和數(shù)據(jù)進(jìn)程了解流復(fù)制的工作邏輯。

通過(guò)WAL完成復(fù)制的方式

PostgreSQL在數(shù)據(jù)目錄下的pg_wal(舊版為pg_xlog)子目錄中維護(hù)了一個(gè)WAL日志文件,該文件用于記錄數(shù)據(jù)庫(kù)文件的每次改變,這種日志文件機(jī)制提供了一種數(shù)據(jù)庫(kù)熱備份的方案,即:在把數(shù)據(jù)庫(kù)使用文件系統(tǒng)的方式備份出來(lái)的同時(shí)也把相應(yīng)的WAL日志進(jìn)行備份,即使備份出來(lái)的數(shù)據(jù)塊不一致,也可以重放WAL日志把備份的內(nèi)容推到一致?tīng)顟B(tài)。這也就是基于時(shí)間點(diǎn)的備份(Point-in-Time Recovery),簡(jiǎn)稱(chēng)PITR。

把WAL日志傳送到另一臺(tái)服務(wù)器有兩種方式,分別是:

  1. WAL日志歸檔(base-file)
    寫(xiě)完一個(gè)WAL日志后,才把WAL日志文件拷貝到standby數(shù)據(jù)庫(kù)中,簡(jiǎn)言之就是通過(guò)cp命令實(shí)現(xiàn)遠(yuǎn)程備份,這樣通常備庫(kù)會(huì)落后主庫(kù)一個(gè)WAL日志文件。
  2. 流復(fù)制(streaming replication)
    流復(fù)制是postgresql9.x之后才提供的新的傳遞WAL日志的方法,它的好處是只要master庫(kù)一產(chǎn)生日志,就會(huì)馬上傳遞到standby庫(kù),同第一種相比有更低的同步延遲,所以我們肯定也會(huì)選擇流復(fù)制的方式。

postgresql 流復(fù)制原理,# 【TDSQL-PG筆記】主從復(fù)制原理,postgresql,數(shù)據(jù)庫(kù)

postgresql wal 日志介紹

wal日志即write ahead log預(yù)寫(xiě)式日志,簡(jiǎn)稱(chēng)wal日志。wal日志可以說(shuō)是PostgreSQL中十分重要的部分,相當(dāng)于oracle中的redo日志。

當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)發(fā)生變更時(shí):
change發(fā)生時(shí):先要將變更后內(nèi)容計(jì)入wal buffer中,再將變更后的數(shù)據(jù)寫(xiě)入data buffer;
commit發(fā)生時(shí):wal buffer中數(shù)據(jù)刷新到磁盤(pán);
checkpoint發(fā)生時(shí):將所有data buffer刷新的磁盤(pán)。

如果沒(méi)有wal日志,那么每次更新都會(huì)將數(shù)據(jù)刷到磁盤(pán)上,并且這個(gè)動(dòng)作是隨機(jī)i/o,性能可想而知。并且沒(méi)有wal日志,關(guān)系型數(shù)據(jù)庫(kù)中事務(wù)的ACID如何保證呢?因此wal日志重要性可想而知。其中心思想就是:先寫(xiě)入日志文件,再寫(xiě)入數(shù)據(jù)。

最簡(jiǎn)的主從配置完成后,可以觀察主庫(kù)和從庫(kù)啟動(dòng)的進(jìn)程。

[pg@localhost ~]$ ps -auxf|grep postgres|grep -v grep
pg       31569  0.0  0.4 396536 17048 pts/0    S    10:17   0:00 /usr/pgsql-10/bin/postgres -D /data/db2
pg       31570  0.0  0.0 251456  1952 ?        Ss   10:17   0:00  \_ postgres: logger process
pg       31571  0.0  0.0 396632  3416 ?        Ss   10:17   0:00  \_ postgres: startup process   recovering 000000010000000000000001
pg       31572  0.0  0.0 396536  3704 ?        Ss   10:17   0:00  \_ postgres: checkpointer process
pg       31573  0.0  0.0 396536  3212 ?        Ss   10:17   0:00  \_ postgres: writer process
pg       31574  0.0  0.0 251452  1988 ?        Ss   10:17   0:00  \_ postgres: stats collector process
pg        4314  0.0  0.1 403804  4236 ?        Ss   11:41   0:00  \_ postgres: wal receiver process   streaming 0/16BEDA0
pg        4304  0.0  0.4 396536 17040 pts/0    S    11:41   0:00 /usr/pgsql-10/bin/postgres -D /data/db1
pg        4305  0.0  0.0 251456  1956 ?        Ss   11:41   0:00  \_ postgres: logger process
pg        4307  0.0  0.0 396688  3688 ?        Ss   11:41   0:00  \_ postgres: checkpointer process
pg        4308  0.0  0.0 396536  3448 ?        Ss   11:41   0:00  \_ postgres: writer process
pg        4309  0.0  0.1 396536  6348 ?        Ss   11:41   0:00  \_ postgres: wal writer process
pg        4310  0.0  0.0 396944  3080 ?        Ss   11:41   0:00  \_ postgres: autovacuum launcher process
pg        4311  0.0  0.0 251588  2180 ?        Ss   11:41   0:00  \_ postgres: stats collector process
pg        4312  0.0  0.0 396828  2520 ?        Ss   11:41   0:00  \_ postgres: bgworker: logical replication launcher
pg        4315  0.0  0.0 397328  3568 ?        Ss   11:41   0:00  \_ postgres: wal sender process pg ::1(43162) streaming 0/16BEDA0

postgresql主從同步流程

postgresql 流復(fù)制原理,# 【TDSQL-PG筆記】主從復(fù)制原理,postgresql,數(shù)據(jù)庫(kù)

主要分為以下幾個(gè)流程:

  1. 備庫(kù)啟動(dòng)walreceiver進(jìn)程,walreceiver進(jìn)程向主庫(kù)發(fā)送連接請(qǐng)求。
  2. 主庫(kù)收到連接請(qǐng)求后啟動(dòng)walsender進(jìn)程,并與walreceiver進(jìn)程建立tcp連接。
  3. 備庫(kù)walreceiver進(jìn)程發(fā)送最新的wal lsn給主庫(kù)。
  4. 主庫(kù)進(jìn)行l(wèi)sn對(duì)比,定期向備庫(kù)發(fā)送心跳信息來(lái)確認(rèn)備庫(kù)可用性,并且將沒(méi)有傳遞的wal日志進(jìn)行發(fā)送,同時(shí)調(diào)用SyncRepWaitForLSN()函數(shù)來(lái)獲取鎖存器,并且等待備庫(kù)響應(yīng),鎖存器的釋放時(shí)機(jī)和主備同步模式的選擇有關(guān)。
  5. 備庫(kù)調(diào)用操作系統(tǒng)write()函數(shù)將wal寫(xiě)入緩存,然后調(diào)用操作系統(tǒng)fsync()函數(shù)將wal刷新到磁盤(pán),然后進(jìn)行wal回放。同時(shí)備庫(kù)向主庫(kù)返回ack信息,ack信息中包含write_lsn、flush_lsn、replay_lsn,這些信息會(huì)發(fā)送給主庫(kù),用以告知主庫(kù)當(dāng)前wal日志在備庫(kù)的應(yīng)用位置及狀態(tài),相關(guān)位置信息可以通過(guò)pg_stat_replication視圖查看。
  6. 如果啟用了hot_standby_feedback參數(shù),備庫(kù)會(huì)定期向主庫(kù)發(fā)送xmin信息,用以保證主庫(kù)不會(huì)vacuum掉備庫(kù)需要的元組信息

postgresql同步模式

postgresql 流復(fù)制原理,# 【TDSQL-PG筆記】主從復(fù)制原理,postgresql,數(shù)據(jù)庫(kù)
Postgresql數(shù)據(jù)庫(kù)提供了五種同步模式,同步模式主要由synchronous_commit參數(shù)控制。下面簡(jiǎn)單介紹一下五種同步模式的區(qū)別:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-811343.html

  • off:對(duì)于本機(jī)wal不用寫(xiě)到磁盤(pán)就可以提交,是異步模式,存在數(shù)據(jù)丟失風(fēng)險(xiǎn)。
  • local:不管有沒(méi)有備庫(kù)只需要保證本機(jī)的wal日志刷到磁盤(pán)就行。
  • remote_write:等待主庫(kù)日志刷新到磁盤(pán),同時(shí)日志傳遞到備庫(kù)的操作系統(tǒng)緩存中,不需要刷盤(pán)就 能提交,不能避免操作系統(tǒng)崩潰。
  • on:如果沒(méi)有備庫(kù),表示wal日志需要刷新到本地的磁盤(pán)中才能提交,如果存在同步備庫(kù)時(shí)(synchronous_standby_name不為空),需要等待遠(yuǎn)程備庫(kù)也刷新到磁盤(pán)主庫(kù)才能提交。
  • remote_apply:pg高版本才出來(lái)的功能,備庫(kù)刷盤(pán)并且回放成功,事務(wù)被標(biāo)記為可見(jiàn),用于做負(fù)載均衡,讀寫(xiě)分離等

到了這里,關(guān)于postgresql 流復(fù)制原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【PostgreSQL】連接pg數(shù)據(jù)庫(kù)Schema切換

    【PostgreSQL】連接pg數(shù)據(jù)庫(kù)Schema切換

    由于PostgreSQL數(shù)據(jù)庫(kù)模式(schema)存在多個(gè),原先的表單是默認(rèn)采用public但是查詢(xún)表和字段時(shí)候有查詢(xún)所有未進(jìn)行過(guò)濾,導(dǎo)致數(shù)據(jù)庫(kù)連接失敗、查表字段也為空(空即查詢(xún)服務(wù)端異常錯(cuò)誤) 數(shù)據(jù)庫(kù)連接配置 添加參數(shù)補(bǔ)充 ?currentSchema=dwd 譬如: username=root;password=XXXX;url=jdbc:postg

    2024年02月11日
    瀏覽(27)
  • 使用pg_prewarm緩存PostgreSQL數(shù)據(jù)庫(kù)表

    使用pg_prewarm緩存PostgreSQL數(shù)據(jù)庫(kù)表

    pg_prewarm 直接利用系統(tǒng)緩存的代碼,對(duì)操作系統(tǒng)發(fā)出異步prefetch請(qǐng)求,在應(yīng)用中,尤其在OLAP的情況下,對(duì)于大表的分析等等是非常耗費(fèi)查詢(xún)的時(shí)間的,而即使我們使用select table的方式,這張表也并不可能將所有的數(shù)據(jù)都裝載到內(nèi)存中,而pg_prewarm的功能就是完成一個(gè)張表全部進(jìn)入

    2024年02月14日
    瀏覽(30)
  • PG-DBA培訓(xùn)04:PostgreSQL數(shù)據(jù)類(lèi)型與數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范

    一、風(fēng)哥PG-DBA培訓(xùn)04:PostgreSQL數(shù)據(jù)類(lèi)型與數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范 本課程由風(fēng)哥發(fā)布的基于PostgreSQL數(shù)據(jù)庫(kù)的系列課程,本課程屬于PostgreSQL數(shù)據(jù)庫(kù)SQL開(kāi)發(fā)與應(yīng)用實(shí)戰(zhàn)階段之PostgreSQL數(shù)據(jù)類(lèi)型與數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范,學(xué)完本課程可以掌握PostgreSQL SQL語(yǔ)句基礎(chǔ)講解,PostgreSQL SQL語(yǔ)言基礎(chǔ)知識(shí),安

    2024年02月11日
    瀏覽(27)
  • PostgreSQL邏輯備份pg_dump使用及其原理解析

    1、循環(huán)調(diào)用getopt_long解析命令行參數(shù),將參數(shù)保存到static DumpOptions dopt;中 2、判斷參數(shù)是否相容,不相容則退出: 3、調(diào)用CreateArchive打開(kāi)輸出文件,輸出流為fout。該函數(shù)使用4個(gè)文件封裝了4種不同dump文件格式,增加新文件可以增加新的導(dǎo)出文件類(lèi)型各自封裝,獨(dú)立易于維護(hù)。

    2024年02月13日
    瀏覽(23)
  • MySQL數(shù)據(jù)庫(kù)——主從復(fù)制

    MySQL數(shù)據(jù)庫(kù)——主從復(fù)制

    在實(shí)際的生產(chǎn)環(huán)境中,對(duì)數(shù)據(jù)庫(kù)的讀和寫(xiě)都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中,是不能滿(mǎn)足實(shí)際需求的。無(wú)論是在安全性、高可用性還是高并發(fā)等各個(gè)方面都是完全不能滿(mǎn)足實(shí)際需求的。因此,通過(guò)主從復(fù)制的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫(xiě)分離來(lái)提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力。有點(diǎn)類(lèi)似

    2024年02月11日
    瀏覽(27)
  • docker版postgresql數(shù)據(jù)庫(kù)主從配置

    參考:postgresql16配置主從 注意項(xiàng) :當(dāng)前操作主路徑: ~/dockerEnv 【示例路徑】 創(chuàng)建 sql 文件,文件路徑 dockerEnv/dbInit/a_create_user.sql 注意: 如果在同一個(gè)宿主機(jī)操作,注意多個(gè) yml 文件的端口映射,不要沖突! 掛載宿主機(jī) sql 文件夾到容器的 docker-entrypoint-initdb.d 路徑下,容器啟

    2024年04月14日
    瀏覽(18)
  • mysql 數(shù)據(jù)庫(kù)主從復(fù)制搭建

    MySQL 主從復(fù)制主要用于實(shí)現(xiàn)高可用性和備份。在主從復(fù)制中,一個(gè) MySQL 實(shí)例(稱(chēng)為主節(jié)點(diǎn))將其數(shù)據(jù)更改復(fù)制到至少一個(gè)其他 MySQL 實(shí)例(稱(chēng)為從節(jié)點(diǎn))上。主要借助于數(shù)據(jù)庫(kù)二進(jìn)制日志binlog進(jìn)行數(shù)據(jù)的復(fù)制。 主從數(shù)據(jù)庫(kù)對(duì)應(yīng)的操作系統(tǒng)、數(shù)據(jù)庫(kù)版本要一致。 1、主庫(kù)配置 設(shè)

    2024年02月20日
    瀏覽(26)
  • mysql主從復(fù)制及原理

    主要基于MySQL二進(jìn)制日志 主要包括三個(gè)線程(2個(gè)I/O線程,1個(gè)SQL線程) 1、MySQL將數(shù)據(jù)變化記錄到二進(jìn)制日志中; 2、Slave將MySQL的二進(jìn)制日志拷貝到Slave的中繼日志中; 3、Slave將中繼日志中的事件在做一次,將數(shù)據(jù)變化,反應(yīng)到自身(Slave)的數(shù)據(jù)庫(kù) 在主服務(wù)器(master)上啟用

    2024年02月14日
    瀏覽(20)
  • 圖解-Redis主從復(fù)制原理

    圖解-Redis主從復(fù)制原理

    大家好,我是「云舒編程」,今天我們來(lái)Redis主從復(fù)制原理。 文章首發(fā)于微信公眾號(hào): 云舒編程 關(guān)注公眾號(hào)獲?。?1、大廠項(xiàng)目分享 2、各種技術(shù)原理分享 3、部門(mén)內(nèi)推 主從復(fù)制是指用戶(hù)可以搭建多個(gè)服務(wù)器,其中幾個(gè)服務(wù)器當(dāng)做主服務(wù)器,提供寫(xiě)功能。其余的服務(wù)器當(dāng)做從

    2024年01月25日
    瀏覽(17)
  • 【數(shù)據(jù)庫(kù)】mysql主從復(fù)制與讀寫(xiě)分離

    【數(shù)據(jù)庫(kù)】mysql主從復(fù)制與讀寫(xiě)分離

    ??讀寫(xiě)分離,基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE ),而從數(shù)據(jù)庫(kù)處理SELECT查詢(xún)操作。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。 ??因?yàn)閿?shù)據(jù)庫(kù)的\\\"寫(xiě)”(寫(xiě)10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時(shí)的。 ??

    2024年02月11日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包