postgresql分佈式集羣之citus

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

1、Citus是什麼html

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

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

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

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

2、主要特性node

● PostgreSQL兼容sql

● 水平擴展mongodb

● 實時併發查數據庫

● 快速數據加載網絡

● 實時增刪改查架構

● 持分佈式事務併發

● 支持經常使用DDL負載均衡

3、Citus架構節點分佈式

Container簡稱CN節點  worker節點

  CN只存儲和數據分佈相關的元數據,實際的表數據被分紅M個分片,打散到N個Worker上。這樣的表被叫作「分片表」,能夠爲「分片表」的每個分片建立多個副本,實現高可用和負載均衡。

    分片表和參考表

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

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

postgresql分佈式集羣之citus
4、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能夠用流複製,多個副本實現數據高可用。

5、worker節點網絡問題

cn節點訪問全部worker節點。oltp業務的訪問比較頻繁。

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

cn節點連worker有兩種模式

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

二、會話保持鏈接模式(會話發起創建鏈接,會話結束後釋放鏈接)。跑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

相關文章
相關標籤/搜索