聊聊Greenplum集群部署
Greenplum屬于一種看起來“較重”的數(shù)據(jù)庫MPP架構(gòu),不像基于MySQL基于中間件的架構(gòu)那么輕量,但是要說一些具體的場景,比如Greenplum支持存儲過程,支持列式存儲,加上分區(qū)表和內(nèi)置的數(shù)據(jù)分片等多種模式,都是典型的OLAP場景,術(shù)業(yè)有專攻還是有一定道理的。
最近因?yàn)闃I(yè)務(wù)需求和改造需要部署幾套GP集群,總體來說也是需要解決以前的一些頑疾并加以改進(jìn),運(yùn)行幾個上百節(jié)點(diǎn)的集群還是有一定的壓力的,不過前幾年在飛祥同學(xué)的勞動成果之上,整個集群還是比較穩(wěn)定的,在運(yùn)行中也發(fā)現(xiàn)了一些額外的問題和痛點(diǎn)。
1)之前的GP segment數(shù)量設(shè)計過度,因?yàn)橘Y源限制,過多考慮了功能和性能,對于集群的穩(wěn)定性和資源平衡性考慮有所欠缺,在每個物理機(jī)節(jié)點(diǎn)上部署了10個Primary,10個Mirror,導(dǎo)致一旦出現(xiàn)Segment節(jié)點(diǎn)不可用,對于整個集群的穩(wěn)定性會是一個大的隱患,最尷尬的莫過于一個Segment節(jié)點(diǎn)不可用,另外一個Segment節(jié)點(diǎn)負(fù)載過高,最后集群不可用,所幸這種情況暫未出現(xiàn)
2)GP集群的存儲資源和性能的平衡不夠。GP存儲對標(biāo)基本都是百TB,相對來說和我們所說的大數(shù)據(jù)體系的PB還是有很大差異的,GP里面計算的數(shù)據(jù)總體都是比較重要,而且總體的存儲容量不會特別大,磁盤現(xiàn)在有8T的規(guī)格,如果放12塊盤,則RAID-5會有近70多T的存儲空間,而RAID-10則有48T左右的空間,如果RAID-5同時壞了2塊盤就尷尬了,但是對于RAID-10來說還是有轉(zhuǎn)機(jī)的,這個情況之前碰到過一次,在替換一塊壞盤的時候,工程師發(fā)現(xiàn)另外一塊盤也快壞了,RAID-5要一塊一塊的換,當(dāng)時還因?yàn)檫@個熬了個通宵,想了很多預(yù)案,說了這么多是想表達(dá),GP存儲的容量不用那么大,如果在損失一定存儲容量的基礎(chǔ)上能夠最大程度降低隱患是很劃算的,所以在存儲容量和性能的綜合之上,我們是選擇了RAID-10
3)集群的驗(yàn)收和保障工作補(bǔ)充。如果一個GP集群用過很長一段時間就會發(fā)現(xiàn)啟停都是一個大工程,之前啟停要耗時半個小時,讓小心臟壓力很大。 這個過程中也發(fā)現(xiàn)了以前遺漏了一些環(huán)節(jié),比如性能壓測,導(dǎo)致不太確定整個集群的支撐能力到底如何。
在此基礎(chǔ)上,還需要額外考慮如下的一些因素:
1)集群的跨機(jī)房遷移如何做到平滑,或者影響最低,之前一次機(jī)房搬遷,導(dǎo)致IP變化后的集群無法啟動,當(dāng)時真是嚇壞了,因?yàn)樵谶@種問題面前,就是0和1的博弈,如果是0就意味著數(shù)據(jù)都丟棄了,所以在這方面還是需要做一些扎實(shí)的鋪墊。
2)服務(wù)器后續(xù)過保要做硬件替換,如何能夠?qū)崿F(xiàn)滾動替換,這是在已有的基礎(chǔ)之上需要前瞻考慮的重要點(diǎn),幾年后的服務(wù)器過保如何應(yīng)對,如果有了可靠的方案,以后也會從容一些。
3)GP的版本和基礎(chǔ)環(huán)境需要同步升級,比如我們目前的主流操作系統(tǒng)為CentOS7,如果繼續(xù)使用CentOS 6就不應(yīng)該了,同時對于GP的版本也需要重新評估,在較新版本和穩(wěn)定版本之間進(jìn)行平衡。
整個GP集群的部署架構(gòu)如下:
Greenplum是我知道的數(shù)據(jù)庫中的角色最完整的。Master,Standby,Primary,Mirror,各種數(shù)據(jù)庫中的不同角色在這里有一套完整的體系命名。
新的這一套環(huán)境注定在我手中構(gòu)建,所以我希望完善以下的一些細(xì)節(jié)。
1)Greenplum的版本選擇,目前有兩個主要的版本類別,一個是開源版(Open Source distribution)和Pivotal官方版,它們的其中一個差異就是官方版需要注冊,簽署協(xié)議,在此基礎(chǔ)上還有GPCC等工具可以用,而開源版本可以實(shí)現(xiàn)源碼編譯或者rpm安裝,無法配置GPCC。綜合來看,我們選擇了開源版本的6.16.2,這其中也詢問了一些行業(yè)朋友,特意選擇了幾個涉及穩(wěn)定性bug修復(fù)的版本。
2)GP的容量規(guī)劃,這一次經(jīng)過討論是選擇了折中的配置,即(6+6)*10+2,具體解釋就是一共12臺服務(wù)器,其中有10臺服務(wù)器是Segment節(jié)點(diǎn),每臺上面部署了6個Primary,6個Mirror,另外2臺部署了Master和Standby
3)內(nèi)核參數(shù)的配置和調(diào)整
除了基礎(chǔ)的kernel.shmmax和kernel.shmall配置之外,還有如下的一些配置需要調(diào)整:
- vm.swappiness=10
- vm.zone_reclaim_mode = 0
- vm.dirty_expire_centisecs = 500
- vm.dirty_writeback_centisecs = 100
- vm.dirty_background_ratio = 0 # See System Memory
- vm.dirty_ratio = 0
- vm.dirty_background_bytes = 1610612736
- vm.dirty_bytes = 4294967296
- vm.min_free_kbytes = 3943084
- vm.overcommit_memory=2
- kernel.sem = 500 2048000 200 4096
集群部署的大體流程:
1)首先是配置/etc/hosts,需要把所有節(jié)點(diǎn)的IP和主機(jī)名都整理出來。
2)配置用戶,很常規(guī)的步驟
- groupadd gpadmin
- useradd gpadmin -g gpadmin
- passwd gpadmin
3)配置sysctl.conf和資源配置
4)使用rpm模式安裝
- yum install -y apr apr-util bzip2 krb5-devel zip
- # rpm -ivh open-source-greenplum-db-6.16.2-rhel7-x86_64.rpm
- Preparing... ################################# [100%]
- Updating / installing...
- 1:open-source-greenplum-db-6-6.16.2################################# [100%]
5)配置兩個host文件,也是為了后面進(jìn)行統(tǒng)一部署方便,在此建議先開啟gpadmin的sudo權(quán)限,可以通過gpssh處理一些較為復(fù)雜的批量操作
6)通過gpssh-exkeys來打通ssh信任關(guān)系,這里需要吐槽這個ssh互信,端口還得是22,否則處理起來很麻煩
- gpssh-exkeys -f hostlist
7)較為復(fù)雜的一步是打包master的Greenplum-db-6.16.2軟件,然后分發(fā)到各個segment機(jī)器中,整個過程涉及文件打包,批量傳輸和配置,可以借助gpscp和gpssh,比如gpscp傳輸文件,如下的命令會傳輸?shù)?tmp目錄下
- gpscp -f /usr/local/greenplum-db/conf/hostlist /tmp/greenplum-db-6.16.2.tar.gz =:/tmp
8)Master節(jié)點(diǎn)需要單獨(dú)配置相關(guān)的目錄,而Segment節(jié)點(diǎn)的目錄可以提前規(guī)劃好,比如我們把Primary和Mirror放在不同的分區(qū)。
- mkdir -p /data1/gpdata/gpdatap1
- mkdir -p /data1/gpdata/gpdatap2
- mkdir -p /data2/gpdata/gpdatam1
- mkdir -p /data2/gpdata/gpdatam2
9)整個過程里最關(guān)鍵的就是gpinitsystem_config配置了,因?yàn)镾egment節(jié)點(diǎn)的ID配置和命名,端口區(qū)間都是根據(jù)一定的規(guī)則來動態(tài)生成的,所以對于目錄的配置需要額外注意。
10)部署GP集群最關(guān)鍵的命令是
gpinitsystem -c gpinitsystem_config -s 【standby_hostname】
整個過程大約5分鐘~10分鐘以內(nèi)會完成。
在此也走了不少彎路,比如一些配置不完整,防火墻權(quán)限不夠,導(dǎo)致部署的時候界面卡在那里,
比如其中一個問題,/etc/hosts 配置不全 導(dǎo)致Primary可以啟動,但是Mirror無法啟動,問題看起來很奇怪,而且從GP的日志里面的信息也很簡略,如果難以定位,還可以直接到相應(yīng)的Segment節(jié)點(diǎn)上查看相應(yīng)的日志,查看日志是個技術(shù)活,如果出現(xiàn)卡頓,不要干等著,得看看后端到底在哪個環(huán)節(jié)卡住了,需要同步查看日志的刷新來進(jìn)行問題的定位和修正,在這方面GP的一些安裝體驗(yàn)還是比較粗糙的。
安裝部署這件事,就像一個無形的門檻,只要自己做過一次,相信這些步驟都很簡單,反之就像一座繞不開的大山,始終繞不過去,對于安裝部署,最全面的文檔還是官方文檔。