摘要:最近研究了的兩種集群方案,分別是和,在這里總結(jié)一下二者的機(jī)制結(jié)構(gòu)優(yōu)劣測試結(jié)果等。其中的前身的,的前身是。為了避免單點故障,可以為所有節(jié)點配置對應(yīng)的節(jié)點。測試測試結(jié)果測試結(jié)果顯示,兩種集群與單機(jī)的性能指標(biāo)幾乎一致,無法分辨高下。
最近研究了PG的兩種集群方案,分別是Pgpool-II和Postgres-XL,在這里總結(jié)一下二者的機(jī)制、結(jié)構(gòu)、優(yōu)劣、測試結(jié)果等。
1、 Pgpool-II和Postgres-XL簡介
據(jù)我目前的了解,Pgpool-II和Postgres-XL是PG集群開源實現(xiàn)中比較成功的兩個項目,互聯(lián)網(wǎng)上相關(guān)的介紹也不少,但尚不確定二者在企業(yè)生產(chǎn)環(huán)境中是否被廣泛使用。其中Pgpool-II的前身的Pgpool-I,Postgres-XL的前身是Postgres-XC。
1.1、Pgpool-II
Pgpool-II相當(dāng)于中間件,位于應(yīng)用程序和PG服務(wù)端之間,對應(yīng)用程序來說,Pgpool-II就相當(dāng)于PG服務(wù)端;對PG服務(wù)端來說,Pgpool-II相當(dāng)于PG客戶端。由此可見,Pgpool-II與PG是解耦合的,基于這樣的機(jī)制,Pgpool-II可以搭建在已經(jīng)存在的任意版本的PG主從結(jié)構(gòu)上,主從結(jié)構(gòu)的實現(xiàn)與Pgpool-II無關(guān),可以通過slony等工具或者PG自身的流復(fù)制機(jī)制實現(xiàn)。除了主從結(jié)構(gòu)的集群,Pgpool-II也支持多主結(jié)構(gòu),稱為復(fù)制模式,該模式下PG節(jié)點之間是對等的,沒有主從關(guān)系,寫操作同時在所有節(jié)點上執(zhí)行,這種模式下寫操作的代價很大,性能上不及主從模式。PG 9.3之后支持的流復(fù)制機(jī)制可以方便的搭建主從結(jié)構(gòu)的集群(包括同步復(fù)制與異步復(fù)制),因此Pgpool-II中比較常用的模式是流復(fù)制主從模式,其結(jié)構(gòu)如下圖(也可以一主多從)。
既然PG可以通過自身的流復(fù)制機(jī)制方便的搭建主從結(jié)構(gòu)集群,為什么還要在它上面搭建Pgpool-II呢?因為簡單的主從結(jié)構(gòu)集群并不能提供連接池、負(fù)載均衡、自動故障切換等功能,Pgpool-II正好可以做到這些,當(dāng)然負(fù)載均衡只針對讀操作,寫操作只發(fā)生在主節(jié)點上。為了避免單點故障,Pgpool-II自身也可以配置為主從結(jié)構(gòu),對外提供虛擬IP地址,當(dāng)主節(jié)點故障后,從節(jié)點提升為新的主節(jié)點并接管虛擬IP。
1.2、Postgres-XL
Postgres-XL的機(jī)制和Pgpool-II大不相同,它不是獨立于PG的,是在PG源代碼的基礎(chǔ)上增加新功能實現(xiàn)的。簡單來說,Postgres-XL將PG的SQL解析層的工作和數(shù)據(jù)存取層的工作分離到不同的兩種節(jié)點上,分別稱為Coordinator節(jié)點和Datanode節(jié)點,而且每種節(jié)點可以配置多個,共同協(xié)調(diào)完成原本單個PG實例完成的工作。此外,為了保證分布模式下事務(wù)能夠正確執(zhí)行,增加了一個GTM節(jié)點。為了避免單點故障,可以為所有節(jié)點配置對應(yīng)的slave節(jié)點。Postgres-XL結(jié)構(gòu)圖見下圖,來自官網(wǎng)。
Postgres-XL的Coordinator節(jié)點是整個集群的數(shù)據(jù)訪問入口,可以配置多個,然后在它們之上通過Nginx等工具實現(xiàn)負(fù)載均衡。Coordinator節(jié)點維護(hù)著數(shù)據(jù)的存儲信息,但不存儲數(shù)據(jù)本身。接收到一條SQL語句后,Coordinator解析SQL,制定執(zhí)行計劃,然后分發(fā)任務(wù)到相關(guān)的Datanode上,Datanode返回執(zhí)行結(jié)果到Coordinator,Coordinator整合各個Datanode返回的結(jié)果,最后返回給客戶端。
Postgres-XL的Datanode節(jié)點負(fù)責(zé)實際存取數(shù)據(jù),數(shù)據(jù)在多個Datanode上的分布有兩種方式:復(fù)制模式和分片模式,復(fù)制模式下,一個表的數(shù)據(jù)在指定的節(jié)點上存在多個副本;分片模式下,一個表的數(shù)據(jù)按照指定的規(guī)則分布在多個數(shù)據(jù)節(jié)點上,這些節(jié)點共同保存一份完整的數(shù)據(jù)。這兩種模式的選擇是在創(chuàng)建表的時候執(zhí)行CREATE TABLE語句指定的,也可以通過ALTER TABLE語句改變數(shù)據(jù)的分布方式。
2、 Pgpool-II和Postgres-XL對比
3、 Pgpool-II和Postgres-XL的性能測試
我分別使用pgbench和benchmarksql測試了Pgpool-II集群和Postgres-XL集群的性能,為了對比,還測試單機(jī)PG的性能。
測試條件:Pgpool-II集群是搭建在兩臺虛機(jī)上的主從復(fù)制(異步)集群;Postgres-XL集群也是搭建在相同條件上的兩臺虛機(jī)的集群,其中包含兩個Coordinator節(jié)點和兩個Datanode節(jié)點。單機(jī)PG也是運(yùn)行在相同條件的虛機(jī)上。操作系統(tǒng)是CentOS 6.6,單機(jī)PG和Pgpool-II集群種的PG版本號是9.5,Postgres-XL的版本號是Postgres-XL 9.5 R1.3,也只基于PG 9.5的。
3.1、pgbench測試
pgbench是PG自帶的一款簡單的PG性能測試工具,測試指標(biāo)是TPS,表示每秒鐘完成的事務(wù)數(shù)。測試過程如下:
1) 建庫
psql -h 10.192.33.244 -p7777 -c "create database pgbench"
2) 生成數(shù)據(jù)
pgbench -i -s 1000 -h 10.192.33.244 -p 7777 pgbench #參數(shù)-s指定數(shù)據(jù)量,這里使用1000,最終生成的數(shù)據(jù)量大小約16G。
3) 測試
pgbench -h 10.192.33.244 -p7777 -c30 -T300 -n #測試時間5分鐘,連續(xù)測試3次。
pgbench測試結(jié)果:
pgbench的測試結(jié)果顯示,Pgpool-II集群的性能比單機(jī)PG的性能差一些,約為84%;Postgres-XL集群的性能比單機(jī)PG的性能好一些,約為137%。
3.2、benchmarksql測試
benchmarksql的是一款常用的TPC-C測試工具,TPC-C測試衡量的是數(shù)據(jù)庫的OLTP性能。測試過程如下:
1) 建庫
psql -h 10.192.33.244 -p7777 -c "create database tpcc"
2) 生成數(shù)據(jù)
./runDatabaseBuild.sh props.pg #props.pg為配置文件,配置數(shù)據(jù)庫鏈接信息以及測試數(shù)據(jù)量、測試時間等, #這里配置的數(shù)據(jù)量是100 warehouse,最終生成的數(shù)據(jù)約10G,測試時間1小時。
3) 測試
./runBenchmark.sh props.pg
benchmarksql測試結(jié)果:
benchmarksql測試結(jié)果顯示,兩種集群與單機(jī)PG的性能指標(biāo)幾乎一致,無法分辨高下。出現(xiàn)這種結(jié)果的可能原因之一是:測試數(shù)據(jù)量較小,無法發(fā)揮集群的性能優(yōu)勢,尤其像Postgres-XL這個集群在設(shè)計上針對大數(shù)據(jù)處理做了一些優(yōu)化,應(yīng)該更加適合大數(shù)據(jù)處理的場景。鑒于benchmarksql測試生成數(shù)據(jù)十分耗時,這里就不再進(jìn)行較大數(shù)據(jù)量的測試了。
最后,綜合來看,我更傾向于Postgres-XL,如果公司今后打算用的話,我會推介。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38951.html
摘要:所有節(jié)點中分為三種角色全局事務(wù)管理器協(xié)調(diào)器和數(shù)據(jù)節(jié)點。一旦故障,整個集群立刻無法訪問,此時可以切換到節(jié)點上。 第一節(jié) 簡介Postgres-XL是一款開源的PG集群軟件,XL代表eXtensible Lattice,即可擴(kuò)展的PG格子之意,以下簡稱PGXL。官方稱其既適合寫操作壓力較大的OLTP應(yīng)用,又適合讀操作為主的大數(shù)據(jù)應(yīng)用。它的前身是Postgres-XC(簡稱PGXC),...
摘要:接上篇初識寫一下簡稱的部署與測試。如果執(zhí)行報錯則根據(jù)提示安裝相應(yīng)的庫即可,如等。默認(rèn)的安裝目錄是,和原生相同,很順手。 接上篇《初識Postgres-XL》https://segmentfault.com/a/11...寫一下Postgres-XL(簡稱PGXL)的部署與測試。 第一節(jié) 安裝安裝很簡單,源碼安裝,和PG的安裝基本相同,可能比PG多一個依賴庫。在所有節(jié)點上執(zhí)行相同操作。 ...
摘要:這可以通過負(fù)載平衡來實現(xiàn)數(shù)據(jù)分片當(dāng)問題不是并發(fā)查詢的數(shù)量,而是數(shù)據(jù)庫的大小和單個查詢的速度時,可以實現(xiàn)不同的方法。 showImg(https://segmentfault.com/img/remote/1460000018875091); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Slogan | 連接每個程序員的故事 網(wǎng)站 | http://chaindesk.cn...
摘要:這可以通過負(fù)載平衡來實現(xiàn)數(shù)據(jù)分片當(dāng)問題不是并發(fā)查詢的數(shù)量,而是數(shù)據(jù)庫的大小和單個查詢的速度時,可以實現(xiàn)不同的方法。 showImg(https://segmentfault.com/img/remote/1460000018875091); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Slogan | 連接每個程序員的故事 網(wǎng)站 | http://chaindesk.cn...
閱讀 2032·2021-10-09 09:41
閱讀 1606·2021-09-28 09:36
閱讀 1108·2021-09-26 09:55
閱讀 1298·2021-09-10 11:17
閱讀 1154·2021-09-02 09:56
閱讀 2769·2019-08-30 12:58
閱讀 2938·2019-08-29 13:03
閱讀 1862·2019-08-26 13:40