天天看點

黑馬PostgreSQL,為何一黑到底

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,10年DBA工作經驗

一位上進心十足的【大資料領域部落客】!😜😜😜

中國DBA聯盟(ACDU)成員,目前從事DBA及程式程式設計,B站及騰訊課堂講師,直播量破10W

擅長主流資料Oracle、MySQL、PG 運維開發,備份恢複,安裝遷移,性能優化、故障應急處理等。

✨ 如果有對【資料庫】感興趣的【小可愛】,歡迎關注【IT邦德】💞💞💞

❤️❤️❤️感謝各位大可愛小可愛!❤️❤️❤️

文章目錄

  • ​​⛳️1.PostgreSQL 介紹​​
  • ​​⛳️2.PostgreSQL相對于MySQL的優勢​​
  • ​​⛳️3.PG、Oracle和MySQL對比​​
  • ​​⛳️4.PG學習指引​​
  • ​​⛳️5.PostgreSQL工具​​
  • ​​🐴5.1 備份恢複工具​​
  • ​​🐴5.2、監控工具​​
  • ​​🐴5.3、邏輯和基于觸發器的複制工具​​
  • ​​🐴5.4、多主複制工具​​
  • ​​🐴5.5、高可用和故障轉移工具​​
  • ​​🐴5.6、Connection Pooling Tools​​
  • ​​🐴5.7、表分區工具​​
  • ​​🐴5.8、遷移工具​​

⛳️1.PostgreSQL 介紹

PostgreSQL标榜自己是世界上最先進的開源資料庫。

PostgreSQL的一些粉絲說它能與Oracle相媲美,

而且沒有那麼昂貴的價格和傲慢的客服。

它擁有很長的曆史,最初是1985年在加利福尼亞大學伯克利分校開發的

經過長達15年以上的積極開發和不斷改進,

PostgreSQL已在可靠性、穩定性、資料一緻性等獲得了業内相對高的聲譽。

黑馬PostgreSQL,為何一黑到底

2022年資料庫排行,與往年的2月份一樣的平靜。前十名排位來說較上個月沒有變化,PG穩居第四

黑馬PostgreSQL,為何一黑到底

PostgreSQL資料庫有什麼優勢?

PostgreSQL資料庫是功能強大的開源資料庫,
它支援豐富的資料類型(如JSON和JSONB類型、數組類型)和自定義類型。

PostgreSQL資料庫提供了豐富的接口,可以很友善地擴充它的功能,
如可以在GiST架構下實作自己的索引類型,支援使用C語言寫自定義函數、觸發器,
也支援使用流行的程式設計語言寫自定義函數。

PostgreSQL資料庫具有以下優勢:

PostgreSQL資料庫是目前功能最強大的開源資料庫,
它是最接近工業标準SQL92的查詢語言,
至少實作了SQL:2011标準中要求的179項主要功能中的160項
(注:目前沒有哪個資料庫管理系統能完全實作SQL:2011标準中的所有主要功能)。

穩定可靠:PostgreSQL是唯一能做到資料零丢失的開源資料庫。
目前有報道稱國内外有部分銀行使用PostgreSQL資料庫。

開源省錢: PostgreSQL資料庫是開源的、免費的,
而且使用的是類BSD協定,在使用和二次開發上基本沒有限制。

支援廣泛:PostgreSQL 資料庫支援大量的主流開發語言,
包括C、C++、Perl、Python、Java、Tcl以及PHP等。

PostgreSQL社群活躍:PostgreSQL基本上每3個月推出一個更新檔版本,
這意味着已知的Bug很快會被修複,有應用場景的需求也會及時得到響應。      

⛳️2.PostgreSQL相對于MySQL的優勢

在SQL的标準實作上要比MySQL完善,而且功能實作比較嚴謹;

存儲過程的功能支援要比MySQL好,具備本地緩存執行計劃的能力;

對表連接配接支援較完整,優化器的功能較完整,支援的索引類型很多,複雜查詢能力較強;

PG主表采用堆表存放,MySQL采用索引組織表,能夠支援比MySQL更大的資料量。

PG的主備複制屬于實體複制,相對于MySQL基于binlog的邏輯複制,資料的一緻性更加可靠,複制性能更高,對主機性能的影響也更小。

MySQL的存儲引擎插件化機制,存在鎖機制複雜影響并發的問題,而PG不存在。

⛳️3.PG、Oracle和MySQL對比

黑馬PostgreSQL,為何一黑到底

⛳️4.PG學習指引

