postgresql分佈式集羣之citus

  今天,利用大家的休息時間分享postgresql分佈式集羣,利用Citus實現分庫分表。

一、Citus是什麼

   citus是PG的一個sharding插件,可以把PG變成一個分佈式數據庫。目前在蘇寧有大量的生產應用跑在citus+pg的環境中。大家可以看it大咖視頻。

   citus是一款基於PostgreSQL的開源分佈式數據庫,自動繼承了PostgreSQL強大的SQL支持能力和應用生態(不僅僅是客戶端協議的兼容還包括服務端擴展和管理工具的完全兼容)。 

   和其他類似的基於PostgreSQL的分佈式方案,比如GreenPlum,PostgreSQL-XL,PostgreSQL-XC相比,citus最大的不同在於citus是一個PostgreSQL擴展而不是一個獨立的代碼分支。 

    因此,citus可以用很小的代價和更快的速度緊跟PostgreSQL的版本演進;同時又能最大程度的保證數據庫的穩定性和兼容性。

二、主要特性

● PostgreSQL兼容

● 水平擴展

● 實時併發查

● 快速數據加載

● 實時增刪改查

● 持分佈式事務

● 支持常用DDL

三、Citus架構節點

   Container簡稱CN節點  worker節點

  CN只存儲和數據分佈相關的元數據,實際的表數據被分成M個分片,打散到N個Worker上。這樣的表被叫做“分片表”,可以爲“分片表”的每一個分片創建多個副本,實現高可用和負載均衡。

    分片表和參考表

   分片表分佈打散在多個worker節點,而參考表每一個container節點和worker都保留一模一樣的副本。

   下圖是Citus處理客戶端訪問的一個簡單的架構流程圖,應用層直接連接CN節點,CN節點對客戶端傳入的sql語句進行解析,生成分佈執行計劃,並將各個子任務下發到相應的Worker節點,之後收集Worker的結果,經過處理後返回最終結果給客戶端。最基本的流程就是這樣,但是生成環境我們還應該考慮到高可用。下面將完整的介紹Citus實戰集羣原理。

postgresql分佈式集羣之citus
四、Citus的三種集羣

   因爲,citus本身不支持HA,不像mongodb一樣故障自動修復,但是可以結合pg的流複製,以及應用層jdbc數據驅動實現讀寫分離,故障切換。

第一種集羣,增加讀的能力

多個container節點,多個container節點進行流複製,保持元數據一致,在應用層設置多個讀寫分離,保證了數據的一致性,也保證了業務的高可用。

postgresql分佈式集羣之citus

第二種集羣,citus的MX功能

此功能可以說是解決了讀和寫的瓶頸,蘇寧的架構中也是採用同樣的思想。

原理:Mx功能的原理就是讓其他的worker節點攜帶元數據,相當於攜帶元數據的worker節點都支持讀寫的能力,很大程度解決了讀寫的問題。

postgresql分佈式集羣之citus

第三種集羣,流複製,異地容災。使用不同的dns,解決兩套集羣IP不同的問題。擴展容災能力。

這套集羣是在mX的基礎上解決異地容災的方案,通過dns解析到不同的機房的數據庫。
postgresql分佈式集羣之citus

上面三種集羣,最常用的最有效的方法還是MX集羣,只要在應用層設置好讀寫規則就可以了,底層worker的HA可以用流複製,多個副本實現數據高可用。

五、worker節點網絡問題

cn節點訪問所有worker節點。oltp業務的訪問比較頻繁。

重分佈數據時,worker節點相互訪問,訪問頻率不大。olap業務場景,數據交換吞吐較大。

cn節點連worker有兩種模式

1、事務級保持連接模式(每條sql發起建立連接,sql結束斷開連接,(除非事務中)。跑OLAP類sql時,使用即時連接模式(olap場景併發不高,建立連接帶來的額外開銷不大)

2、會話保持連接模式(會話發起建立連接,會話結束後釋放連接)。跑OLTP類的SQl時,使用的是會話保持(oltp查詢,併發性能高)

上面兩種模式,基本上Citus能滿足TP也能滿足AP。

後面我會把搭建過程分享出來,比較簡單。如果大家有什麼好的pgsql的分佈式方案,可以留言評論一起交流。

citus還有好多的特性,

比如:對於計算count處理時,如何進行優化。

       對於數據統計,citus提供了topn插件,與HLL類似

大家可以看官方文檔介紹:https://docs.citusdata.com/en/v7.5/get_started/concepts.html#nodes-coordinator-and-workers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章