詳細(xì)的PostgreSQL工具總結(jié):備份恢復(fù)、監(jiān)控、復(fù)制、高可用等
概述
今天主要介紹一些PostgreSQL的工具,大體上可以分為以下幾類(lèi):
- 備份恢復(fù)工具
- 監(jiān)控工具
- 邏輯和基于觸發(fā)器的復(fù)制工具
- 多主復(fù)制工具
- 高可用和故障轉(zhuǎn)移工具
- 連接池工具
- 表分區(qū)工具
- 遷移工具
一、備份恢復(fù)工具
1. Barman
Barman (Backup and Recovery Manager-備份恢復(fù)管理器) 是一個(gè)用Python語(yǔ)言實(shí)現(xiàn)的PostgreSQL災(zāi)難恢復(fù)管理工具,它由第二象限公司(2ndQuadrant)開(kāi)源并維護(hù)。它允許我們?cè)陉P(guān)鍵業(yè)務(wù)環(huán)境中執(zhí)行遠(yuǎn)程備份,為數(shù)據(jù)庫(kù)管理員在恢復(fù)階段提供有效的數(shù)據(jù)保證。Barman最優(yōu)秀的功能包括備份元數(shù)據(jù)、增量備份、保留策略、遠(yuǎn)程回復(fù)、WAL文件歸檔壓縮和備份。
2. EDB BART
EDB BART(Backup and Recovery Tool -備份恢復(fù)工具)是企業(yè)級(jí)PostgreSQL數(shù)據(jù)管理策略的關(guān)鍵組件。BART為大規(guī)模部署的PostgreSQL服務(wù)提供保留策略和基于時(shí)間點(diǎn)恢復(fù)的實(shí)現(xiàn)。BART 2.0版本提供塊級(jí)別的增量備份。
3. PgBackRest
pgBackRest工具的主要目的是做一款簡(jiǎn)單可靠的備份恢復(fù)工具,以能夠無(wú)縫的接入到大規(guī)模數(shù)據(jù)庫(kù)和工作負(fù)載中。pgBackRest放棄了其他傳統(tǒng)備份工具依賴(lài)tar和rsync的套路,它的備份功能都是從軟件內(nèi)部實(shí)現(xiàn)的,并采用客戶(hù)端協(xié)議與遠(yuǎn)程服務(wù)器交互。移除了對(duì)tar和rsync的依賴(lài),使它能夠更好的應(yīng)對(duì)針對(duì)特定數(shù)據(jù)庫(kù)的備份挑戰(zhàn)。客戶(hù)端遠(yuǎn)程協(xié)議更加靈活,協(xié)議可以按照要求限制連接類(lèi)型以保證備份過(guò)程更安全。
二、監(jiān)控工具
1. PoWA
PoWA(PostgreSQL Workload Analyzer)是PostgreSQL的工作負(fù)載分析工具,它收集性能數(shù)據(jù)并提供實(shí)時(shí)的圖標(biāo)和圖片展示,以幫助我們監(jiān)控和調(diào)優(yōu)PostgreSQL服務(wù)器。它和Oracle AWR或者SQL Server MDW很像。
2. PgCluu
pgCluu是一個(gè)PostgreSQL的性能監(jiān)控和審計(jì)工具。它以視圖的形式展示您從PostgreSQL數(shù)據(jù)庫(kù)集群收集的所有統(tǒng)計(jì)信息。它能展示一份完成的數(shù)據(jù)庫(kù)集群信息和系統(tǒng)使用率信息。
3. Pgwatch2
Pgwatch2是監(jiān)控PostgreSQL數(shù)據(jù)庫(kù)工具中最易用的一個(gè)。它基于Grafana并為PostgreSQL數(shù)據(jù)庫(kù)提供開(kāi)箱即用的監(jiān)控功能。因?yàn)樗呀?jīng)集成到了容器里,所以我們不必?fù)?dān)心各種依賴(lài)和復(fù)雜的安裝步驟,幾分鐘即可將監(jiān)控搭建完畢,所有的東西都已經(jīng)提前配置好。我們只需要將數(shù)據(jù)庫(kù)連接配置到監(jiān)控中即可運(yùn)行正常監(jiān)控操作。
三、邏輯和基于觸發(fā)器的復(fù)制工具
1. pgLogical
pglogical是采用PostgreSQL擴(kuò)展插件的形式實(shí)現(xiàn)的邏輯復(fù)制工具。集成完善,不使用任何觸發(fā)器和外部程序。該插件作為物理復(fù)制的替代者,在有選擇性的復(fù)制時(shí)采用發(fā)布/訂閱模型,是復(fù)制數(shù)據(jù)的有效方式。
2. Slony-I
Slony-I是PostgreSQL一主多從復(fù)制體系的實(shí)現(xiàn),支持級(jí)聯(lián)復(fù)制。開(kāi)發(fā)Slony-I的主要目的是為了實(shí)現(xiàn)主從復(fù)制,該復(fù)制體系包含大型數(shù)據(jù)庫(kù)系統(tǒng)中對(duì)合理配置從系統(tǒng)所要求的所有特征和能力。
Slony-I主要為數(shù)據(jù)中心和備份站點(diǎn)場(chǎng)景設(shè)計(jì),這種場(chǎng)景下通常要求所有節(jié)點(diǎn)都是可用的。
3. Bucardo
Bucardo是一個(gè)PostgreSQL異步復(fù)制系統(tǒng),允許配置多主多從操作。它是Backcountry.com公司的Jon Jensen和Greg Sabino開(kāi)發(fā)的。
四、多主復(fù)制工具
BDR
Postgres-BDR(Bi-Directional Replication for PostgreSQL)是世界上第一個(gè)開(kāi)源PostgreSQL多主復(fù)制系統(tǒng),目的是強(qiáng)化生產(chǎn)環(huán)境。由第二象限(2ndQuadrant)公司開(kāi)源并維護(hù),BDR為地理分布集群環(huán)境特別設(shè)計(jì),使用搞笑的異步邏輯復(fù)制方式,支持從2個(gè)到48個(gè)以上節(jié)點(diǎn)在不同地域之間分布。
五、高可用和故障轉(zhuǎn)移工具
1. Repmgr
repmgr是一款開(kāi)源的、用于PostgreSQL服務(wù)器集群復(fù)制管理和故障轉(zhuǎn)移的工具。它擴(kuò)展了PostgreSQL內(nèi)建的hot-standby能力,可以設(shè)置熱備份服務(wù)器、監(jiān)控復(fù)制、執(zhí)行管理任務(wù)(故障轉(zhuǎn)移、手工切換等)。repmgr是第二象限( 2ndQuadrant)公司開(kāi)發(fā)的。
2. PAF
PAF(PostgreSQL Automatic Failover-自動(dòng)故障轉(zhuǎn)工具)是OCF資源代理貢獻(xiàn)給PostgreSQL的,它的初始目的是在Pacemaker管理和PostgreSQL劃清規(guī)則,讓事情變得簡(jiǎn)單、文檔化和有效。如果您的PostgreSQL集群?jiǎn)⒂昧藘?nèi)部流復(fù)制,PAF暴露給Pacemaker當(dāng)前每一個(gè)PostgreSQL實(shí)例節(jié)點(diǎn)的狀態(tài):哪個(gè)是主,哪個(gè)是從,哪個(gè)已停止,哪個(gè)正在追復(fù)制狀態(tài)等等。如果主節(jié)點(diǎn)失敗了,Pacemaker默認(rèn)首先恢復(fù)失敗的主節(jié)點(diǎn)。如果失敗不可恢復(fù),PAF會(huì)在從節(jié)點(diǎn)中選取一個(gè)最好的(與已失敗主節(jié)點(diǎn)數(shù)據(jù)最為接近)提升為新的主節(jié)點(diǎn)。
3. Patroni
Patroni是一個(gè)模板,它使用Python為你提供一個(gè)自己訂制的,高可用的解決方案,為最大程度的可用性,它的配置信息存儲(chǔ)在像ZooKeeper, etcd或者Consul中。如果DBAs,DevOps工程師或者SRE正在尋找一個(gè)在數(shù)據(jù)中心中快速部署高可用PostgreSQL方案,或者其他的用途,Patroni 能提供幫助。
4. Stolon
Stolon是一個(gè)cloud native的PostgreSQL高可用管理工具。它之所以是cloud native的是因?yàn)樗梢栽跒槿萜鲀?nèi)部的PostgreSQL提供高可用(Kubernetes 集成),而且還支持其他種類(lèi)的基礎(chǔ)設(shè)施(比如:cloud IaaS,舊風(fēng)格的基礎(chǔ)設(shè)施等)
六、Connection Pooling Tools
1. PgBouncer
PgBouncer是Skype的研發(fā)人員于2007年開(kāi)發(fā)的連接池工具。在那以后的很多年里,該項(xiàng)目已經(jīng)由很多開(kāi)發(fā)者參與改進(jìn),但是無(wú)論怎么變,其降低PostgreSQL連接代價(jià)的角色一直未曾改變。PgBouncer允許PostgreSQL數(shù)據(jù)庫(kù)操作比其自身所能提供的最大連接數(shù)更大的客戶(hù)端訪(fǎng)問(wèn)。它本質(zhì)上只追蹤每一個(gè)客戶(hù)端連接,然后基于配置信息,創(chuàng)建一些客戶(hù)端連接并基于先進(jìn)先服務(wù)的原則服務(wù)于客戶(hù)端訪(fǎng)問(wèn)。
2. PgPool-II
pgpool-II也是連接池,我們通常也習(xí)慣稱(chēng)它為pgpool。它是另一個(gè)流行的連接代理,它早于PgBouncer一年左右的時(shí)間發(fā)布(2006年下半年發(fā)布)。pgpool的使用范圍非常關(guān),所能提供的功能包括:基于查詢(xún)的復(fù)制,連接池功能,負(fù)載均衡,并行查詢(xún)等等,pgpool的一個(gè)重要特定就是連接池。如果我們有兩臺(tái)PostgreSQL服務(wù)器,我們想使用虛擬IP,這樣客戶(hù)端就不會(huì)感受到主數(shù)據(jù)庫(kù)切換的影響。有時(shí)候,為了在服務(wù)器之間移動(dòng)IP地址,首先需要從主數(shù)據(jù)庫(kù)服務(wù)器上把IP移除,然后在另外一臺(tái)上重建,這就回中斷活動(dòng)鏈接,導(dǎo)致短暫的服務(wù)不可用。使用pgpool可以緩存服務(wù)器直到另一臺(tái)服務(wù)器提升上來(lái),pgpool會(huì)從內(nèi)部處理故障轉(zhuǎn)移,在應(yīng)用和客戶(hù)端的角度,數(shù)據(jù)庫(kù)似乎從來(lái)沒(méi)有下過(guò)線(xiàn)。
七、表分區(qū)工具
1. Pg_Partman
pg_partman是PostgreSQL的一個(gè)擴(kuò)展插件,用于創(chuàng)建和管理基于時(shí)間或者基于序列的表分區(qū)。也支持多級(jí)子分區(qū)。子表和觸發(fā)器都由擴(kuò)展插件自身管理。已經(jīng)有數(shù)據(jù)的表也能很容易的添加細(xì)粒度的分區(qū)。可選的保留策略能夠自動(dòng)刪除不再需要的分區(qū)。后臺(tái)工作進(jìn)程(BGW)能夠自動(dòng)運(yùn)行分區(qū)維護(hù)定時(shí)執(zhí)行任務(wù),而不需要依賴(lài)于linux cron等程序從外部進(jìn)行維護(hù)。
2. pg_Pathman
pg_pathman是PostgreSQL Pro公司開(kāi)源的擴(kuò)展插件,可以為大型分布式數(shù)據(jù)庫(kù)提供優(yōu)化的分區(qū)解決方案。使用pg_pathman可以給大型數(shù)據(jù)庫(kù)不停機(jī)分區(qū),加速分區(qū)表查詢(xún),動(dòng)態(tài)管理和增加分區(qū),為分區(qū)增加外部表,操作聯(lián)合分區(qū)等。
八、遷移工具
Ora2pg
Ora2Pg是一個(gè)用于將Oracle或MySQL數(shù)據(jù)庫(kù)遷移到PostgreSQL的免費(fèi)工具。它能連接到Oracle數(shù)據(jù)庫(kù),然后自動(dòng)掃描和導(dǎo)出源端的表結(jié)構(gòu)或者數(shù)據(jù),轉(zhuǎn)化為PostgreSQL數(shù)據(jù)庫(kù)SQL腳本。Ora2Pg可以當(dāng)作Oracle數(shù)據(jù)庫(kù)的反向引擎,用于大型企業(yè)級(jí)數(shù)據(jù)庫(kù)遷移或者Oracle數(shù)據(jù)復(fù)制到PostgreSQL數(shù)據(jù)庫(kù)等場(chǎng)景。它易于使用,不需要任何Oracle數(shù)據(jù)庫(kù)背景,你所需要做的僅僅是建立與Oracle數(shù)據(jù)庫(kù)的連接而已。