1. 建議閱讀《PostgreSQL學習的九層寶塔》:
https://mp.weixin.qq.com/s/i7b6FvY3PYC2JENCgiVxjQ
2.可自主學習閱讀PG應用管理基礎文檔,
本部分内容主要是中國PG分會教育訓練認證PGCA課程的節選,
相關連結:http://www.postgresqlchina.com/tecdoc
3.PG學習的主力站點
PG國際社群:https://www.postgresql.org/
1) PG概要:https://www.postgresql.org/about/
2) PG線上幫助文檔(英文版本,多PG版本):
https://www.postgresql.org/docs/
3)也可通過PG中文手冊查閱學習,通路位址:
http://www.postgres.cn/docs/10/;
http://www.postgres.cn/docs/11/
4)安裝媒體下載下傳位址:
https://www.postgresql.org/download/
主要有二進制、源碼編譯安裝兩種方式,二進制安裝媒體對應不同的作業系統。
例外還有一種基于PG的産品釋出版本的安裝,
可以通過産品的公司官網獲得安裝媒體及安裝方法,
譬如阿裡POLARDB、亞信ANTDB、騰訊TBase、華為GaussDB、瀚高HGDB等。
5)線上學習資源
https://www.postgresql.org/docs/online-resources/
包含豐富的教程、動手練習資源      

⛳️5.PostgreSQL工具

PostgreSQL的工具大體上可以分為以下幾類:

備份恢複工具

監控工具

邏輯和基于觸發器的複制工具

多主複制工具

高可用和故障轉移工具

連接配接池工具

表分區工具

遷移工具

🐴5.1 備份恢複工具

1. Barman
Barman (Backup and Recovery Manager-備份恢複管理器) 
是一個用Python語言實作的PostgreSQL災難恢複管理工具,
它由第二象限公司(2ndQuadrant)開源并維護。它允許我們在關鍵業務環境中執行遠端備份,
為資料庫管理者在恢複階段提供有效的資料保證。
Barman最優秀的功能包括備份中繼資料、增量備份、
保留政策、遠端回複、WAL檔案歸檔壓縮和備份。

2. EDB BART
EDB BART(Backup and Recovery Tool -備份恢複工具)是企業級PostgreSQL資料管理政策的關鍵元件。
BART為大規模部署的PostgreSQL服務提供保留政策和基于時間點恢複的實作。
BART 2.0版本提供塊級别的增量備份。

3. PgBackRest
pgBackRest工具的主要目的是做一款簡單可靠的備份恢複工具,
以能夠無縫的接入到大規模資料庫和工作負載中。pgBackRest放棄了其他傳統備份工具依賴tar和rsync的套路,
它的備份功能都是從軟體内部實作的,并采用用戶端協定與遠端伺服器互動。移除了對tar和rsync的依賴,
使它能夠更好的應對針對特定資料庫的備份挑戰。用戶端遠端協定更加靈活,
協定可以按照要求限制連接配接類型以保證備份過程更安全。      

🐴5.2、監控工具

1. PoWA
PoWA(PostgreSQL Workload Analyzer)是PostgreSQL的工作負載分析工具,
它收集性能資料并提供實時的圖示和圖檔展示,以幫助我們監控和調優PostgreSQL伺服器。
它和Oracle AWR或者SQL Server MDW很像。

2. PgCluu
pgCluu是一個PostgreSQL的性能監控和審計工具。
它以視圖的形式展示您從PostgreSQL資料庫叢集收集的所有統計資訊。
它能展示一份完成的資料庫叢集資訊和系統使用率資訊。

3. Pgwatch2
Pgwatch2是監控PostgreSQL資料庫工具中最易用的一個。
它基于Grafana并為PostgreSQL資料庫提供開箱即用的監控功能。
因為它已經內建到了容器裡,是以我們不必擔心各種依賴和複雜的安裝步驟,
幾分鐘即可将監控搭建完畢,所有的東西都已經提前配置好。
我們隻需要将資料庫連接配接配置到監控中即可運作正常監控操作。      

🐴5.3、邏輯和基于觸發器的複制工具

1. pgLogical
pglogical是采用PostgreSQL擴充插件的形式實作的邏輯複制工具。
內建完善,不使用任何觸發器和外部程式。該插件作為實體複制的替代者,
在有選擇性的複制時采用釋出/訂閱模型,是複制資料的有效方式。

2. Slony-I
Slony-I是PostgreSQL一主多從複制體系的實作,支援級聯複制。
開發Slony-I的主要目的是為了實作主從複制,
該複制體系包含大型資料庫系統中對合理配置從系統所要求的所有特征和能力。

Slony-I主要為資料中心和備份站點場景設計,
這種場景下通常要求所有節點都是可用的。

3. Bucardo
Bucardo是一個PostgreSQL異步複制系統,允許配置多主多從操作。
它是http://Backcountry.com公司的Jon Jensen和Greg Sabino開發的。      

🐴5.4、多主複制工具

BDR
Postgres-BDR(Bi-Directional Replication for PostgreSQL)
是世界上第一個開源PostgreSQL多主複制系統,目的是強化生産環境。
由第二象限(2ndQuadrant)公司開源并維護,BDR為地理分布叢集環境特别設計,
使用搞笑的異步邏輯複制方式,支援從2個到48個以上節點在不同地域之間分布。      

