本發(fā)明涉及大數(shù)據(jù)運(yùn)算領(lǐng)域,更具體地,涉及一種大數(shù)據(jù)運(yùn)算的集群選舉方法及系統(tǒng)。
背景技術(shù):
現(xiàn)在的大數(shù)據(jù)運(yùn)算各有各的集群處理模式,算法不統(tǒng)一。公司自研的系統(tǒng)甚至沒有做集群,導(dǎo)致當(dāng)系統(tǒng)崩潰后無法正常工作,影響大數(shù)據(jù)處理的正常執(zhí)行。而且現(xiàn)存很多老系統(tǒng)都沒有考慮高可用集群處理方案,或者只采用簡(jiǎn)單的vrrp協(xié)議進(jìn)行高可用處理。當(dāng)虛擬化系統(tǒng)中的控制節(jié)點(diǎn)或者網(wǎng)絡(luò)節(jié)點(diǎn)因?yàn)楦鞣N原因停止服務(wù)時(shí),系統(tǒng)就無法控制虛擬化系統(tǒng)的計(jì)算機(jī)網(wǎng)絡(luò)功能,只能等待服務(wù)的恢復(fù)。而使用vrrp的方案,一般只有兩臺(tái)機(jī)器執(zhí)行熱備模式,容易發(fā)生腦裂導(dǎo)致ip沖突,無法正常服務(wù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明為克服上述現(xiàn)有技術(shù)所述的至少一種缺陷(不足),提供一種使普通非高可用的系統(tǒng)實(shí)現(xiàn)高可用功能的集群選舉方法。
本發(fā)明還提供一種使普通非高可用的系統(tǒng)實(shí)現(xiàn)高可用功能的集群選舉系統(tǒng)。
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下:
一種集群選舉方法,包括:
從服務(wù)器無法獲得主服務(wù)器的心跳時(shí),從服務(wù)器的狀態(tài)改為候選服務(wù)器,并向其余服務(wù)器發(fā)出請(qǐng)求選為主服務(wù)器的投票請(qǐng)求;
當(dāng)候選服務(wù)器收到超過預(yù)設(shè)閾值數(shù)量的服務(wù)器投票,則選舉成為主服務(wù)器并更改狀態(tài)為主服務(wù)器;
當(dāng)候選服務(wù)器在等待投票結(jié)果時(shí)其他服務(wù)器成為主服務(wù)器,則候選服務(wù)器更改狀態(tài)為從服務(wù)器;
當(dāng)沒有任一候選服務(wù)器選舉為主服務(wù)器時(shí),候選服務(wù)器重新發(fā)送投票請(qǐng)求直至有一候選服務(wù)器成為主服務(wù)器為止。
本發(fā)明在主服務(wù)器停止服務(wù)時(shí),采用投票選舉的方式來重新選出主服務(wù)器,其他服務(wù)器作為從服務(wù)器,該方法在不影響原有系統(tǒng)功能前提下,改變?cè)邢到y(tǒng)的部署方案,使用分布式選舉協(xié)議來組成各種應(yīng)用集群,使本來不具備高可用的系統(tǒng)具備了高可用能力,此方法對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng)非常適用,不需要在設(shè)計(jì)階段過多地考慮高可用方案,集中業(yè)務(wù)實(shí)現(xiàn)。
上述方案中,當(dāng)候選服務(wù)器選舉成為主服務(wù)器并更改狀態(tài)為主服務(wù)器后,該新主服務(wù)器還向其他服務(wù)器發(fā)送主服務(wù)器心跳,其他服務(wù)器收到心跳后更改狀態(tài)為從服務(wù)器。新主服務(wù)器通過發(fā)出心跳方式來通知其他服務(wù)器,其他服務(wù)器可以及時(shí)將狀態(tài)更改為從服務(wù)器,使新的主服務(wù)器能夠及時(shí)接管服務(wù),使系統(tǒng)恢復(fù)正常的工作狀態(tài)。
上述方案中,所述預(yù)設(shè)閾值數(shù)量為所有服務(wù)器的一半。
上述方案中,候選服務(wù)器更改狀態(tài)為從服務(wù)器后,主服務(wù)器和從服務(wù)器同步狀態(tài)信息。狀態(tài)信息的同步不但可以使系統(tǒng)能夠恢復(fù)到正常狀態(tài),而且還能夠使系統(tǒng)恢復(fù)到停止服務(wù)前的狀態(tài),保證信息的完整性。
一種集群選舉系統(tǒng),包括服務(wù)器,服務(wù)器包括:
狀態(tài)更改模塊,用于當(dāng)服務(wù)器無法獲得主服務(wù)器的心跳時(shí),更改狀態(tài)為候選服務(wù)器;
投票請(qǐng)求模塊,用于向其余服務(wù)器發(fā)出請(qǐng)求選為主服務(wù)器的投票請(qǐng)求;
投票結(jié)果接收模塊,用于接收服務(wù)器投票結(jié)果,當(dāng)收到超過預(yù)設(shè)閾值數(shù)量的服務(wù)器投票時(shí)選舉成為主服務(wù)器并通知狀態(tài)更改模塊更改狀態(tài)為主服務(wù)器;
狀態(tài)更改模塊還用于服務(wù)器選舉成為主服務(wù)器時(shí)更改狀態(tài)為主服務(wù)器;
主服務(wù)器通知模塊,用于獲知其他服務(wù)器成為主服務(wù)器并通知狀態(tài)更改模塊;
狀態(tài)更改模塊還用于當(dāng)獲知其他服務(wù)器成為主服務(wù)器后更改狀態(tài)為從服務(wù)器。
本發(fā)明的系統(tǒng)在主服務(wù)器停止服務(wù)時(shí),利用各個(gè)模塊基于投票選舉的方式來重新選出主服務(wù)器,其他服務(wù)器作為從服務(wù)器,該系統(tǒng)在不影響原有系統(tǒng)功能前提下,改變?cè)邢到y(tǒng)的部署方案,使用投票請(qǐng)求模塊中的分布式選舉協(xié)議來組成各種應(yīng)用集群,使本來不具備高可用的系統(tǒng)具備了高可用能力,此系統(tǒng)對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng)非常適用,不需要在設(shè)計(jì)階段過多地考慮高可用方案,集中業(yè)務(wù)實(shí)現(xiàn)。
上述方案中,投票請(qǐng)求模塊還用于當(dāng)狀態(tài)更改模塊將狀態(tài)改為候選服務(wù)器后的一定時(shí)間內(nèi)未再次更改狀態(tài)時(shí),重新向其余服務(wù)器發(fā)出投票請(qǐng)求。設(shè)定重新投票請(qǐng)求機(jī)制,可以使得系統(tǒng)可以自發(fā)性地重新發(fā)出投票請(qǐng)求直至重新選出新的主服務(wù)器為止,保證系統(tǒng)在停止服務(wù)后能選出新服務(wù)器來重新啟動(dòng)系統(tǒng)的服務(wù)。
上述方案中,服務(wù)器還包括:
心跳發(fā)送模塊,用于在狀態(tài)更改模塊更改狀態(tài)為主服務(wù)器后,向其他服務(wù)器發(fā)送主服務(wù)器心跳;
狀態(tài)更改模塊還用于在收到新主服務(wù)器發(fā)送的心跳后更改狀態(tài)為從服務(wù)器。
設(shè)置心跳發(fā)送模塊用于向等待選舉結(jié)果的服務(wù)器發(fā)出通知,使其他服務(wù)器能夠結(jié)束投票請(qǐng)求的過程,重新修改狀態(tài)為從服務(wù)器,以確保及時(shí)重新啟動(dòng)系統(tǒng)的服務(wù)。
上述方案中,所述預(yù)設(shè)閾值數(shù)量為所有服務(wù)器的一半。
上述方案中,服務(wù)器還包括:
狀態(tài)同步模塊,用于在狀態(tài)更改模塊更改狀態(tài)為從服務(wù)器或主服務(wù)器后,與其他服務(wù)器進(jìn)行狀態(tài)信息同步操作。狀態(tài)同步模塊的設(shè)置不但可以使系統(tǒng)能夠恢復(fù)到正常狀態(tài),而且還能夠使系統(tǒng)恢復(fù)到停止服務(wù)前的狀態(tài),保證信息的完整性。
與現(xiàn)有技術(shù)相比,本發(fā)明技術(shù)方案的有益效果是:
本發(fā)明使用分布式選舉協(xié)議來組成大數(shù)據(jù)運(yùn)算的集群的高可用方案,其在不影響原有系統(tǒng)功能的前提下,稍微改變了原有系統(tǒng)的部署方案,通過協(xié)議選舉主服務(wù)器,其余服務(wù)器作為從服務(wù)器,當(dāng)主服務(wù)器停止服務(wù)器時(shí),從服務(wù)器沖洗選出主服務(wù)器,新的主服務(wù)器接管服務(wù),使得普通非高可用的系統(tǒng)實(shí)現(xiàn)高可用功能,保證系統(tǒng)崩潰后能夠通過自發(fā)性的選舉來恢復(fù)系統(tǒng)的正常工作,保證了大數(shù)據(jù)處理的正常執(zhí)行。對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng)尤其適用,不需要在設(shè)計(jì)階段過多考慮高可用方案,實(shí)用性強(qiáng)。
附圖說明
圖1為本發(fā)明一種集群選舉方法具體實(shí)施例的流程圖。
圖2為本發(fā)明一種集群選舉系統(tǒng)具體實(shí)施例的架構(gòu)圖。
具體實(shí)施方式
附圖僅用于示例性說明,不能理解為對(duì)本專利的限制;
為了更好說明本實(shí)施例,附圖某些部件會(huì)有省略、放大或縮小,并不代表實(shí)際產(chǎn)品的尺寸;
對(duì)于本領(lǐng)域技術(shù)人員來說,附圖中某些公知結(jié)構(gòu)及其說明可能省略是可以理解的。
在本發(fā)明的描述中,在本發(fā)明的描述中,除非另有說明,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上。
在本發(fā)明的描述中,需要說明的是,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以是通過中間媒介間接連接,可以說兩個(gè)元件內(nèi)部的連通。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明的具體含義。
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的說明。
實(shí)施例1
如圖1所示,為本發(fā)明一種集群選舉方法具體實(shí)施例的流程圖。參見圖1,本具體實(shí)施例一種集群選舉方法的具體步驟包括:
S1.從服務(wù)器無法獲得主服務(wù)器的心跳時(shí),所有從服務(wù)器的狀態(tài)改為候選服務(wù)器,并向其余服務(wù)器發(fā)出請(qǐng)求選為主服務(wù)器的投票請(qǐng)求。
通常系統(tǒng)啟動(dòng)或者主服務(wù)器掉線時(shí)都會(huì)導(dǎo)致從服務(wù)器無法獲得主服務(wù)器的心跳,此時(shí)可以通過預(yù)設(shè)一定的時(shí)間閾值或者無法獲得主服務(wù)器心跳的次數(shù)來給予從服務(wù)器等待主服務(wù)器心跳的時(shí)間,當(dāng)超過一定的時(shí)間閾值或者超過一定次數(shù)無法獲得主服務(wù)器心跳(如3次無法獲得主服務(wù)器心跳)后從服務(wù)器仍無法獲得主服務(wù)器的心跳時(shí),從服務(wù)器即可啟動(dòng)狀態(tài)更改步驟,將其自身狀態(tài)修改為候選服務(wù)器,并各自向除自身之外的其他服務(wù)器發(fā)出投票請(qǐng)求。時(shí)間閾值的設(shè)定一方面可以保證等待心跳的時(shí)間,另一方面又可以保證從服務(wù)器能夠及時(shí)地啟動(dòng)投票選舉步驟來重新選出主服務(wù)器,以保證系統(tǒng)能夠在崩潰后的一定時(shí)間內(nèi)及時(shí)恢復(fù)正常工作。
S2.當(dāng)候選服務(wù)器收到超過預(yù)設(shè)閾值數(shù)量的服務(wù)器投票,則選舉成為主服務(wù)器并更改狀態(tài)為主服務(wù)器;預(yù)設(shè)的閾值數(shù)量可以預(yù)先設(shè)定,比如設(shè)定預(yù)設(shè)的閾值數(shù)量為所有服務(wù)器數(shù)量的一半,由于此時(shí)原主服務(wù)器處于掉線狀態(tài),因此,所述所有服務(wù)器指的是除掉掉線的原主服務(wù)器外的其他所有服務(wù)器。通常從服務(wù)器發(fā)出投票包,其余候選服務(wù)器收到投票包后進(jìn)行是否同意的投票,當(dāng)總數(shù)量超過一半的服務(wù)器同意則對(duì)應(yīng)的從服務(wù)器被選舉為新的主服務(wù)器。
當(dāng)候選服務(wù)器在等待投票結(jié)果時(shí)其他服務(wù)器成為主服務(wù)器,則候選服務(wù)器更改狀態(tài)為從服務(wù)器;
當(dāng)沒有任一候選服務(wù)器選舉為主服務(wù)器時(shí),候選服務(wù)器重新發(fā)送投票請(qǐng)求重新執(zhí)行步驟S2。
在步驟S2中,當(dāng)候選服務(wù)器選舉成為主服務(wù)器并更改狀態(tài)為主服務(wù)器后還執(zhí)行步驟S3:
S3.該新主服務(wù)器還向其他服務(wù)器發(fā)送主服務(wù)器心跳,其他服務(wù)器收到心跳后更改狀態(tài)為從服務(wù)器。此步驟的設(shè)置目的在于通過發(fā)出心跳方式來通知其他服務(wù)器已經(jīng)選出主服務(wù)器,其他服務(wù)器可以及時(shí)將狀態(tài)更改為從服務(wù)器,使新的主服務(wù)器能夠及時(shí)接管服務(wù),使系統(tǒng)恢復(fù)正常的工作狀態(tài)。
在步驟S3中,候選服務(wù)器更改狀態(tài)為從服務(wù)器后,主服務(wù)器和從服務(wù)器同步狀態(tài)信息。狀態(tài)信息的同步指的是主服務(wù)器選舉成功后,向各個(gè)從服務(wù)器同步來自應(yīng)用系統(tǒng)的狀態(tài)信息。狀態(tài)信息的同步不但可以使系統(tǒng)能夠恢復(fù)到正常狀態(tài),而且還能夠使系統(tǒng)恢復(fù)到停止服務(wù)前的狀態(tài),保證信息的完整性。
實(shí)施例2
本發(fā)明還提供一種集群選舉系統(tǒng)來實(shí)現(xiàn)非高可用系統(tǒng)的高可用方案。
如圖2所示,為本具體實(shí)施例一種集群選舉系統(tǒng)的架構(gòu)圖。參見圖2,本具體實(shí)施例一種集群選舉系統(tǒng)具體包括服務(wù)器,服務(wù)器可以通過選定或者選舉的方式來確定主服務(wù)器和從服務(wù)器,當(dāng)主服務(wù)器停止服務(wù)器時(shí),可以利用本發(fā)明的系統(tǒng)來沖洗選舉出主服務(wù)器來提供服務(wù)。具體地,服務(wù)器包括:
狀態(tài)更改模塊110,用于當(dāng)服務(wù)器無法獲得主服務(wù)器的心跳時(shí),更改狀態(tài)為候選服務(wù)器;服務(wù)器的原狀態(tài)為從服務(wù)器狀態(tài),系統(tǒng)啟動(dòng)或者主服務(wù)器掉線時(shí)都會(huì)導(dǎo)致從服務(wù)器無法獲得主服務(wù)器的心跳,在無法獲得主服務(wù)器心跳后,狀態(tài)更改模塊110可以通過預(yù)設(shè)一定的時(shí)間閾值來等待主服務(wù)器心跳,當(dāng)超過一定的時(shí)間閾值后服務(wù)器仍無法獲得主服務(wù)器的心跳時(shí),狀態(tài)更改模塊110即可進(jìn)行狀態(tài)更改,將服務(wù)器的狀態(tài)修改為候選服務(wù)器。
投票請(qǐng)求模塊120,用于向其余服務(wù)器發(fā)出請(qǐng)求選為主服務(wù)器的投票請(qǐng)求;
投票結(jié)果接收模塊130,用于接收服務(wù)器投票結(jié)果,當(dāng)收到超過預(yù)設(shè)閾值數(shù)量的服務(wù)器投票時(shí)將本服務(wù)器選舉成為主服務(wù)器并通知狀態(tài)更改模塊110更改狀態(tài)為主服務(wù)器;預(yù)設(shè)的閾值數(shù)量可以預(yù)先設(shè)定,比如設(shè)定預(yù)設(shè)的閾值數(shù)量為所有服務(wù)器數(shù)量的一半。
狀態(tài)更改模塊110還用于服務(wù)器選舉成為主服務(wù)器時(shí)更改狀態(tài)為主服務(wù)器;
主服務(wù)器通知模塊140,用于獲知其他服務(wù)器成為主服務(wù)器并通知狀態(tài)更改模塊110;
狀態(tài)更改模塊110還用于當(dāng)獲知其他服務(wù)器成為主服務(wù)器后更改狀態(tài)為從服務(wù)器。
考慮到投票選舉并非每次都能夠成功,比如沒有一個(gè)服務(wù)器收到的服務(wù)器投票超過半數(shù)服務(wù)器時(shí),則會(huì)導(dǎo)致沒有一個(gè)服務(wù)器成功選舉為主服務(wù)器。因此,投票請(qǐng)求模塊120還用于當(dāng)狀態(tài)更改模塊110將狀態(tài)改為候選服務(wù)器后的一定時(shí)間內(nèi)未再次更改狀態(tài)時(shí),重新向其余服務(wù)器發(fā)出投票請(qǐng)求。服務(wù)器狀態(tài)未再次更改表示仍然處于候選服務(wù)器狀態(tài),并未更改為從服務(wù)器狀態(tài)或者主服務(wù)器狀態(tài),即表示仍沒有一個(gè)服務(wù)器被選舉為新的主服務(wù)器。設(shè)定重新投票請(qǐng)求機(jī)制,可以使得系統(tǒng)可以自發(fā)性地重新發(fā)出投票請(qǐng)求直至重新選出新的主服務(wù)器為止,保證系統(tǒng)在停止服務(wù)后能選出新服務(wù)器來重新啟動(dòng)系統(tǒng)的服務(wù)。
為了能夠及時(shí)通知其他服務(wù)器已經(jīng)選舉出新的主服務(wù)器,服務(wù)器中還設(shè)置了心跳發(fā)送模塊150,用于在狀態(tài)更改模塊110更改狀態(tài)為主服務(wù)器后,向其他服務(wù)器發(fā)送主服務(wù)器心跳;
狀態(tài)更改模塊110還用于在收到新主服務(wù)器發(fā)送的心跳后更改狀態(tài)為從服務(wù)器。
設(shè)置心跳發(fā)送模塊150用于向等待選舉結(jié)果的服務(wù)器發(fā)出通知,使其他服務(wù)器能夠結(jié)束投票請(qǐng)求的過程,重新修改狀態(tài)為從服務(wù)器,以確保及時(shí)重新啟動(dòng)系統(tǒng)的服務(wù)。
具體實(shí)施過程中,服務(wù)器中還包括狀態(tài)同步模塊160,用于在狀態(tài)更改模塊110更改狀態(tài)為從服務(wù)器或主服務(wù)器后,與其他服務(wù)器進(jìn)行狀態(tài)信息同步操作。狀態(tài)同步模塊的設(shè)置不但可以使系統(tǒng)能夠恢復(fù)到正常狀態(tài),而且還能夠使系統(tǒng)恢復(fù)到停止服務(wù)前的狀態(tài),保證信息的完整性。
本發(fā)明使用分布式選舉協(xié)議來組成大數(shù)據(jù)運(yùn)算的集群的高可用方案,其在不影響原有系統(tǒng)功能的前提下,稍微改變了原有系統(tǒng)的部署方案,通過協(xié)議選舉主服務(wù)器,其余服務(wù)器作為從服務(wù)器,當(dāng)主服務(wù)器停止服務(wù)器時(shí),從服務(wù)器沖洗選出主服務(wù)器,新的主服務(wù)器接管服務(wù),使得普通非高可用的系統(tǒng)實(shí)現(xiàn)高可用功能,保證系統(tǒng)崩潰后能夠通過自發(fā)性的選舉來恢復(fù)系統(tǒng)的正常工作,保證了大數(shù)據(jù)處理的正常執(zhí)行。對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng)尤其適用,不需要在設(shè)計(jì)階段過多考慮高可用方案,實(shí)用性強(qiáng)。
相同或相似的標(biāo)號(hào)對(duì)應(yīng)相同或相似的部件;
附圖中描述位置關(guān)系的用于僅用于示例性說明,不能理解為對(duì)本專利的限制;
顯然,本發(fā)明的上述實(shí)施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對(duì)本發(fā)明的實(shí)施方式的限定。對(duì)于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動(dòng)。這里無需也無法對(duì)所有的實(shí)施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。