一種增加、刪除服務(wù)器節(jié)點(diǎn)的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種增加、刪除服務(wù)器節(jié)點(diǎn)的方法及
目.0
【背景技術(shù)】
[0002]Redis是一個(gè)高性能的key-value數(shù)據(jù)庫(kù),Redis的出現(xiàn)很大程度彌補(bǔ)了 memcached這類key-value存儲(chǔ)的不足,對(duì)關(guān)系數(shù)據(jù)庫(kù)起到較好的補(bǔ)充作用,在訂閱-發(fā)布系統(tǒng)、排行榜相關(guān)系統(tǒng)、緩存系統(tǒng)、大型集群分布式系統(tǒng)中發(fā)揮著不可替代的作用。
[0003]Redis集群(Cluster)增加或者移除Redis節(jié)點(diǎn)時(shí),通常是采用Redis服務(wù)的復(fù)制功能,通過(guò)將迀移的目標(biāo)服務(wù)器設(shè)置為被迀移服務(wù)器的slave服務(wù)器,待slave追上master進(jìn)度之后,將寫(xiě)Redis服務(wù)器停機(jī),主從服務(wù)器完全同步后修改寫(xiě)Redis業(yè)務(wù)配置,指向slave服務(wù)器,并斷開(kāi)主從關(guān)系,恢復(fù)寫(xiě)Redis業(yè)務(wù)。
[0004]現(xiàn)有技術(shù)不足在于:
[0005]現(xiàn)有Redis集群增刪節(jié)點(diǎn)時(shí)會(huì)導(dǎo)致少量數(shù)據(jù)丟失,對(duì)業(yè)務(wù)造成一定影響。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)實(shí)施例提出了一種增加、刪除服務(wù)器節(jié)點(diǎn)的方法及裝置,以解決現(xiàn)有技術(shù)中Redis集群增刪節(jié)點(diǎn)時(shí)會(huì)導(dǎo)致少量數(shù)據(jù)丟失,對(duì)業(yè)務(wù)造成一定影響的技術(shù)問(wèn)題。
[0007]本申請(qǐng)實(shí)施例提供了一種增加服務(wù)器節(jié)點(diǎn)的方法,包括如下步驟:
[0008]接收增加服務(wù)器節(jié)點(diǎn)的指令;
[0009]將所述新增節(jié)點(diǎn)加入到預(yù)先生成的第二哈希hash環(huán);
[0010]將所述第二hash環(huán)上所述新增節(jié)點(diǎn)與所述新增節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述新增節(jié)點(diǎn)上;
[0011 ]在迀移過(guò)程中,寫(xiě)數(shù)據(jù)寫(xiě)入所述第二hash環(huán),讀數(shù)據(jù)先從第二hash環(huán)讀取,在讀取不到時(shí)從預(yù)先生成的第一 hash環(huán)讀取。
[0012]本申請(qǐng)實(shí)施例提供了一種刪除服務(wù)器節(jié)點(diǎn)的方法,包括如下步驟:
[0013]接收刪除服務(wù)器節(jié)點(diǎn)的指令;
[0014]將所述刪除節(jié)點(diǎn)從預(yù)先生成的第二哈希hash環(huán)上刪除;
[0015]將預(yù)先生成的第二哈希hash環(huán)上所述刪除節(jié)點(diǎn)與所述刪除節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述刪除節(jié)點(diǎn)順時(shí)針的下一節(jié)點(diǎn)上;
[0016]在迀移過(guò)程中,寫(xiě)數(shù)據(jù)寫(xiě)入所述第二hash環(huán),讀數(shù)據(jù)先從第二hash環(huán)讀取,在讀取不到時(shí)從預(yù)先生成的第一 hash環(huán)讀取。
[0017]本申請(qǐng)實(shí)施例提供了一種增加服務(wù)器節(jié)點(diǎn)的裝置,包括:
[0018]第一接收模塊,用于接收增加服務(wù)器節(jié)點(diǎn)的指令;
[0019]增加模塊,用于將所述新增節(jié)點(diǎn)加入到預(yù)先生成的第二哈希hash環(huán);
[0020]第一迀移模塊,用于將所述第二hash環(huán)上所述新增節(jié)點(diǎn)與所述新增節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述新增節(jié)點(diǎn)上;
[0021 ]讀寫(xiě)模塊,用于在迀移過(guò)程中,寫(xiě)數(shù)據(jù)寫(xiě)入所述第二hash環(huán),讀數(shù)據(jù)先從第二hash環(huán)讀取,在讀取不到時(shí)從預(yù)先生成的第一 hash環(huán)讀取。
[0022]本申請(qǐng)實(shí)施例提供了一種刪除服務(wù)器節(jié)點(diǎn)的裝置,包括:
[0023]第二接收模塊,用于接收刪除服務(wù)器節(jié)點(diǎn)的指令;
[0024]刪除模塊,用于將所述刪除節(jié)點(diǎn)從預(yù)先生成的第二哈希hash環(huán)上刪除;
[0025]第一迀移模塊,用于將預(yù)先生成的第二哈希hash環(huán)上所述刪除節(jié)點(diǎn)與所述刪除節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述刪除節(jié)點(diǎn)順時(shí)針的下一節(jié)點(diǎn)上;
[0026]第二讀寫(xiě)模塊,用于在迀移過(guò)程中,寫(xiě)數(shù)據(jù)寫(xiě)入所述第二hash環(huán),讀數(shù)據(jù)先從第二hash環(huán)讀取,在讀取不到時(shí)從預(yù)先生成的第一 hash環(huán)讀取。
[0027]有益效果如下:
[0028]本申請(qǐng)實(shí)施例所提供的增加、刪除服務(wù)器節(jié)點(diǎn)的方法及裝置,接收到增加、刪除服務(wù)器節(jié)點(diǎn)的指令后,在預(yù)先生成的第二 hash環(huán)上進(jìn)行鍵key的迀移,在迀移過(guò)程中寫(xiě)數(shù)據(jù)寫(xiě)入第二 hash環(huán),讀數(shù)據(jù)先從第二 hash環(huán)讀取,讀取不到時(shí)再?gòu)念A(yù)先生成的第一 hash環(huán)讀取。由于本申請(qǐng)實(shí)施例所提供的方案,在數(shù)據(jù)迀移過(guò)程中,采用雙hash環(huán)來(lái)處理數(shù)據(jù)的讀寫(xiě),既可以防止數(shù)據(jù)讀寫(xiě)或存儲(chǔ)錯(cuò)誤,又可以無(wú)需系統(tǒng)停機(jī)等操作,避免由于系統(tǒng)停機(jī)導(dǎo)致數(shù)據(jù)丟失、對(duì)業(yè)務(wù)造成影響。
【附圖說(shuō)明】
[0029]下面將參照附圖描述本申請(qǐng)的具體實(shí)施例,其中:
[0030]圖1示出了本申請(qǐng)實(shí)施例中業(yè)務(wù)系統(tǒng)的框架示意圖;
[0031]圖2示出了本申請(qǐng)實(shí)施例中增加服務(wù)器節(jié)點(diǎn)的方法實(shí)施的流程示意圖;
[0032]圖3示出了本申請(qǐng)實(shí)施例中刪除服務(wù)器節(jié)點(diǎn)的方法實(shí)施的流程示意圖;
[0033]圖4示出了本申請(qǐng)實(shí)施例中增加服務(wù)器節(jié)點(diǎn)的過(guò)程示意圖;
[0034]圖5示出了本申請(qǐng)實(shí)施例中刪除服務(wù)器節(jié)點(diǎn)的過(guò)程示意圖;
[0035]圖6示出了本申請(qǐng)實(shí)施例中增加服務(wù)器節(jié)點(diǎn)的裝置的結(jié)構(gòu)示意圖;
[0036]圖7示出了本申請(qǐng)實(shí)施例中刪除服務(wù)器節(jié)點(diǎn)的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0037]為了使本申請(qǐng)的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本申請(qǐng)的示例性實(shí)施例進(jìn)行進(jìn)一步詳細(xì)的說(shuō)明,顯然,所描述的實(shí)施例僅是本申請(qǐng)的一部分實(shí)施例,而不是所有實(shí)施例的窮舉。并且在不沖突的情況下,本說(shuō)明中的實(shí)施例及實(shí)施例中的特征可以互相結(jié)合。
[0038]發(fā)明人在發(fā)明過(guò)程中注意到:
[0039]Redis 3.0版本中的Cluster模塊,同樣實(shí)現(xiàn)了redis集群的動(dòng)態(tài)增刪節(jié)點(diǎn)的功能,它采用預(yù)分好的16384個(gè)hash slot,相當(dāng)于有16384個(gè)實(shí)例,每個(gè)實(shí)例里面映射了很多key,映射算法為CRC16(key)% 16384,所以增刪節(jié)點(diǎn)進(jìn)行數(shù)據(jù)迀移的時(shí)候,只需要移動(dòng)這些hashslotXluster內(nèi)部實(shí)現(xiàn)了由于移動(dòng)hash slot而帶來(lái)的數(shù)據(jù)不一致的處理。
[0040]Redis Cluster之前的版本,需要把Redis升級(jí)到3.0以后的版本才能使用Cluster功能,可能對(duì)當(dāng)前使用老版本的用戶帶來(lái)一定的影響。
[0041]針對(duì)現(xiàn)有技術(shù)的不足,本申請(qǐng)實(shí)施例提出了一種增加、刪除服務(wù)器節(jié)點(diǎn)的方法及裝置,下面進(jìn)行說(shuō)明。
[0042]圖1示出了本申請(qǐng)實(shí)施例中業(yè)務(wù)系統(tǒng)的框架示意圖,如圖所示,業(yè)務(wù)系統(tǒng)可以包括:業(yè)務(wù)平臺(tái)、中間件平臺(tái)和Redis服務(wù)器集群。所述業(yè)務(wù)平臺(tái)通過(guò)中間件平臺(tái)與所述Redis服務(wù)器集群相連。其中,
[0043]業(yè)務(wù)平臺(tái)負(fù)責(zé)對(duì)業(yè)務(wù)需求的具體實(shí)現(xiàn);
[0044]中間件平臺(tái),上層對(duì)所述業(yè)務(wù)平臺(tái)提供Redis應(yīng)用程序編程接口(API,Applicat1n Programming Interface)服務(wù),下層與Redis服務(wù)器集群進(jìn)行服務(wù)交互,支持Redis集群以及主備切換。
[0045]圖2示出了本申請(qǐng)實(shí)施例中增加服務(wù)器節(jié)點(diǎn)的方法實(shí)施的流程示意圖,如圖所示,所述增加服務(wù)器節(jié)點(diǎn)的方法可以包括如下步驟:
[0046]步驟201、接收增加服務(wù)器節(jié)點(diǎn)的指令;
[0047]步驟202、將所述新增節(jié)點(diǎn)加入到預(yù)先生成的第二哈希hash環(huán);
[0048]步驟203、將所述第二hash環(huán)上所述新增節(jié)點(diǎn)與所述新增節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述新增節(jié)點(diǎn)上;
[0049]步驟204、在迀移過(guò)程中,寫(xiě)數(shù)據(jù)寫(xiě)入所述第二hash環(huán),讀數(shù)據(jù)先從所述第二hash環(huán)讀取,在讀取不到時(shí)從預(yù)先生成的第一 hash環(huán)讀取。
[0050]具體實(shí)施中,在初始化時(shí),可以生成兩個(gè)hash環(huán),在這兩個(gè)hash環(huán)上均可以包括映射到各節(jié)點(diǎn)的key,所述第一 hash環(huán)可以在正常情況下(S卩服務(wù)器節(jié)點(diǎn)的數(shù)量沒(méi)有變化時(shí))進(jìn)行讀寫(xiě)數(shù)據(jù),所述第二 hash環(huán)可以在增刪節(jié)點(diǎn)時(shí)進(jìn)行讀寫(xiě)數(shù)據(jù)。用戶/客戶端可以發(fā)送增加服務(wù)器節(jié)點(diǎn)的指令,所述服務(wù)器節(jié)點(diǎn)可以為redis服務(wù)器節(jié)點(diǎn)。系統(tǒng)接收到所述增加服務(wù)器節(jié)點(diǎn)的指令之后,可以將所述新增節(jié)點(diǎn)加入到預(yù)先生成的第二hash環(huán),并將所述第二hash環(huán)上所述新增節(jié)點(diǎn)與所述新增節(jié)點(diǎn)逆時(shí)針的上一節(jié)點(diǎn)之間的鍵key迀移至所述新增節(jié)點(diǎn)上。
[005?]其中,key可以為將數(shù)據(jù)通過(guò)一定的hash算法處理后映射的結(jié)果值。
[0052]在迀移過(guò)程中,如果業(yè)務(wù)平臺(tái)有寫(xiě)數(shù)據(jù)需求可以直接寫(xiě)入所述第二hash環(huán),如果業(yè)務(wù)平臺(tái)有讀數(shù)據(jù)需求可以先從所述第二 hash環(huán)讀取,在沒(méi)有讀取到時(shí)再?gòu)念A(yù)先生成的第一hash環(huán)讀取。
[0053]本申請(qǐng)實(shí)施例所提供的增加服務(wù)器節(jié)點(diǎn)的方法及裝置,接收到增加服務(wù)器節(jié)點(diǎn)的指令后,在預(yù)先生成的第二 hash環(huán)上進(jìn)行鍵key的迀移,在迀移過(guò)程中寫(xiě)數(shù)據(jù)寫(xiě)入第二 hash環(huán),讀數(shù)據(jù)先從第二 hash環(huán)讀取,讀取不到時(shí)再?gòu)念A(yù)先生成的第一 hash環(huán)讀取。
[0054]由于本申請(qǐng)實(shí)施例所提供的方案,在數(shù)據(jù)迀移過(guò)程中,采用雙hash環(huán)來(lái)處理數(shù)據(jù)的讀寫(xiě),既可以防止數(shù)據(jù)讀寫(xiě)或存儲(chǔ)錯(cuò)誤,又可以無(wú)需系統(tǒng)停機(jī)等操作,避免由于系統(tǒng)停機(jī)導(dǎo)致數(shù)據(jù)丟失、對(duì)業(yè)務(wù)造成影響。
[0055]實(shí)施中,所述將所述第二hash環(huán)上所述新增節(jié)點(diǎn)與所述新增節(jié)點(diǎn)逆時(shí)針的上一