專利名稱:一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫配置領(lǐng)域,特別涉及一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法。
背景技術(shù):
Cassandra是目前在分布式大數(shù)據(jù)存儲(chǔ)領(lǐng)域,應(yīng)用比較廣泛的一種非關(guān)系數(shù)據(jù)庫。分布式數(shù)據(jù)庫可以稱為為集群,一般分布式數(shù)據(jù)庫有兩個(gè)核心模塊,存儲(chǔ)引擎模塊和分布式模塊。Cassandra的存儲(chǔ)引擎模塊類似于Google的BigTable模型,而分布式模塊來自于Amazon的Dynamo模型。兩種模塊的完美結(jié)合,成為存儲(chǔ)和處理大規(guī)模非結(jié)構(gòu)化及半結(jié)構(gòu)化數(shù)據(jù)最理想的解決方案。與領(lǐng)域內(nèi)其它分布式非關(guān)系數(shù)據(jù)庫相比,其突出優(yōu)勢(shì)在于1、無單點(diǎn)故障=Cassandra集群中沒有中心節(jié)點(diǎn),任何一臺(tái)服務(wù)器發(fā)生故障都不 會(huì)影響整個(gè)集群的對(duì)外服務(wù)質(zhì)量,這意味著其可以提供不間斷的穩(wěn)定服務(wù)。2、便利的故障恢復(fù)及水平擴(kuò)展能力通過簡單的替換故障服務(wù)器實(shí)現(xiàn)故障恢復(fù),通過添加新服務(wù)器來實(shí)現(xiàn)水平擴(kuò)展,支持迅速擴(kuò)張的數(shù)據(jù)規(guī)模;恢復(fù)和擴(kuò)展期間,不需改動(dòng)或重啟現(xiàn)有節(jié)點(diǎn)。3、寫入速度快,性能高在Cassandra中,寫操作被均勻的分散到集群的各個(gè)節(jié)點(diǎn)上,且數(shù)據(jù)首先被保存在內(nèi)存中,達(dá)到一定量再批量持久化到磁盤;所以,其寫入性能極佳。Cassandra集群的部署策略,基于Dynamo模型來實(shí)現(xiàn)。Cassandra集群由若干個(gè)節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)都保存集群內(nèi)所有其它節(jié)點(diǎn)的信息列表,每個(gè)節(jié)點(diǎn)的信息和其所在服務(wù)器的IP地址一一對(duì)應(yīng)。節(jié)點(diǎn)之間的通訊,通過Gossip協(xié)議相互發(fā)送各種狀態(tài)和事件消息進(jìn)行通訊,進(jìn)行集群內(nèi)的狀態(tài)同步和事件通知。消息體中包含發(fā)送者的IP地址,以表明來源;這種機(jī)制,使得一臺(tái)服務(wù)器上只能部署一個(gè)Cassandra節(jié)點(diǎn)。如圖1所示,為Cassandra集群的拓?fù)浣Y(jié)構(gòu)圖,其中,9個(gè)節(jié)點(diǎn)組成一個(gè)集群,共使用了 9臺(tái)服務(wù)器。按照BigTable模型,Cassandra集群中,每個(gè)節(jié)點(diǎn)的數(shù)據(jù)文件到了一定數(shù)目,將按一定規(guī)則進(jìn)行合并成更大的文件。合并機(jī)制的存在,使得一個(gè)節(jié)點(diǎn)不能很好的利用多塊磁盤,如果合并后的大文件超出了一塊磁盤的容量,將無法存放。Cassandra使用的Dynamo模型,要求集群中節(jié)點(diǎn)和服務(wù)器必須--對(duì)應(yīng),同時(shí)
Cassandra所采用的BigTable存儲(chǔ)引擎,也限制了一個(gè)節(jié)點(diǎn)只能使用一塊磁盤,大大限制了對(duì)多磁盤服務(wù)器的硬件利用率。
發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題在于提供了一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法,以克服Cassandra只能在一臺(tái)服務(wù)器上部署一個(gè)節(jié)點(diǎn),無法充分利用多塊磁盤的局限。為解決上述問題,本發(fā)明提供的一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法包括,在集群中服務(wù)器上部署多個(gè)節(jié)點(diǎn)后,為每個(gè)節(jié)點(diǎn)增加一個(gè)節(jié)點(diǎn)信息類;將節(jié)點(diǎn)信息類加入節(jié)點(diǎn)信息列表,將節(jié)點(diǎn)信息類加入到消息的消息頭,并更新網(wǎng)絡(luò)連接模塊中的節(jié)點(diǎn)信息列表,通知到集群中所有節(jié)點(diǎn);
將服務(wù)器磁盤進(jìn)行編號(hào),并列出服務(wù)器磁盤的二維列表;按照節(jié)點(diǎn)數(shù)目計(jì)算出把一致性哈希環(huán)等分的令牌Token列表;按照深度優(yōu)先策略遍歷二維表,將磁盤編號(hào)和Token —一對(duì)應(yīng)起來;挑選兩個(gè)以上節(jié)點(diǎn)做種子節(jié)點(diǎn),所述種子節(jié)點(diǎn)不能在同一臺(tái)服務(wù)器上,將種子節(jié)點(diǎn)與token信息寫入到程序的配置文件,部署到節(jié)點(diǎn)對(duì)應(yīng)的磁盤文件系統(tǒng),然后啟動(dòng)種子節(jié)點(diǎn),再依次啟動(dòng)其它節(jié)點(diǎn),以完成集群搭建。上述的方法,其中,所述節(jié)點(diǎn)信息類封裝所在服務(wù)器的IP地址,以及節(jié)點(diǎn)間通訊端口 ;以IP地址以及內(nèi)部通訊端口作為一個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí)。上述的方法,其中,所述通知到集群中所有節(jié)點(diǎn)具體通過Gossip協(xié)議通知其他節(jié)點(diǎn);Gossip協(xié)議的實(shí)現(xiàn)過程當(dāng)一個(gè)節(jié)點(diǎn)信息發(fā)生改變,隨機(jī)選擇2-3個(gè)節(jié)點(diǎn),根據(jù)IP地址和端口號(hào)告知信息的變化,隨機(jī)選擇的2-3個(gè)節(jié)點(diǎn)又會(huì)隨機(jī)的選擇其他節(jié)點(diǎn)告知,依次類推,所有的節(jié)點(diǎn)都會(huì)接收到集群中任一節(jié)點(diǎn)信息的改變。上述的方法,其中,把哈希環(huán)等分是使集群中各節(jié)點(diǎn)所分配的數(shù)據(jù)是等量的。上述的方法,其中,所述啟動(dòng)種子節(jié)點(diǎn),再依次啟動(dòng)其它節(jié)點(diǎn),以完成集群搭建具體包括,種子節(jié)點(diǎn)先啟動(dòng),其他節(jié)點(diǎn)啟動(dòng)之后即刻將自身的信息發(fā)給種子節(jié)點(diǎn),然后種子節(jié)點(diǎn)再將收到的信息轉(zhuǎn)發(fā)集群中所有節(jié)點(diǎn),如此循環(huán)往復(fù),實(shí)現(xiàn)集群中所有節(jié)點(diǎn)信息的共享,完成集群搭建。采用本發(fā)明的技術(shù)方案,提供了一種更靈活高效的部署方式,進(jìn)而解決現(xiàn)有技術(shù)硬件利用率低的問題;同時(shí),設(shè)計(jì)了一種靈活的節(jié)點(diǎn)部署方式,避免了在一臺(tái)服務(wù)器上存儲(chǔ)一個(gè)數(shù)據(jù)的多個(gè)拷貝;該技術(shù)方案充分利用磁盤性能(數(shù)據(jù)庫的主要瓶頸在于磁盤的隨機(jī)尋道性能),有效利用多塊磁盤,單臺(tái)服務(wù)器能保存更多數(shù)據(jù);對(duì)比原來的部署方法,綜合硬件成本大幅降低。
此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本發(fā)明的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中圖1是Cassandra集群的拓?fù)浣Y(jié)構(gòu)圖;圖2是本發(fā)明實(shí)施例流程圖;圖3是利用3臺(tái)服務(wù)器搭建集群示意圖。
具體實(shí)施例方式為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖2所示,是本發(fā)明實(shí)施例流程圖,提供了一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法,在一臺(tái)服務(wù)器上部署多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)部署在一塊獨(dú)立的磁盤上,從而充分利用多塊磁盤的性能和容量。具體包括,步驟S201,在一臺(tái)服務(wù)器上部署多個(gè)節(jié)點(diǎn)后,為每個(gè)節(jié)點(diǎn)增加一個(gè)節(jié)點(diǎn)信息類,將節(jié)點(diǎn)信息類加入節(jié)點(diǎn)信息列表,將節(jié)點(diǎn)信息類加入到消息的消息頭,并更新網(wǎng)絡(luò)連接模塊中的節(jié)點(diǎn)信息列表,通知到集群中所有節(jié)點(diǎn);所述節(jié)點(diǎn)信息類,封裝所在服務(wù)器的IP地址,以及節(jié)點(diǎn)間通訊端口 ;以IP地址以及內(nèi)部通訊端口作為一個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí);這樣的話,如果一臺(tái)服務(wù)器上部署了多個(gè)節(jié)點(diǎn),盡管其所在服務(wù)器的IP地址相同,但端口不同,故不會(huì)弓丨起沖突。所述節(jié)點(diǎn)信息列表即集群中所有節(jié)點(diǎn)信息的集合。通知到集群中所有節(jié)點(diǎn)具體通過Gossip協(xié)議通知其他節(jié)點(diǎn);Gossip協(xié)議的實(shí)現(xiàn)過程當(dāng)一個(gè)節(jié)點(diǎn)信息發(fā)生改變,它會(huì)隨機(jī)選擇2-3個(gè)節(jié)點(diǎn)(根據(jù)他們的IP地址和端口號(hào))告知信息的變化,隨機(jī)選擇的2-3個(gè)節(jié)點(diǎn)又會(huì)隨機(jī)的選擇其他節(jié)點(diǎn)告知,依次類推,所有的節(jié)點(diǎn)都會(huì)接收到集群中任一節(jié)點(diǎn)信息的改變。消息模塊即Cassandra中專門負(fù)責(zé)消息管理的模塊。節(jié)點(diǎn)之間發(fā)送的每條消息都是由消息頭和消息體組成,消息頭即包含消息的類型和來源的信息。當(dāng)兩個(gè)節(jié)點(diǎn)之間通訊時(shí),需知道接收方的端口號(hào),在舊的網(wǎng)絡(luò)連接模塊中,集群中所有節(jié)點(diǎn)擁有相同的端口號(hào),這樣就導(dǎo)致一臺(tái)機(jī)器只能部署一個(gè)節(jié)點(diǎn),而新的網(wǎng)絡(luò)連接模塊中,節(jié)點(diǎn)信息列表(包含集群中所有節(jié)點(diǎn)的端口號(hào))的存在解決了這一弊端,由于每個(gè)節(jié)點(diǎn)都擁有集群中所有節(jié)點(diǎn)的節(jié)點(diǎn)信息列表,從而使節(jié)點(diǎn)之間的通訊變得透明且便捷。修改之后,服務(wù)器和節(jié)點(diǎn)之前一對(duì)一的關(guān)系解除,變?yōu)橐粚?duì)多的關(guān)系。一臺(tái)服務(wù)器上部署幾個(gè)節(jié)點(diǎn),可以根據(jù)其磁盤數(shù)目靈活配置。如圖3所示,是利用3臺(tái)服務(wù)器搭建集群示意圖,假設(shè)現(xiàn)在有3臺(tái)服務(wù)器,每臺(tái)服務(wù)器上有3塊可供使用的磁盤,用來搭建一 9個(gè)節(jié)點(diǎn)的集群。步驟S202,將服務(wù)器磁盤進(jìn)行編號(hào),并列出服務(wù)器磁盤的二維列表;如服務(wù)器A,B, C,A1、A2、A3是服務(wù)器A上的磁盤編號(hào),B1、B2、B3是服務(wù)器B上的磁盤編號(hào),Cl、C2、C3是服務(wù)器C上的磁盤編號(hào),對(duì)應(yīng)的二維列表如下
權(quán)利要求
1.一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法,其特征在于,包括,在集群中服務(wù)器上部署多個(gè)節(jié)點(diǎn)后,為每個(gè)節(jié)點(diǎn)增加一個(gè)節(jié)點(diǎn)信息類;將節(jié)點(diǎn)信息類加入節(jié)點(diǎn)信息列表,將節(jié)點(diǎn)信息類加入到消息的消息頭,并更新網(wǎng)絡(luò)連接模塊中的節(jié)點(diǎn)信息列表,通知到集群中所有節(jié)點(diǎn);將服務(wù)器磁盤進(jìn)行編號(hào),并列出服務(wù)器磁盤的二維列表;按照節(jié)點(diǎn)數(shù)目計(jì)算出把一致性哈希環(huán)等分的令牌Token列表;按照深度優(yōu)先策略遍歷二維表,將磁盤編號(hào)和Token —一對(duì)應(yīng)起來;挑選兩個(gè)以上節(jié)點(diǎn)做種子節(jié)點(diǎn),所述種子節(jié)點(diǎn)不能在同一臺(tái)服務(wù)器上,將種子節(jié)點(diǎn)與token信息寫入到程序的配置文件,部署到節(jié)點(diǎn)對(duì)應(yīng)的磁盤文件系統(tǒng),然后啟動(dòng)種子節(jié)點(diǎn),再依次啟動(dòng)其它節(jié)點(diǎn),以完成集群搭建。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述節(jié)點(diǎn)信息類封裝所在服務(wù)器的IP地址,以及節(jié)點(diǎn)間通訊端口 ;以IP地址以及內(nèi)部通訊端口作為一個(gè)節(jié)點(diǎn)的唯一標(biāo)識(shí)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述通知到集群中所有節(jié)點(diǎn)具體通過Gossip協(xié)議通知其他節(jié)點(diǎn);Gossip協(xié)議的實(shí)現(xiàn)過程當(dāng)一個(gè)節(jié)點(diǎn)信息發(fā)生改變,隨機(jī)選擇2-3個(gè)節(jié)點(diǎn),根據(jù)IP地址和端口號(hào)告知信息的變化,隨機(jī)選擇的2-3個(gè)節(jié)點(diǎn)又會(huì)隨機(jī)的選擇其他節(jié)點(diǎn)告知,依次類推,所有的節(jié)點(diǎn)都會(huì)接收到集群中任一節(jié)點(diǎn)信息的改變。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,把哈希環(huán)等分是使集群中各節(jié)點(diǎn)所分配的數(shù)據(jù)是等量的。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述啟動(dòng)種子節(jié)點(diǎn),再依次啟動(dòng)其它節(jié)點(diǎn),以完成集群搭建具體包括,種子節(jié)點(diǎn)先啟動(dòng),其他節(jié)點(diǎn)啟動(dòng)之后即刻將自身的信息發(fā)給種子節(jié)點(diǎn),然后種子節(jié)點(diǎn)再將收到的信息轉(zhuǎn)發(fā)集群中所有節(jié)點(diǎn),如此循環(huán)往復(fù),實(shí)現(xiàn)集群中所有節(jié)點(diǎn)信息的共享,完成集群搭建。
全文摘要
本發(fā)明涉及數(shù)據(jù)庫配置領(lǐng)域,提供了一種集群中單機(jī)多節(jié)點(diǎn)的實(shí)現(xiàn)方法,包括在集群中服務(wù)器上部署多個(gè)節(jié)點(diǎn)后,為每個(gè)節(jié)點(diǎn)增加一個(gè)節(jié)點(diǎn)信息類;將節(jié)點(diǎn)信息類加入節(jié)點(diǎn)信息列表,將節(jié)點(diǎn)信息類加入到消息的消息頭,并更新網(wǎng)絡(luò)連接模塊中的節(jié)點(diǎn)信息列表,通知到集群中所有節(jié)點(diǎn); 將服務(wù)器磁盤進(jìn)行編號(hào),并列出服務(wù)器磁盤的二維列表;按照節(jié)點(diǎn)數(shù)目計(jì)算出把一致性哈希環(huán)等分的令牌Token列表;按照深度優(yōu)先策略遍歷二維表,將磁盤編號(hào)和Token一一對(duì)應(yīng)起來;挑選兩個(gè)以上節(jié)點(diǎn)做種子節(jié)點(diǎn),將種子節(jié)點(diǎn)與token信息寫入到程序的配置文件,部署到節(jié)點(diǎn)對(duì)應(yīng)的磁盤文件系統(tǒng),啟動(dòng)種子節(jié)點(diǎn),再依次啟動(dòng)其它節(jié)點(diǎn),以完成集群搭建。
文檔編號(hào)G06F17/30GK102999571SQ20121044764
公開日2013年3月27日 申請(qǐng)日期2012年11月9日 優(yōu)先權(quán)日2012年11月9日
發(fā)明者曹繼光 申請(qǐng)人:深圳市宜搜科技發(fā)展有限公司