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