溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何分析PostgreSQL WAL LOG 與時(shí)間線timeline與rejoin node錯(cuò)誤

發(fā)布時(shí)間:2021-12-09 09:51:15 來源:億速云 閱讀:163 作者:柒染 欄目:大數(shù)據(jù)

如何分析PostgreSQL WAL LOG 與時(shí)間線timeline與rejoin node錯(cuò)誤,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

問題的起因是,在做repmgr 恢復(fù)的時(shí)候,經(jīng)常有同學(xué)說恢復(fù)的時(shí)候, repmgr rejion node 的時(shí)候pg_rewind 會(huì)報(bào)錯(cuò),與時(shí)間線有關(guān)。(pg_rewind之前是寫過的清參閱之前的文字)

PostgreSQL 中的wal log 對(duì)于數(shù)據(jù)庫是很重要的,基本wal log 解決的問題就是在數(shù)據(jù)寫入到數(shù)據(jù)庫的時(shí)候并沒有必要非要立即寫入到存儲(chǔ)系統(tǒng),通過wal log 及時(shí)記錄 postgresql 中所作的事情,在出現(xiàn)數(shù)據(jù)庫問題的時(shí)候,通過wal log 就可以將數(shù)據(jù)進(jìn)行恢復(fù)。所以wal log 出現(xiàn)最主要的原因,(個(gè)人認(rèn)為),保證數(shù)據(jù)安全性下的最大化數(shù)據(jù)庫的性能。磁盤的順序?qū)懙男阅苁且欢ū入S即寫要好的根本決定了上面的數(shù)據(jù)庫建立的構(gòu)思。

使用WAL可以顯著減少磁盤寫操作的數(shù)量,因?yàn)橹恍枰獙⑷罩疚募⑿碌酱疟P,以確保提交了事務(wù),而不是事務(wù)更改的每個(gè)數(shù)據(jù)文件。日志文件是按順序?qū)懭氲模虼送饺罩镜某杀具h(yuǎn)遠(yuǎn)低于刷新數(shù)據(jù)頁的成本。對(duì)于處理許多涉及數(shù)據(jù)存儲(chǔ)的不同部分的小事務(wù)的服務(wù)器來說尤其如此。

那時(shí)間線是什么,我們來一個(gè)直觀的東西,打開pg_wal (pg11版本),可以看到下圖。

如何分析PostgreSQL WAL LOG 與時(shí)間線timeline與rejoin node錯(cuò)誤

每次創(chuàng)建一個(gè)新的時(shí)間軸,PostgreSQL都會(huì)創(chuàng)建一個(gè)名為“.history”的“時(shí)間軸歷史”文件。時(shí)間軸歷史文件由原始時(shí)間軸歷史文件中的內(nèi)容和當(dāng)前時(shí)間軸的切換記錄組成。假設(shè)已啟動(dòng)恢復(fù)的數(shù)據(jù)庫并切換到新的時(shí)間軸ID=5。然后將時(shí)間軸歷史文件命名為00000005.history。該文件記錄了文件分支的原因、時(shí)間軸和時(shí)間。該文件可能包含多行記錄。

如何分析PostgreSQL WAL LOG 與時(shí)間線timeline與rejoin node錯(cuò)誤

通過上面的時(shí)間軸的history 可以看到每個(gè)新的history文件隨著數(shù)字的疊加,歷史記錄也是在一致添加的。

當(dāng)數(shù)據(jù)庫從包含多個(gè)時(shí)間軸的歸檔中恢復(fù)時(shí),歷史文件允許系統(tǒng)選擇正確的WAL文件。歷史文件也可以像WAL文件一樣歸檔到WAL歸檔目錄。歷史文件是非常小的文本文件,因此需要很少的存儲(chǔ)空間。如果希望通過在恢復(fù)中指定目標(biāo)時(shí)間軸tli來恢復(fù)數(shù)據(jù)庫。如果希望通過在恢復(fù)中指定目標(biāo)時(shí)間軸tli來恢復(fù)數(shù)據(jù)庫。conf中,程序首先查找.history文件,然后根據(jù).history文件中記錄的時(shí)間軸分支之間的關(guān)系,查找pg_control中從startTLI到tli的所有時(shí)間軸對(duì)應(yīng)的日志文件,并恢復(fù)數(shù)據(jù)庫。

而上面提到的問題,無法進(jìn)行的原因有因?yàn)闆]有配備 PG_REWIND必要的使用的環(huán)境,例如打開 full page  wal log hit 等等 如果使用repmgr 則必須要共享加載中也要配置repmgr 。而這些工作沒有做,造成了使用 rejoin 時(shí)的錯(cuò)誤。

另外一個(gè)問題我們是不是要使用PG_REWIND 來作為rejoin的一個(gè)選項(xiàng),官方的文檔上給出的命令是這樣的。我想下面這句話可以來解釋

當(dāng)從級(jí)提升到新主級(jí)時(shí),它會(huì)創(chuàng)建一個(gè)新的時(shí)間軸,以避免WAL名稱重疊。history文件包含關(guān)于數(shù)據(jù)庫時(shí)間軸分支的信息。恢復(fù)過程使用這些信息來確定它正在處理的時(shí)間軸。

所以使用pg_rewind 的原因也是要通過文件級(jí)別的方式來拷貝數(shù)據(jù)到原來的主,現(xiàn)在的從,來使數(shù)據(jù)一致,建議要使用PG_REWIND, 而使用PG_REWIND 則必須要進(jìn)行 POSTGRESQL 安裝時(shí)的一系列的設(shè)置,這都是一環(huán)套一環(huán)的。 

關(guān)于如何分析PostgreSQL WAL LOG 與時(shí)間線timeline與rejoin node錯(cuò)誤問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI