本發(fā)明涉及分布式搜索引擎領(lǐng)域,尤其涉及一種企業(yè)級(jí)搜索應(yīng)用服務(wù)器集群自動(dòng)擴(kuò)容方法及裝置。
背景技術(shù):
solr(searchingonlucenew/replication,企業(yè)級(jí)搜索應(yīng)用服務(wù)器)是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,它對(duì)外提供類似web-service的api接口(applicationprogramminginterface,應(yīng)用程序編程接口)。用戶可以通過http(hypertexttransferprotocol,超文本傳輸協(xié)議)請(qǐng)求,向搜索引擎服務(wù)器提交一定格式的xml(extensiblemarkuplanguage,可擴(kuò)展標(biāo)記語言)文件,生成索引;也可以通過httpget操作提出查找請(qǐng)求,并得到xml格式的返回結(jié)果。
隨著索引數(shù)量越來越大,搜索響應(yīng)時(shí)間則會(huì)變得越來越長(zhǎng),索引新內(nèi)容的速度也會(huì)越來越慢,這對(duì)檢索是大大不利的,因此,需要對(duì)solr集群進(jìn)行擴(kuò)容。
而目前擴(kuò)容的方法僅僅是根據(jù)當(dāng)前集群的切片及副本情況進(jìn)行手動(dòng)切分、合并目標(biāo)索引數(shù)據(jù),由于是手動(dòng)切分,其操作步驟十分零散且復(fù)雜,而且切分所需要確定的切片的切分次數(shù)和切分大小等參數(shù)手動(dòng)切分的準(zhǔn)切度十分低,因此現(xiàn)有技術(shù)中并無一種普適性的可靠的擴(kuò)容系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種solr集群自動(dòng)擴(kuò)容方法及裝置,解決了現(xiàn)有技術(shù)中由于手動(dòng)操作過多而導(dǎo)致擴(kuò)容復(fù)雜度高且易出錯(cuò)、效率低下的問題。
為了解決上述技術(shù)問題,本發(fā)明提供了一種solr集群自動(dòng)擴(kuò)容方法,包括:
獲取solr集群中原節(jié)點(diǎn)的數(shù)目、每個(gè)切片的副本的數(shù)目,以及所述solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目;
根據(jù)所述原節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定需要切分的各個(gè)原切片的副本的第一參數(shù);
根據(jù)所述原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定各個(gè)目的切片的第二參數(shù);
根據(jù)所述第一參數(shù)和第二參數(shù),對(duì)所述需要切分的各個(gè)原切片的副本進(jìn)行切分,得到現(xiàn)切片;
根據(jù)所述第二參數(shù)對(duì)所述現(xiàn)切片進(jìn)行相應(yīng)的合并,得到目的切片。
進(jìn)一步的,所述第一參數(shù)包括需要切分的各個(gè)原切片的副本在哈希環(huán)內(nèi)所處的范圍;所述根據(jù)所述原節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定需要切分的原切片的副本的第一參數(shù)包括:根據(jù)所述原節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定需要切分的原切片的副本的數(shù)目;根據(jù)所述需要切分的原切片的副本的數(shù)目,確定需要切分的原切片的副本在哈希環(huán)內(nèi)所處的范圍;其中,各個(gè)原切片的副本在所述哈希環(huán)內(nèi)所處的范圍的大小相等。
進(jìn)一步的,所述根據(jù)原節(jié)點(diǎn)的數(shù)目以及副本的數(shù)目,確定需要切分的原切片的副本包括:從所有原切片的副本中,選出每個(gè)在哈希環(huán)內(nèi)所處的范圍不同的原切片的一個(gè)副本作為需要切分的原切片的副本。
進(jìn)一步的,所述第二參數(shù)包括:各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍;所述根據(jù)原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目以及副本的數(shù)目,確定各個(gè)目的切片的第二參數(shù)包括:根據(jù)原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目,確定目的節(jié)點(diǎn)的數(shù)目;根據(jù)所述目的節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目確定目的切片的數(shù)目;根 據(jù)所述目的切片的數(shù)目確定各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍;其中,各個(gè)目的切片在所述哈希環(huán)內(nèi)所處的范圍的大小相等。
進(jìn)一步的,在所述獲取solr集群中原節(jié)點(diǎn)的數(shù)目以及solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目之后,還包括:確定獲取的所述原節(jié)點(diǎn)數(shù)、新增節(jié)點(diǎn)數(shù)是合理的。
進(jìn)一步的,在對(duì)所述現(xiàn)切片進(jìn)行相應(yīng)的合并之后,還包括:刪除原切片以及對(duì)應(yīng)的數(shù)據(jù)。
進(jìn)一步的,在所述刪除原切片以及數(shù)據(jù)之后,還包括:檢測(cè)各個(gè)新生成的路由表以及各個(gè)節(jié)點(diǎn)的數(shù)據(jù)量,判斷擴(kuò)容是否完成。
為了解決上述技術(shù)問題,本發(fā)明還提供了一種solr集群自動(dòng)擴(kuò)容系統(tǒng),包括:
獲取模塊,用于獲取solr集群中原節(jié)點(diǎn)的數(shù)目、每個(gè)切片旳副本的數(shù)目,以及solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目;
第一分析模塊,用于根據(jù)所述原節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定需要切分的各個(gè)原切片的副本的第一參數(shù);
第二分析模塊,用于根據(jù)所述原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定各個(gè)目的切片的第二參數(shù);
切分模塊,用于根據(jù)所述第一參數(shù)和第二參數(shù),對(duì)所述需要切分的各個(gè)原切片的副本進(jìn)行切分,得到現(xiàn)切片;
合并模塊,用于根據(jù)所述第二參數(shù)對(duì)所述現(xiàn)切片進(jìn)行相應(yīng)的合并,得到所述目的切片。
進(jìn)一步的,所述第一參數(shù)包括需要切分的各個(gè)原切片的副本在哈希環(huán)內(nèi)所處的范圍;所述第一分析模塊包括第一數(shù)目子模塊和第一范圍子模塊;所述第一數(shù)目子模塊用于根據(jù)所述原節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目,確定需 要切分的原切片的副本的數(shù)目;所述第一范圍子模塊用于根據(jù)所述第一數(shù)目子模塊確定的所述需要切分的原切片的副本的數(shù)目,確定需要切分的原切片的副本在哈希環(huán)內(nèi)所處的范圍;其中,各個(gè)原切片的副本在所述哈希環(huán)內(nèi)所處的范圍的大小相等。
進(jìn)一步的,所述第一數(shù)目子模塊包括選擇子模塊,用于從所有原切片的副本中,選出每個(gè)在哈希環(huán)內(nèi)所處的范圍不同的原切片的一個(gè)副本作為需要切分的原切片的副本。
進(jìn)一步的,所述第二參數(shù)包括:各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍;所述第二分析模塊包括第二數(shù)目子模塊和第二范圍子模塊,所述第二數(shù)目子模塊用于根據(jù)原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目,確定目的節(jié)點(diǎn)的數(shù)目,并根據(jù)所述目的節(jié)點(diǎn)的數(shù)目以及每個(gè)切片旳副本的數(shù)目確定目的切片的數(shù)目;所述第二范圍子模塊用于根據(jù)所述第二數(shù)目子模塊確定的所述目的切片的數(shù)目確定各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍;其中,各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍的大小相等。
進(jìn)一步的,還包括確定模塊,用于所述獲取模塊獲取solr集群中原節(jié)點(diǎn)的數(shù)目以及solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目之后,確定獲取的所述原節(jié)點(diǎn)數(shù)、新增節(jié)點(diǎn)數(shù)是合理的。
進(jìn)一步的,還包括刪除模塊,用于所述合并模塊對(duì)現(xiàn)切片進(jìn)行相應(yīng)的合并之后,刪除原切片以及對(duì)應(yīng)的數(shù)據(jù)。
進(jìn)一步的,還包括最終確認(rèn)模塊,用于在所述刪除模塊刪除冗余的原切片以及數(shù)據(jù)之后,檢測(cè)各個(gè)新生成的節(jié)點(diǎn)的路由表以及各個(gè)節(jié)點(diǎn)的數(shù)據(jù)量,判斷擴(kuò)容是否完成。
本發(fā)明的有益效果:
本發(fā)明提供了一種solr集群自動(dòng)擴(kuò)容方法及系統(tǒng),通過獲取solr集群中原節(jié)點(diǎn)的數(shù)目、每個(gè)切片旳副本的數(shù)目,以及擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目,確定出原切片的副本的第一參數(shù)和目標(biāo)切片的第二參數(shù),據(jù)此對(duì)原切片的副本進(jìn)行切分,再合并為目標(biāo)切片,從而實(shí)現(xiàn)了solr集群的擴(kuò)容;節(jié)省了手動(dòng)操作的時(shí)間的同時(shí),提高了擴(kuò)容的準(zhǔn)確率和效率。
附圖說明
圖1為本發(fā)明實(shí)施例一提供的一種solr集群的自動(dòng)擴(kuò)容方法流程圖;
圖2為本發(fā)明實(shí)施例二提供的一種solr集群的自動(dòng)擴(kuò)容系統(tǒng)示意圖;
圖3為本發(fā)明實(shí)施例三提供的一種solr集群的自動(dòng)擴(kuò)容方法流程圖;
圖4為本發(fā)明實(shí)施例三提供的原切片、現(xiàn)切片、目的切片示意圖;
圖5為本發(fā)明實(shí)施例四提供的現(xiàn)切片的切分示意圖。
具體實(shí)施方式
本發(fā)明的構(gòu)思在于:利用solr集群中原節(jié)點(diǎn)的數(shù)目、副本的數(shù)目,以及擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目,確定出原切片的副本的范圍和目標(biāo)切片的范圍,據(jù)此進(jìn)一步確定原切片切分后的現(xiàn)切片的數(shù)目和所處的范圍,并據(jù)此對(duì)原切片的副本進(jìn)行切分,在合并為目標(biāo)切片,從而實(shí)現(xiàn)了企業(yè)級(jí)搜索應(yīng)用服務(wù)器集群的擴(kuò)容,與現(xiàn)有技術(shù)相比節(jié)省了手動(dòng)操作的時(shí)間且提高了準(zhǔn)確率。
下面結(jié)合附圖對(duì)本發(fā)明的實(shí)施方式作進(jìn)一步說明。
實(shí)施例一
本實(shí)施例提供了一種solr集群的自動(dòng)擴(kuò)容方法,請(qǐng)參考圖1,包括:
s101、獲取solr集群中原節(jié)點(diǎn)的數(shù)目、每個(gè)原切片的副本的數(shù)目,以及solr 集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目。
在solr集群中,通常而言,一個(gè)節(jié)點(diǎn)對(duì)應(yīng)著一個(gè)切片的一個(gè)副本;而所有的切片的副本的數(shù)目均是相等的,即各個(gè)原切片的副本數(shù)是相等的,其中原切片是指在solr集群擴(kuò)容前存在的切片;若solr集群中原節(jié)點(diǎn)的數(shù)目是m,副本的數(shù)目為r,則各個(gè)范圍不同的原切片的數(shù)目即是m/r;在進(jìn)行擴(kuò)容時(shí),需要根據(jù)需求增加相應(yīng)的節(jié)點(diǎn),這里新增的節(jié)點(diǎn)數(shù)一般而言不是任意的,需要根據(jù)副本的數(shù)目而定,如原切片的副本的數(shù)目r=1,則新增節(jié)點(diǎn)的數(shù)目只要為大于1的正整數(shù)即可;若原切片的副本的數(shù)目r=2,則需要新增節(jié)點(diǎn)的數(shù)目為2的倍數(shù),以此類推,新增節(jié)點(diǎn)的數(shù)目應(yīng)該是副本的數(shù)目r的倍數(shù)。為了保證擴(kuò)容操作的可行性,在獲取solr集群中原節(jié)點(diǎn)的數(shù)目m和solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目n之后,可以判斷獲取到的原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n是否是合理的,其中m、n均是正整數(shù);這里的原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n,可以是輸入的數(shù)值,此時(shí)需要判斷輸入的原節(jié)點(diǎn)的數(shù)目m和實(shí)際情況是否符合,以及新增節(jié)點(diǎn)數(shù)n是否滿足以上條件;若是系統(tǒng)自動(dòng)獲取的,則一般不需對(duì)原節(jié)點(diǎn)的數(shù)目m進(jìn)行判斷,而僅需對(duì)新增的節(jié)點(diǎn)數(shù)進(jìn)行判斷,看其是否符合要求。
s102、根據(jù)原節(jié)點(diǎn)的數(shù)目以及每個(gè)原切片的副本的數(shù)目,確定需要切分的各個(gè)原切片的副本的第一參數(shù)。
根據(jù)原節(jié)點(diǎn)的數(shù)目以及每個(gè)原切片的副本的數(shù)目,可以確定范圍不同的原切片的數(shù)目,即m/r;在實(shí)際操作時(shí),由于各個(gè)切片均有副本,而在切分時(shí)僅僅需要對(duì)所有不同切片的其中一個(gè)副本進(jìn)行切分即可,則此時(shí)可以從中選擇這m/r個(gè)范圍不同的原切片的副本,作為需要切分的原切片的副本。各個(gè)原切片的副本中,有一個(gè)是作為主副本而存在的,在各個(gè)主副本能夠正常工作的前提下,優(yōu)選各個(gè)原切片的主副本作為需要切分的原切片的副本,若是某些原切片的主 副本有故障,則選擇該原切片的其他副本作為需要切分的原切片的副本;當(dāng)然,除去這種選擇方式,還可以直接隨機(jī)選取所有不同的原切片中的一個(gè)副本,或者其他便于操作的選擇方式均可。
第一參數(shù),是指需要切分的原切片的參數(shù),一般是各個(gè)需要切分的原切片的所處的范圍。進(jìn)一步說,各個(gè)需要切分的原切片在哈希環(huán)內(nèi)所處的范圍。第一參數(shù)主要表征的是在擴(kuò)容前,各個(gè)需要切分的原切片的位置、范圍大小等信息。選擇了m/r個(gè)需要切分的原切片的副本后,各個(gè)原切片的副本在哈希環(huán)內(nèi)所處的范圍也就確定了。各個(gè)原切片副本將整個(gè)哈希環(huán)平分,每個(gè)原切片的副本在哈希環(huán)中所處的范圍的大小是相等的,因此,可以據(jù)此確定各個(gè)需要切分的原切片的副本在哈希環(huán)中所處的范圍。整個(gè)哈希環(huán)的范圍是0x00-0xffffffff,所有的需要切分的原切片的副本組合在一起即是一個(gè)完整的哈希環(huán),則各個(gè)原切片的副本的范圍大小為(0x00-0xffffffff)r/m。
s103、根據(jù)原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目以及每個(gè)原切片的副本的數(shù)目,確定各個(gè)目的切片的第二參數(shù)。目的切片是solr集群擴(kuò)容后所要達(dá)到的最終切片的切分結(jié)果,目的切片是由原切片的副本切分后形成的現(xiàn)切片,再由現(xiàn)切片進(jìn)行相應(yīng)的合并而成。各個(gè)目的切片所占的范圍大小同樣是相等的。由于原節(jié)點(diǎn)的數(shù)目是m,新增的節(jié)點(diǎn)數(shù)目是n,則目標(biāo)節(jié)點(diǎn)的數(shù)目則是(m+n),而每個(gè)原切片的副本的數(shù)目是r,在擴(kuò)容前后各個(gè)切片的副本的數(shù)目不變,因此目的切片的數(shù)目即是(m+n)/r。
第二參數(shù)與第一參數(shù)類似,是指目的切片的參數(shù),一般是solr集群擴(kuò)容后的狀態(tài)下,各個(gè)目的切片所處的范圍。進(jìn)一步說,是各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍。第二參數(shù)主要表征的是,在擴(kuò)容后,各個(gè)目的切片在新的solr集群中應(yīng)該處于什么樣的一個(gè)位置,即各個(gè)目的切片的位置、范圍大小等信息。 確定目的切片的數(shù)目為(m+n)/r之后,各個(gè)目的切片所占的范圍也就確定了。各個(gè)目的切片將整個(gè)哈希環(huán)平分,每個(gè)目的切片在哈希環(huán)中所占的范圍大小是相等的,因此,可以據(jù)此確定各個(gè)目的切片在哈希環(huán)中所處的范圍;由于整個(gè)哈希環(huán)的范圍是0x00-0xffffffff,則各個(gè)目的切片的范圍大小為(0x00-0xffffffff)r/(m+n)。
s104、根據(jù)第一參數(shù)和第二參數(shù),對(duì)需要切分的各個(gè)原切片的副本進(jìn)行切分,得到現(xiàn)切片。
根據(jù)第一參數(shù)和第二參數(shù),可以確定原切片切分后的現(xiàn)切片的數(shù)目及其在哈希環(huán)內(nèi)所處的范圍。
現(xiàn)切片是由需要切分的原切片的副本切分后產(chǎn)生的,且任何一個(gè)現(xiàn)切片的范圍不會(huì)大于原切片的范圍;現(xiàn)切片的數(shù)目、各個(gè)現(xiàn)切片的范圍大小根據(jù)各個(gè)原切片所處的范圍以及目的切片所處的范圍所確定。
確定了現(xiàn)切片的數(shù)目,各個(gè)現(xiàn)切片所處的范圍,則此時(shí)據(jù)此對(duì)原切片進(jìn)行切分,使切分后的現(xiàn)切片滿足現(xiàn)切片的數(shù)目和各個(gè)現(xiàn)切片的范圍的要求。
s105、根據(jù)第二參數(shù)對(duì)現(xiàn)切片進(jìn)行相應(yīng)的合并,得到目的切片。
在對(duì)原切片進(jìn)行切分后,原切片變?yōu)榱爽F(xiàn)切片;現(xiàn)切片需要在步驟s103中確定出的目的切片的第二參數(shù),或者說目的切片在哈希環(huán)內(nèi)所處的范圍,將現(xiàn)切片進(jìn)行相應(yīng)的合并;這里的合并一般只能在所處的范圍相鄰的現(xiàn)切片之間進(jìn)行;合并后所形成的目的切片需滿足步驟s103中所確定的各個(gè)目的切片的第二參數(shù)的要求。
在將現(xiàn)切片進(jìn)行合并形成了目的切片之后,還需要將原切片和對(duì)應(yīng)的數(shù)據(jù)刪除;這里的原切片,主要是指在選擇需要切分的原切片時(shí),每個(gè)不同的范圍的原切片僅選取了一個(gè)副本進(jìn)行切分,那么其他的副本作為擴(kuò)容前的切片在擴(kuò) 容后已經(jīng)沒有作用,此時(shí)應(yīng)該將其刪除,在相應(yīng)的節(jié)點(diǎn)生成新的目的切片的副本。
擴(kuò)容后,各個(gè)節(jié)點(diǎn)會(huì)生成新的路由表;在刪除冗余的原切片以及數(shù)據(jù)之后,還可以檢測(cè)各個(gè)新生成的路由表以及各個(gè)節(jié)點(diǎn)的數(shù)據(jù)量,判斷擴(kuò)容是否完成。
本實(shí)施例中的solr集群的節(jié)點(diǎn)一般是基于一致性哈希路由,一致性哈希路由的特點(diǎn)是具有平衡性,其使得各個(gè)節(jié)點(diǎn)對(duì)應(yīng)的切片的范圍一致,存儲(chǔ)的數(shù)據(jù)量也相等。
實(shí)施例二
本實(shí)施例提供了一種solr集群自動(dòng)擴(kuò)容裝置,請(qǐng)參考圖2,包括:
獲取模塊21,用于獲取solr集群中原節(jié)點(diǎn)的數(shù)目、每個(gè)切片的副本的數(shù)目,以及solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目;
第一分析模塊22,用于根據(jù)原節(jié)點(diǎn)的數(shù)目以及副本的數(shù)目,確定需要切分的各個(gè)原切片的副本的第一參數(shù);
第二分析模塊23,用于根據(jù)原節(jié)點(diǎn)的數(shù)目、新增節(jié)點(diǎn)的數(shù)目以及每個(gè)原切片的副本的數(shù)目,確定各個(gè)目的切片的第二參數(shù);
切分模塊25,用于根據(jù)第一參數(shù)和第二參數(shù),對(duì)需要切分的各個(gè)原切片的副本進(jìn)行切分,得到現(xiàn)切片;
合并模塊26,用于根據(jù)第二分析模塊23確定的各個(gè)目的切片的第二參數(shù),對(duì)現(xiàn)切片進(jìn)行相應(yīng)的合并,得到目的切片。
在solr集群中,通常而言,一個(gè)節(jié)點(diǎn)對(duì)應(yīng)著一個(gè)切片的一個(gè)副本;而所有的切片的副本的數(shù)目均是相等的,即各個(gè)原切片的副本數(shù)是相等的,其中原切片是指在solr集群擴(kuò)容前存在的切片;若solr集群中原節(jié)點(diǎn)的數(shù)目是m,副本的數(shù)目為r,則各個(gè)范圍不同的原切片的數(shù)目即是m/r;再進(jìn)行擴(kuò)容時(shí),需要根據(jù)需求增加相應(yīng)的節(jié)點(diǎn),這里新增的節(jié)點(diǎn)數(shù)一般而言不是任意的,需要根據(jù)副 本的數(shù)目而定,如原切片的副本的數(shù)目r=1,則新增節(jié)點(diǎn)的數(shù)目只要為大于1的正整數(shù)即可;若原切片的副本的數(shù)目r=2,則需要新增節(jié)點(diǎn)的數(shù)目為2的倍數(shù),以此類推,新增節(jié)點(diǎn)的數(shù)目應(yīng)該是副本的數(shù)目r的倍數(shù)。為了保證擴(kuò)容操作的可行性,還包括確定模塊27,用于在獲取solr集群中原節(jié)點(diǎn)的數(shù)目m和solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目n之后,可以判斷獲取到的原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n是否是合理的,其中m、n均是正整數(shù);這里的原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n,可以是輸入的數(shù)值,此時(shí)需要判斷輸入的原節(jié)點(diǎn)的數(shù)目m和實(shí)際情況是否符合,以及新增節(jié)點(diǎn)數(shù)n是否滿足以上條件;若是系統(tǒng)自動(dòng)獲取的,則一般不需對(duì)原節(jié)點(diǎn)的數(shù)目m進(jìn)行判斷,而僅需對(duì)新增的節(jié)點(diǎn)數(shù)進(jìn)行判斷,看其是否符合要求。
第一參數(shù),是指需要切分的原切片的參數(shù),一般是各個(gè)需要切分的原切片的所處的范圍。進(jìn)一步說,各個(gè)需要切分的原切片在哈希環(huán)內(nèi)所處的范圍。第一參數(shù)主要表征的是在擴(kuò)容前,各個(gè)需要切分的原切片的位置、范圍大小等信息。第一分析模塊22包括第一數(shù)目子模塊221和第一范圍子模塊222;第一數(shù)目子模塊221用于根據(jù)原節(jié)點(diǎn)的數(shù)目以及每個(gè)原切片的副本的數(shù)目,可以確定范圍不同的原切片的數(shù)目,即m/r;第一范圍子模塊222則根據(jù)這需要切分的原切片的數(shù)目,確定各個(gè)原切片的副本在哈希環(huán)內(nèi)所處的范圍。各個(gè)不同的原切片的副本將整個(gè)哈希環(huán)平分,每個(gè)原切片的副本在哈希環(huán)中所處的范圍的大小是相等的,因此,可以據(jù)此確定各個(gè)需要切分的原切片的副本在哈希環(huán)中所處的范圍。整個(gè)哈希環(huán)的范圍是0x00-0xffffffff,所有的需要切分的原切片的副本組合在一起即是一個(gè)完整的哈希環(huán),則各個(gè)原切片的副本的范圍大小為(0x00-0xffffffff)r/m。
第一數(shù)目子模塊221還包括選擇子模塊2211,由于各個(gè)切片均有副本,而 在切分時(shí)僅僅需要對(duì)所有不同切片的其中一個(gè)副本進(jìn)行切分即可,因此選擇子模塊2211則用于從中選擇這m/r個(gè)范圍不同的原切片的副本,作為需要切分的原切片的副本。各個(gè)原切片的副本中,有一個(gè)是作為主副本而存在的,在各個(gè)主副本能夠正常工作的前提下,優(yōu)選各個(gè)原切片的主副本作為需要切分的原切片的副本,若是某些原切片的主副本有故障,則選擇該原切片的其他副本作為需要切分的原切片的副本;當(dāng)然,除去這種選擇方式,還可以直接隨機(jī)選取所有不同的原切片中的一個(gè)副本,或者其他便于操作的選擇方式均可。
第二參數(shù)與第一參數(shù)類似,是指目的切片的參數(shù),一般是solr集群擴(kuò)容后的狀態(tài)下,各個(gè)目的切片所處的范圍。進(jìn)一步說,是各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍。第二參數(shù)主要表征的是,在擴(kuò)容后,各個(gè)目的切片在新的solr集群中應(yīng)該處于什么樣的一個(gè)位置,即各個(gè)目的切片的位置、范圍大小等信息。第二分析模塊23包括第二數(shù)目子模塊231和第二范圍子模塊232;第二數(shù)目子模塊231用于根據(jù)原節(jié)點(diǎn)的數(shù)目m、新增節(jié)點(diǎn)的數(shù)目n確定目標(biāo)節(jié)點(diǎn)的數(shù)目,即是(m+n),并根據(jù)目標(biāo)節(jié)點(diǎn)的數(shù)目(m+n)以及副本的數(shù)目r確定目的切片的數(shù)目,即是(m+n)/r。目的切片是solr集群擴(kuò)容后所要達(dá)到的最終切片的切分結(jié)果,目的切片是由原切片切分后形成的現(xiàn)切片,再由現(xiàn)切片進(jìn)行相應(yīng)的合并而成。各個(gè)目的切片所占的范圍大小同樣是相等的。
第二范圍子模塊232則用于根據(jù)該目的切片的數(shù)目確定各個(gè)目的切片在哈希環(huán)內(nèi)所處的范圍;確定目的切片的數(shù)目為(m+n)/r之后,各個(gè)目的切片所占的范圍也就確定了。各個(gè)目的切片將整個(gè)哈希環(huán)平分,每個(gè)目的切片在哈希環(huán)中所占的范圍大小是相等的,因此,可以據(jù)此確定各個(gè)目的切片在哈希環(huán)中所處的范圍;由于整個(gè)哈希環(huán)的范圍是0x00-0xffffffff,則各個(gè)目的切片的范圍大小為(0x00-0xffffffff)r/(m+n)。
在將現(xiàn)切片進(jìn)行合并形成了目的切片之后,還需要將原切片和對(duì)應(yīng)的數(shù)據(jù)刪除;這里的原切片,主要是指在選擇需要切分的原切片時(shí),每個(gè)不同的范圍的原切片僅選取了一個(gè)副本進(jìn)行切分,那么其他的副本作為擴(kuò)容前的切片在擴(kuò)容后已經(jīng)沒有作用,此時(shí)應(yīng)該將其刪除,在相應(yīng)的節(jié)點(diǎn)生成新的目的切片的副本。因此,還包括刪除模塊28,用于在將現(xiàn)切片進(jìn)行合成之后,刪除原切片以及對(duì)應(yīng)的數(shù)據(jù)。
擴(kuò)容后,各個(gè)節(jié)點(diǎn)會(huì)生成新的路由表;最后,還可以包括最終確認(rèn)模塊29,用于在刪除冗余的原切片以及數(shù)據(jù)之后,檢測(cè)各個(gè)新生成的路由表以及各個(gè)節(jié)點(diǎn)的數(shù)據(jù)量,判斷擴(kuò)容是否完成。
本實(shí)施例中的solr集群的節(jié)點(diǎn)一般是基于一致性哈希路由,一致性哈希路由的特點(diǎn)是具有平衡性,其使得各個(gè)節(jié)點(diǎn)對(duì)應(yīng)的切片的范圍一致,存儲(chǔ)的數(shù)據(jù)量也相等。
實(shí)施例三
本實(shí)施例提供了一種solr集群自動(dòng)擴(kuò)容方法,請(qǐng)參考圖3,包括:
s301、獲取solr集群中原節(jié)點(diǎn)的數(shù)目m、副本的數(shù)目r,以及solr集群擴(kuò)容后新增節(jié)點(diǎn)的數(shù)目n。
s302、判斷原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n是否合理。這里的合理是指原節(jié)點(diǎn)的數(shù)目m和新增節(jié)點(diǎn)的數(shù)目n均是正整數(shù),且新增節(jié)點(diǎn)的數(shù)目n應(yīng)該是副本的數(shù)目r的倍數(shù)。
s303、根據(jù)原節(jié)點(diǎn)的數(shù)目m和副本的數(shù)目r,確定需要切分的原切片的數(shù)目。其中需要切分的原切片的數(shù)目為m/r。
s304、根據(jù)需要切分的原切片的數(shù)目m/r,確定需要切分的各個(gè)原切片在哈希環(huán)中所處的范圍。其中需要切分的各個(gè)原切片的哈希環(huán)范圍大小為 (0x00-0xffffffff)r/m。
s305、根據(jù)原節(jié)點(diǎn)的數(shù)目m、新增節(jié)點(diǎn)的數(shù)目n以及副本的數(shù)目r,確定目的切片的數(shù)目。其中目的切片的數(shù)目為(m+n)/r。
s306、根據(jù)目的切片的數(shù)目(m+n)/r,確定各個(gè)目的切片在哈希環(huán)中所處的范圍。其中各個(gè)目的切片的哈希環(huán)范圍大小為(0x00-0xffffffff)r/(m+n)。
s307、比對(duì)需要切分的各個(gè)原切片所處的范圍與各個(gè)目的切片所處的范圍,確定原切片切分后的現(xiàn)切片的數(shù)目及其所處的范圍。
例如,請(qǐng)參考圖4,當(dāng)m=3,r=1,n=2時(shí),原切片41和目的切片42的比對(duì)結(jié)果是現(xiàn)切片43的數(shù)目為7,且各個(gè)現(xiàn)切片43的范圍大小分別為切分前的原切片的3/5、2/5、1/5、3/5、1/5、2/5、3/5,也分別是哈希環(huán)的1/5、2/15、1/15、1/5、1/15、2/15、1/5。
s308、根據(jù)步驟s307中確定的現(xiàn)切片的數(shù)目和所處的范圍,對(duì)原切片進(jìn)行相應(yīng)的切分。
s309、根據(jù)步驟s306中確定的目的切片所處的范圍,對(duì)現(xiàn)切片進(jìn)行相應(yīng)的合并。
s310、將冗余的原切片和數(shù)據(jù)刪除。
本實(shí)施例中的solr集群的節(jié)點(diǎn)一般是基于一致性哈希路由,一致性哈希路由的特點(diǎn)是具有平衡性,其使得各個(gè)節(jié)點(diǎn)對(duì)應(yīng)的切片的范圍一致,存儲(chǔ)的數(shù)據(jù)量也相等。
實(shí)施例四
本實(shí)施例提供了一種原切片的副本的切分方法,請(qǐng)參考圖5:
在本實(shí)施例中,solr集群中原節(jié)點(diǎn)的數(shù)目m=4,每個(gè)原切片的副本的數(shù)目r=2,而solr集群擴(kuò)容后新增的節(jié)點(diǎn)數(shù)為n=2;
根據(jù)原節(jié)點(diǎn)的數(shù)目m=4以及每個(gè)原切片的副本的數(shù)目r=2可以確定,范圍不同的原切片的數(shù)目是m/r=2,分別是第一原切片511、第二原切片512,也即是說,哈希環(huán)被第一原切片511和第二原切片512均分為了兩份,各個(gè)原切片的副本在哈希環(huán)中所占的范圍均是整個(gè)哈希環(huán)的1/2;
從兩個(gè)第一原切片511的副本和第二原切片512的副本中,分別選擇一個(gè)作為需要切分的原切片的副本;
根據(jù)原節(jié)點(diǎn)的數(shù)目m=4、新增節(jié)點(diǎn)的數(shù)目n=2,可以確定目的節(jié)點(diǎn)的數(shù)目是m+n=6;因此,進(jìn)一步的,目的切,52的數(shù)目是(m+n)/r=3,即三個(gè)目的切片52,各個(gè)目的切片52在哈希環(huán)內(nèi)所占的范圍均是1/3;
比對(duì)原切片的副本在哈希環(huán)內(nèi)所占的范圍情況以及目的切片在哈希環(huán)內(nèi)所占范圍情況,可以確定出,對(duì)原切片的副本進(jìn)行切分后的現(xiàn)切片的數(shù)目是4,各個(gè)現(xiàn)切片分別是第一現(xiàn)切片531、第二現(xiàn)切片532、第三現(xiàn)切片533、第四現(xiàn)切片534,四個(gè)現(xiàn)切片占原切片的范圍大小分別是:2/3、1/3、1/3、2/3,同時(shí),在整個(gè)哈希環(huán)中所占的范圍大小分別為1/3、1/6、1/6、1/3;
根據(jù)上述四個(gè)現(xiàn)切片的范圍大小,對(duì)選定的需要切分的原切片的副本進(jìn)行切分;
根據(jù)目的切片52在哈希環(huán)中所占的范圍,對(duì)切分后的現(xiàn)切片進(jìn)行相應(yīng)的合并,生成目的切片52:將第二現(xiàn)切片532和第三現(xiàn)切片533進(jìn)行合并,形成目的切片52;第一現(xiàn)切片531和第四現(xiàn)切片534直接作為目的切片52。
以上內(nèi)容是結(jié)合具體的實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡(jiǎn)單推演或替換, 都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。