🐴5.5、高可用和故障轉移工具

1. Repmgr
repmgr是一款開源的、用于PostgreSQL伺服器叢集複制管理和故障轉移的工具。
它擴充了PostgreSQL内建的hot-standby能力,
可以設定熱備份伺服器、監控複制、執行管理任務(故障轉移、手工切換等)。
repmgr是第二象限( 2ndQuadrant)公司開發的。

2. PAF
PAF(PostgreSQL Automatic Failover-自動故障轉工具)是OCF資源代理貢獻給PostgreSQL的,
它的初始目的是在Pacemaker管理和PostgreSQL劃清規則,讓事情變得簡單、文檔化和有效。
如果您的PostgreSQL叢集啟用了内部流複制,
PAF暴露給Pacemaker目前每一個PostgreSQL執行個體節點的狀态:
哪個是主,哪個是從,哪個已停止,哪個正在追複制狀态等等。如果主節點失敗了,
Pacemaker預設首先恢複失敗的主節點。如果失敗不可恢複,
PAF會在從節點中選取一個最好的(與已失敗主節點資料最為接近)提升為新的主節點。

3. Patroni
Patroni是一個模闆,它使用Python為你提供一個自己訂制的,高可用的解決方案,為
最大程度的可用性,它的配置資訊存儲在像ZooKeeper, etcd或者Consul中。
如果DBAs,DevOps工程師或者SRE正在尋找一個在資料中心中快速部署高可用PostgreSQL方案,
或者其他的用途,Patroni 能提供幫助。

4. Stolon
Stolon是一個cloud native的PostgreSQL高可用管理工具。
它之是以是cloud native的是因為它可以在為容器内部的PostgreSQL提供高可用(Kubernetes 內建),
而且還支援其他種類的基礎設施(比如:cloud IaaS,舊風格的基礎設施等)      

🐴5.6、Connection Pooling Tools

1. PgBouncer
PgBouncer是Skype的研發人員于2007年開發的連接配接池工具。
在那以後的很多年裡,該項目已經由很多開發者參與改進,但是無論怎麼變,
其降低PostgreSQL連接配接代價的角色一直未曾改變。
PgBouncer允許PostgreSQL資料庫操作比其自身所能提供的最大連接配接數更大的用戶端通路。
它本質上隻追蹤每一個用戶端連接配接,然後基于配置資訊,
建立一些用戶端連接配接并基于先進先服務的原則服務于用戶端通路。

2. PgPool-II
pgpool-II也是連接配接池,我們通常也習慣稱它為pgpool。
它是另一個流行的連接配接代理,它早于PgBouncer一年左右的時間釋出(2006年下半年釋出)。
pgpool的使用範圍非常關,所能提供的功能包括:基于查詢的複制,連接配接池功能,負載均衡,并行查詢等等,
pgpool的一個重要特定就是連接配接池。如果我們有兩台PostgreSQL伺服器,我們想使用虛拟IP,
這樣用戶端就不會感受到主資料庫切換的影響。有時候,為了在伺服器之間移動IP位址,
首先需要從主資料庫伺服器上把IP移除,然後在另外一台上重建,這就回中斷活動連結,
導緻短暫的服務不可用。使用pgpool可以緩存伺服器直到另一台伺服器提升上來,
pgpool會從内部處理故障轉移,在應用和用戶端的角度,資料庫似乎從來沒有下過線。      

🐴5.7、表分區工具

1. Pg_Partman
pg_partman是PostgreSQL的一個擴充插件,用于建立和管理基于時間或者基于序列的表分區。
也支援多級子分區。子表和觸發器都由擴充插件自身管理。已經有資料的表也能很容易的添加細粒度的分區。
可選的保留政策能夠自動删除不再需要的分區。
背景工作程序(BGW)能夠自動運作分區維護定時執行任務,而不需要依賴于linux cron等程式從外部進行維護。

2. pg_Pathman
pg_pathman是PostgreSQL Pro公司開源的擴充插件,可以為大型分布式資料庫提供優化的分區解決方案。使用pg_pathman可以給大型資料庫不停機分區,加速分區表查詢,動态管理和增加分區,
為分區增加外部表,操作聯合分區等。      

🐴5.8、遷移工具

Ora2pg
Ora2Pg是一個用于将Oracle或MySQL資料庫遷移到PostgreSQL的免費工具。
它能連接配接到Oracle資料庫,然後自動掃描和導出源端的表結構或者資料,
轉化為PostgreSQL資料庫SQL腳本。Ora2Pg可以當作Oracle資料庫的反向引擎,
用于大型企業級資料庫遷移或者Oracle資料複制到PostgreSQL資料庫等場景。
它易于使用,不需要任何Oracle資料庫背景,你所需要做的僅僅是建立與Oracle資料庫的連接配接而已。