一種節(jié)點(diǎn)支持多數(shù)據(jù)分片的分布式集群的擴(kuò)容和縮容方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明創(chuàng)造涉及分布式數(shù)據(jù)庫(kù)領(lǐng)域,具體涉及一種節(jié)點(diǎn)支持多數(shù)據(jù)分片的分布式集群的擴(kuò)容和縮容方法。
【背景技術(shù)】
[0002]在客戶的業(yè)務(wù)場(chǎng)景中,當(dāng)前集群滿足不了用戶的業(yè)務(wù)需求而需要對(duì)集群進(jìn)行擴(kuò)容時(shí),需要在給定的時(shí)間窗口完成集群的擴(kuò)容。目前市場(chǎng)上主流的分布式數(shù)據(jù)庫(kù)系統(tǒng)vertica, GreenPlum 一般采用一致性的hash方式來(lái)分布集群中的數(shù)據(jù),經(jīng)過(guò)hash分布的表,在擴(kuò)容時(shí),需要逐條進(jìn)行hash值的計(jì)算,然后根據(jù)計(jì)算的hash值來(lái)搬移部分的數(shù)據(jù),按行迀移數(shù)據(jù)造成迀移性能較低,該方式存在的另一個(gè)問(wèn)題是當(dāng)集群中的物理節(jié)點(diǎn)的硬件配置即使不同時(shí),采用一致性的hash方式來(lái)分布數(shù)據(jù)把節(jié)點(diǎn)對(duì)等看待,因此無(wú)論集群中硬件配置高的物理節(jié)點(diǎn),還是集群中硬件配置低的物理節(jié)點(diǎn)都分配到了基本相當(dāng)?shù)臄?shù)據(jù)量,帶來(lái)的問(wèn)題是硬件配置低的物理節(jié)點(diǎn)成為了系統(tǒng)性能的瓶頸。
[0003]GBase MPP Cluster的數(shù)據(jù)部署策略是一個(gè)物理節(jié)點(diǎn)只能部署一個(gè)數(shù)據(jù)分片,并且數(shù)據(jù)分片和物理節(jié)點(diǎn)是固定的對(duì)應(yīng)關(guān)系。采用的一致性hash算法是按照65536個(gè)hash桶來(lái)對(duì)應(yīng)到集群的實(shí)際物理節(jié)點(diǎn)(簡(jiǎn)稱為集群的hash map),理論上集群支持的最大節(jié)點(diǎn)數(shù)為65536,帶來(lái)的缺陷是hash桶數(shù)太多,導(dǎo)致多個(gè)hashkey對(duì)應(yīng)到一個(gè)節(jié)點(diǎn),數(shù)據(jù)擴(kuò)展和縮容時(shí)必須讀取所有的數(shù)據(jù)并且計(jì)算hash后按行來(lái)重分布數(shù)據(jù),導(dǎo)致重分布存在以下問(wèn)題:1.必須計(jì)算所有數(shù)據(jù)。2.按行來(lái)重分布數(shù)據(jù),導(dǎo)致擴(kuò)容性能較低3.delete行的空間不能釋放。
【發(fā)明內(nèi)容】
[0004]本發(fā)明創(chuàng)造要解決的是數(shù)據(jù)庫(kù)擴(kuò)容性能低,擴(kuò)容時(shí)需計(jì)算所有數(shù)據(jù)的問(wèn)題。
[0005]為解決上述技術(shù)問(wèn)題,本發(fā)明創(chuàng)造采用的技術(shù)方案是:一種節(jié)點(diǎn)支持多數(shù)據(jù)分片的分布式集群的擴(kuò)容和縮容方法,包括以下步驟:
[0006]S1.規(guī)劃集群總的數(shù)據(jù)分片數(shù)以及各個(gè)數(shù)據(jù)分片和物理節(jié)點(diǎn)間的對(duì)應(yīng)關(guān)系,這種對(duì)應(yīng)關(guān)系簡(jiǎn)稱為集群distribut1n ;
[0007]S2.數(shù)據(jù)按照hash方式進(jìn)行數(shù)據(jù)分布,根據(jù)集群配置的distribut1n把數(shù)據(jù)分布到對(duì)應(yīng)的物理節(jié)點(diǎn)上;
[0008]S3.擴(kuò)容時(shí),集群總的數(shù)據(jù)分片數(shù)不改變,但物理節(jié)點(diǎn)數(shù)增加了,根據(jù)集群總的數(shù)據(jù)分片數(shù)和集群改變后的所有物理節(jié)點(diǎn),重新建立新的集群distribut1n ;
[0009]S4.按照集群新的distribut1n,部分?jǐn)?shù)據(jù)分片迀移到新的物理節(jié)點(diǎn)上;
[0010]S5.當(dāng)所有需要迀移的數(shù)據(jù)分片的數(shù)據(jù)搬移完成后,切換集群原有的distribut1n到新的集群distribut1n,集群按照該新的distribut1n對(duì)外提供服務(wù)。
[0011]進(jìn)一步地,S2包括以下步驟:
[0012]S21.計(jì)算 Hash 值;
[0013]S22.計(jì)算數(shù)據(jù)分片編號(hào);
[0014]S23.根據(jù)數(shù)據(jù)分片編號(hào)從集群distribut1n中得到Nodeid ;
[0015]S24.數(shù)據(jù)分布到Nodeid所在的物理節(jié)點(diǎn)上。
[0016]進(jìn)一步地,步驟S22中計(jì)算數(shù)據(jù)分片編號(hào)的公式是hash值mod集群數(shù)據(jù)分片總數(shù)。
[0017]進(jìn)一步地,步驟S3包括以下步驟:
[0018]S31.獲得集群原始的distribut1n和新增加的節(jié)點(diǎn)數(shù);
[0019]S32.計(jì)算每個(gè)老節(jié)點(diǎn)應(yīng)該迀移到新節(jié)點(diǎn)上的數(shù)據(jù)分片總數(shù);
[0020]S33.調(diào)整數(shù)據(jù)分片和nodeid的對(duì)應(yīng)關(guān)系。
[0021]進(jìn)一步地,所述步驟S32中的計(jì)算公式為集群數(shù)據(jù)分片總數(shù)/集群原節(jié)點(diǎn)數(shù)-集群數(shù)據(jù)分片總數(shù)/集群新增節(jié)點(diǎn)后的節(jié)點(diǎn)數(shù)。
[0022]進(jìn)一步地,步驟S4包括以下步驟:
[0023]S41.獲得集群原始distribut1n和擴(kuò)容時(shí)新產(chǎn)生的distribut1n ;
[0024]S42.獲得集群的表,直至所有的表迀移完成,若迀移完成,則進(jìn)行S5,若迀移未完成,則進(jìn)行步驟S43;
[0025]S43.從原節(jié)點(diǎn)獲得該表的所有數(shù)據(jù)分片,根據(jù)公式獲得需要迀移到新節(jié)點(diǎn)的所有數(shù)據(jù)分片;
[0026]S44.把需要迀移的數(shù)據(jù)分片迀移到新節(jié)點(diǎn)上;
[0027]S45.檢驗(yàn)表數(shù)據(jù)分片的迀移是否完成,若完成,則回到步驟S42,若未完成,則擴(kuò)容失敗。
[0028]新的一致性hash算法是按照數(shù)據(jù)分片的總數(shù)來(lái)設(shè)置hash桶的個(gè)數(shù)。在系統(tǒng)部署時(shí)就需要設(shè)計(jì)集群中所有數(shù)據(jù)分片和物理節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系,數(shù)據(jù)分片的總數(shù)建議配置為初始物理節(jié)點(diǎn)的16-32倍(最多允許擴(kuò)容3-5次,還能保證性能線性提升),數(shù)據(jù)分片和物理節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系(集群distribut1n)有兩種方式,一種是按照固定的規(guī)則,一種是用戶在系統(tǒng)部署時(shí)進(jìn)行配置,當(dāng)建立好數(shù)據(jù)分片和物理節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系后,就確定了數(shù)據(jù)分片在物理節(jié)點(diǎn)的存放位置,執(zhí)行DDL,DML, Select等SQL時(shí),以數(shù)據(jù)分片為基本單位。因?yàn)榧篸istribut1n可按照以上兩種方式進(jìn)行配置,當(dāng)集群中各個(gè)物理節(jié)點(diǎn)的硬件配置不同時(shí),可對(duì)硬件配置高的物理節(jié)點(diǎn)多分配一些數(shù)據(jù)分片,對(duì)硬件配置低的物理節(jié)點(diǎn)可少分配一些數(shù)據(jù)分片,即可解決低配置的物理節(jié)點(diǎn)成為系統(tǒng)性能瓶頸的問(wèn)題。
[0029]本發(fā)明創(chuàng)造具有的優(yōu)點(diǎn)和積極效果是:不需要對(duì)所有數(shù)據(jù)進(jìn)行hash計(jì)算;按照數(shù)據(jù)分片來(lái)重分布數(shù)據(jù),擴(kuò)容性能得到提升;迀移完的數(shù)據(jù)分片直接刪除即可,數(shù)據(jù)空間可以完全釋放。
【附圖說(shuō)明】
[0030]圖1是集群一個(gè)物理節(jié)點(diǎn)對(duì)應(yīng)多個(gè)數(shù)據(jù)分片的配置圖;
[0031]圖2是集群根據(jù)集群distribut1n對(duì)數(shù)據(jù)進(jìn)行hash后進(jìn)行分布的流程圖;
[0032]圖3是集群擴(kuò)容產(chǎn)生新的集群distribut1n流程圖;
[0033]圖4是集群根據(jù)集群distribut1n進(jìn)行擴(kuò)容的流程圖。
【具體實(shí)施方式】
[0034]一種節(jié)點(diǎn)支持多數(shù)據(jù)分片的分布式集群的擴(kuò)容和縮容方法,包括以下步驟:
[0035]S1.規(guī)劃集群總的數(shù)據(jù)分片數(shù)以及各個(gè)數(shù)據(jù)分片和物理節(jié)點(diǎn)間的對(duì)應(yīng)關(guān)系,這種對(duì)應(yīng)關(guān)系簡(jiǎn)稱為集群distribut1n ;
[0036]S2.數(shù)據(jù)按照hash方式進(jìn)行數(shù)據(jù)分布,根據(jù)集群配置的distribut1n把數(shù)據(jù)分布