国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種服務集群的制作方法

      文檔序號:11548436閱讀:257來源:國知局
      一種服務集群的制造方法與工藝

      本發(fā)明涉及大數(shù)據(jù)技術領域,尤其涉及一種服務集群。



      背景技術:

      現(xiàn)如今,hadoophdfs已成為大數(shù)據(jù)領域最主流的分布式文件存儲系統(tǒng),而名字節(jié)點(namenode)是hdfs中最重要的管理節(jié)點,它的作用主要體現(xiàn)在以下幾個方面:負責維護著整個文件系統(tǒng)的文件目錄樹;存儲文件系統(tǒng)的元數(shù)據(jù)信息;負責接收用戶的操作請求。可見,名字節(jié)點的穩(wěn)定運行對于hdfs來說是至關重要的。

      在hadoop1.x中,hdfs存在名字節(jié)點單點故障(spof,singlepointsoffailure)問題,所謂單點故障,即單個點發(fā)生故障的時候會波及到整個系統(tǒng)或者網(wǎng)絡,從而導致整個系統(tǒng)或者網(wǎng)絡的癱瘓。在hadoop2.x版本中,hadoop提出了基于zookeeper的hdfsha方案,在該方案中,采用一個主名字節(jié)點和一個備用名字節(jié)點,同時引入了zookeeper集群和主備切換控制器,主備切換控制器用于檢測主名字節(jié)點和一個備用名字節(jié)點的狀態(tài)信息,當主名字節(jié)點發(fā)生故障時,借助zookeeper集群的leader選舉功能實現(xiàn)主備切換。

      基于zookeeper的hdfsha方案中,采用一個主名字節(jié)點和一個備用名字節(jié)點的方案雖然在一定程度上緩解了hdfs的單點故障問題,但在該方案中需要引入zookeeper集群,該集群最少需要3臺服務器,對于只想單獨使用hdfs的場景而言,顯得非常冗余,且增加了運維成本。



      技術實現(xiàn)要素:

      有鑒于此,本發(fā)明提供了一種服務集群,用以解決現(xiàn)有技術中的于zookeeper的hdfsha方案中,需要引入zookeeper集群,對于只想單獨使用hdfs的場景而言,顯得非常冗余,且增加了運維成本的問題,其技術方案如下:

      一種服務集群,所述服務集群包括:多個主名字節(jié)點和至少一個備用名字節(jié)點,每個名字節(jié)點維護有主名字節(jié)點列表、備用名字節(jié)點列表以及故障名字節(jié)點列表;

      所述備用名字節(jié)點,按預設的周期性的向各個主名字節(jié)點發(fā)送測試信息以測試所述各個主名字節(jié)點是否正常工作,當一主名字節(jié)點發(fā)生故障時,將所述主名字節(jié)點列表中第n個正常工作的主名字節(jié)點作為目標主名字節(jié)點,向所述目標主名字節(jié)點發(fā)送選主申請,所述選主申請用于申請自身成為主名字節(jié)點,其中,n的取值為1…n,n為所述主名字節(jié)點列表中正常工作的主名字節(jié)點的個數(shù);

      所述目標主名字節(jié)點,接收到所述備用名字節(jié)點發(fā)送的選主申請之后,觸發(fā)各個主名字節(jié)點不再接收客戶端的數(shù)據(jù)操作請求,將所述備用名字節(jié)點添加至自身的主名字節(jié)點列表中,并將所述備用名字節(jié)點從自身的備用名字節(jié)點列表中刪除,將所述發(fā)生故障的主名字節(jié)點從所述自身的主名字節(jié)點列表中刪除,并將所述發(fā)生故障的主名字節(jié)點添加至自身的故障名字節(jié)點列表中,將所述主名字節(jié)點發(fā)生故障以及所述備用名字節(jié)點成為主名字節(jié)點的信息同步給所述服務集群中的其它名字節(jié)點,以使所述其它名字節(jié)點基于所述信息更新自身的列表。

      其中,每個主名字節(jié)點還維護有元數(shù)據(jù);

      所述目標主名字節(jié)點,在將所述備用名字節(jié)點添加至所述自身的主名字節(jié)點列表中之后,將自身維護的元數(shù)據(jù)發(fā)送給成為主名字節(jié)點的所述備用名字節(jié)點。

      其中,所述目標主名字節(jié)點,在所述服務集群中其它名字節(jié)點更新完列表,并且將所述自身維護的元數(shù)據(jù)發(fā)送給成為主名字節(jié)點的所述備用名字節(jié)點之后,觸發(fā)所述服務集群中的各個主名字節(jié)點接收客戶端的數(shù)據(jù)操作請求。

      其中,所述備用名字節(jié)點為多個;

      所述目標主名字節(jié)點,在多個備用名字節(jié)點同時發(fā)送選主申請時,將第一個接收到的選主申請所對應的備用名字節(jié)點作為主名字節(jié)點添加至所述自身的主名字節(jié)點列表中。

      其中,每個主名字節(jié)點,周期性的向所述服務集群中的各個備用名字節(jié)點發(fā)送測試信息以測試各個備用名字節(jié)點是否正常工作,當目標備用名字節(jié)點發(fā)生故障時,將所述目標備用名字節(jié)點從自身的備用名字節(jié)點列表中刪除,并將所述目標備用名字節(jié)點添加至自身的故障名字節(jié)點列表中,同時,將所述目標備用名字節(jié)點發(fā)生故障的信息同步給所述服務集群中的其它名字節(jié)點。

      其中,所述服務集群提供擴展名字節(jié)點的接口,所述服務集群通過所述接口接收新增名字節(jié)點的申請;

      所述目標主名字節(jié)點,接收所述新增名字節(jié)點的申請,將所述新增的名字節(jié)點添加至所述自身的備用名字節(jié)點列表中,將新增的名字節(jié)點成為備用名字節(jié)點的信息同步給所述服務集群中的其它名字節(jié)點;

      或者,

      所述目標主名字節(jié)點,接收所述新增名字節(jié)點的申請,向新增的名字節(jié)點發(fā)送測試信息,以測試所述新增的名字節(jié)點是否正常工作,以及,當所述新增的名字節(jié)點正常工作時,將所述新增的名字節(jié)點添加至所述自身的備用名字節(jié)點列表中,將新增的名字節(jié)點成為備用名字節(jié)點的信息同步給所述服務集群中的其它名字節(jié)點。

      其中,所述目標主名字節(jié)點,按預設時間間隔向故障名字節(jié)點列表中的故障名字節(jié)點發(fā)送測試信息,以測試所述故障名字節(jié)點是否恢復正常,當所述故障名字節(jié)點恢復正常時,將恢復正常的故障名字節(jié)點從所述自身的故障名字列表中刪除,并將所述恢復正常的故障名字節(jié)點添加至所述自身的備用名字節(jié)點列表中,將所述故障名字節(jié)點恢復正常的信息同步給所述服務集群中的其它名字節(jié)點。

      一種服務集群,包括:至少一個主名字節(jié)點和多個備用名字節(jié)點,每個名字節(jié)點均存儲有元數(shù)據(jù),每個名字節(jié)點均具有節(jié)點信息,所述節(jié)點信息包括節(jié)點標識值、元數(shù)據(jù)標識值和選舉值;

      所述多個備用名字節(jié)點中的第一備用名字節(jié)點,按預設的周期向所述至少一個主名字節(jié)點發(fā)送測試信息以測試所述至少一個主名字節(jié)點是否正常工作,當至少一主名字節(jié)點發(fā)生故障時,向其它備用名字節(jié)點發(fā)送自身的節(jié)點信息以及選舉自身成為主名字節(jié)點的信息;

      所述其它備用名字節(jié)點中的第二備用名字節(jié)點,在所述第一備用名字節(jié)點的選舉值大于自身的選舉值時,如果所述第一備用名字節(jié)點的元數(shù)據(jù)標識值大于自身的元數(shù)據(jù)標識值,則將選舉所述第一備用名字節(jié)點成為主名字節(jié)點的信息作為選舉結果發(fā)送給其它備用名字節(jié)點,如果所述第一備用名字節(jié)點的元數(shù)據(jù)標識值等于自身的元數(shù)據(jù)標識,則在所述第一備用名字節(jié)點的節(jié)點標識值大于或小于自身的節(jié)點標識值時,將選舉第一備用名字節(jié)點成為主名字節(jié)點的選舉結果發(fā)送給其它備用名字節(jié)點;

      所述第一備用名字節(jié)點,在接收到的選舉結果表明大于預設數(shù)量的名字節(jié)點選舉自身成為主名字節(jié)點時,將自身設置為主名字節(jié)點。

      其中,所述第二備用名字節(jié)點,在所述第一備用名字節(jié)點的選舉值等于自身的選舉值時,判斷自身的元數(shù)據(jù)標識值是否大于第一備用名字節(jié)點的元數(shù)據(jù)標識值,如果是,則將選舉值加1,并將選舉自身成為主名字節(jié)點的信息作為選舉結果發(fā)送給其它備用名字節(jié)點。

      其中,所述第二備用名字節(jié)點,在所述第一備用名字節(jié)點的選舉值小于自身的選舉值時,將自身的節(jié)點信息發(fā)送給所述第一備用名字節(jié)點。

      上述技術方案具有如下有益效果:

      本發(fā)明提供的服務集群,備用名字節(jié)點可通過向各個主名字節(jié)點發(fā)送測試信息來獲知主名字節(jié)點是否發(fā)生故障,并在發(fā)生故障時能向目標主名字節(jié)點發(fā)送選主申請以申請自身成為主名字節(jié)點,目標主名字節(jié)點可將備用名字節(jié)點添加至主名字節(jié)點列表中,或者,多個備用節(jié)點通過選舉策略選舉出主名字節(jié)點。即本發(fā)明提供的服務集群及hdfs集群可自主發(fā)現(xiàn)名字節(jié)點的故障信息,并在某一主名字節(jié)點發(fā)生故障時,使備用名字節(jié)點成為主名字節(jié)點添加至主名字節(jié)點的列表中,而不再依賴于zookeeper集群,系統(tǒng)架構簡化,運維成本大大降低。

      附圖說明

      為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。

      圖1為本發(fā)明實施例提供的服務集群的一結構示意圖;

      圖2為本發(fā)明實施例提供的服務集群的一具體實例的結構示意圖;

      圖3為圖2示出的服務集群中一主名字節(jié)點發(fā)生故障,備用名字節(jié)點成為主名字節(jié)點后的服務集群示意圖;

      圖4為圖3示出的服務集群中擴展一名字節(jié)點后的服務集群示意圖;

      圖5為圖4示出的服務集群中的故障名字節(jié)點恢復正常后的服務集群示意圖;

      圖6a-圖6d為本發(fā)明實施例提供的服務集群中,備用名字節(jié)點選舉主名字節(jié)點的過程示意圖。

      具體實施方式

      下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

      本發(fā)明實施例提供了一種服務集群,該服務集群應用于hdfs集群,請參閱圖1,示出了該服務集群的一結構示意圖,可以包括:多個主名字節(jié)點和至少一個備用名字節(jié)點。每個名字節(jié)點均維護有三個列表,分別為主名字節(jié)點列表、備用名字節(jié)點列表以及故障名字節(jié)點列表。

      其中,主名字節(jié)點列表為服務集群中當前所有主名字節(jié)點的列表,備用名字節(jié)點列表為服務集群中當前所有備用名字節(jié)點的列表,故障名字節(jié)點列表為服務集群中當前所有故障名字節(jié)點的列表。

      備用名字節(jié)點,周期性的向服務器群中的各個主名字節(jié)點發(fā)送測試信息以測試各個主名字節(jié)點是否正常工作,當多個主名字節(jié)點中的一主名字節(jié)點發(fā)生故障時,將主名字節(jié)點列表中的第n個正常工作的主名字節(jié)點作為目標主名字節(jié)點,向目標主名字節(jié)點發(fā)送選主申請。

      其中,n的取值為1,…,n,n為主名字節(jié)點列表中正常工作的主名字節(jié)點的個數(shù)。需要說明的是,將主名字節(jié)點列表中的哪個正常工作的主名字節(jié)點作為目標主名字節(jié)點為預先指定的,示例性的,可預先指定主名字節(jié)點列表中第1個正常工作的主名字節(jié)點作為目標主名字節(jié)點,即n的取值為1,當多個主名字節(jié)點中的一主名字節(jié)點發(fā)生故障時,備用名字節(jié)點向主名字節(jié)點列表中第1個正常工作的主名字節(jié)點發(fā)送選主申請。其中,選主申請用于申請自身成為主名字節(jié)點。

      目標主名字節(jié)點,接收到備用名字節(jié)點發(fā)送的選主申請之后,觸發(fā)各個主名字節(jié)點不再接收客戶端的數(shù)據(jù)操作請求,將備用名字節(jié)點添加至自身的主名字節(jié)點列表中,并將備用名字節(jié)點從自身的備用名字節(jié)點列表中刪除,將發(fā)生故障的主名字節(jié)點從自身的主名字節(jié)點列表中刪除,并將發(fā)生故障的主名字節(jié)點添加至自身的故障名字節(jié)點列表中,同時,將主名字節(jié)點發(fā)生故障以及備用名字節(jié)點成為主名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點,以使其它名字節(jié)點基于該信息更新自身的列表。

      需要說明的是,當服務集群中存在多個備用名字節(jié)點時,可能存在多個備用名字節(jié)點同時發(fā)現(xiàn)某一主名字節(jié)點發(fā)生故障,且同時向目標主名字節(jié)點發(fā)送選主申請的情況,因此,目標集群可將第一個接收到的選主申請所對應的備用名字節(jié)點作為主名字節(jié)點添加至自身的主名字節(jié)點列表中。

      在本實施例中,服務集群中的主名字節(jié)點為多個,多個主名字節(jié)點可同時接收并處理來自用戶的操作請求,這使得,當hdfs集群規(guī)模較龐大,能夠實現(xiàn)客戶端的負載均衡。

      需要說明的是,服務集群中的每個主名字節(jié)點還維護有元數(shù)據(jù),主名字節(jié)點基于該元數(shù)據(jù)處理客戶端的數(shù)據(jù)操作請求??梢岳斫獾氖牵瑐溆妹止?jié)點在成為主名字節(jié)點之后,為了實現(xiàn)對數(shù)據(jù)操作請求的處理,需要獲得主名字節(jié)點的元數(shù)據(jù),因此,在本實例中,目標主名字節(jié)點在將備用名字節(jié)點添加至自身的主名字節(jié)點列表中之后,將自身維護的元數(shù)據(jù)發(fā)送給該成為主名字節(jié)點的備用名字節(jié)點。

      可以理解的是,目標主節(jié)點在接收到備用名字節(jié)點的選主申請之后,由于需要更新服務集群中的主名字節(jié)點,因此,觸發(fā)各個主名字節(jié)點不再接收客戶端的數(shù)據(jù)操作請求,即,將hdfs集群鎖住,當服務集群中正常工作的各個名字節(jié)點均更新完自身的列表,且目標主名字節(jié)點將自身的元數(shù)據(jù)同步給成為主名字節(jié)點的備用名字節(jié)點時,還要觸發(fā)服務集群中的各個主名字節(jié)點重新接收并處理客戶端的數(shù)據(jù)操作請求,即,將hdfs集群解鎖。

      本發(fā)明提供的服務集群,包括了多個主名字節(jié)點和至少一個備用名字節(jié)點,備用名字節(jié)點可通過向各個主名字節(jié)點發(fā)送測試信息來獲知主名字節(jié)點是否發(fā)生故障,并在主名字節(jié)點發(fā)生故障時能向目標主名字節(jié)點發(fā)送選主申請以申請自身成為主名字節(jié)點,目標主名字節(jié)點可將備用名字節(jié)點添加至主名字節(jié)點列表中。即,本發(fā)明實施例提供的服務集群可自主發(fā)現(xiàn)名字節(jié)點的故障信息,并在某一主名字節(jié)點發(fā)生故障時,使備用名字節(jié)點成為主名字節(jié)點添加至主名字節(jié)點的列表中,而不再依賴于zookeeper集群,系統(tǒng)架構簡化,運維成本大大降低。

      另外,由于集群中同時存在多個主名字節(jié)點,因此可同時接收并處理來自客戶端的多個數(shù)據(jù)操作請求,因此,實現(xiàn)了客戶端的負載均衡,再者,由于主名字節(jié)點為多個,備用名字節(jié)點也可以為多個,因此,所有名字節(jié)點均發(fā)生故障的幾率較小,即大大降低了hdfs集群中單點故障問題發(fā)生的幾率。

      在一種可能的實現(xiàn)方式中,上述實施例提供的服務集群中,備用名字節(jié)可周期性的向服務器群中的各個主名字節(jié)點發(fā)送ping命令(或者心跳數(shù)據(jù)包),對于每次發(fā)送的ping命令,如果在預設時間內接收到主名字節(jié)點對于ping命令(或者心跳數(shù)據(jù)包)的響應,則表明主名字節(jié)點正常工作,如果在預設時間內未接收到主名字節(jié)點對于ping命令(或者心跳數(shù)據(jù)包)的響應,則表明該主名字節(jié)點發(fā)生故障。

      在上述實施例提供的服務集群中,每個備用名字節(jié)點均可向服務集群中的各個主名字節(jié)點發(fā)送測試信息,以測試主名字節(jié)點是否正常工作,然而,在某些時候,備用名字節(jié)點也可能發(fā)生故障,如果備用名字節(jié)點發(fā)生故障,將影響整個服務集群的性能,為了能夠發(fā)現(xiàn)備用名字節(jié)點的故障,上述實施例提供的服務集群中,每個主名字節(jié)點,周期性的向服務集群中的各個備用名字節(jié)點發(fā)送測試信息以測試各個備用名字節(jié)點是否正常工作,當目標備用名字節(jié)點發(fā)生故障時,將目標備用名字節(jié)點從自身的備用名字節(jié)點列表中刪除,并將目標備用名字節(jié)點添加至自身的故障名字節(jié)點列表中,同時,將目標備用名字節(jié)點發(fā)生故障的信息同步給服務集群中的其它名字節(jié)點。

      在某些情況下,例如hdfs集群規(guī)模擴大時,當前服務集群中名字節(jié)點的數(shù)量已經(jīng)無法滿足需求,或者,當前服務集群中的多個名字節(jié)點發(fā)生故障,此時可能需要擴展服務集群的規(guī)模,即在服務集群中增加新的名字節(jié)點,基于此,上述實施例提供的服務集群可提供擴展名字節(jié)點的接口,服務集群通過該接口接收新增名字節(jié)點的申請,具體地,服務集群具有集群名稱,新增名字節(jié)點的申請基于集群名稱提出,服務集群接收到基于集群名稱提出的新增名字節(jié)點的申請時,由目標主名字節(jié)點(例如,主名字節(jié)點列表中第一個正常工作的主名字節(jié)點)進行處理。

      在一種可能的實現(xiàn)方式中,目標主名字節(jié)點,在接收到新增名字節(jié)點的申請時,將新增的名字節(jié)點作為備用名字節(jié)點添加至自身的備用名字節(jié)點列表中,然后將新增的名字節(jié)點成為備用名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點。

      考慮到新增的名字節(jié)點也可能由于某種原因發(fā)生故障,為了確保新添加至服務集群中的名字節(jié)點為能夠正常工作的名字節(jié)點,在另一種可能的實現(xiàn)方式中,目標主名字節(jié)點在接收新增名字節(jié)點的申請時,首先向新增的名字節(jié)點發(fā)送測試信息,以測試新增的名字節(jié)點是否正常工作,當新增的名字節(jié)點正常工作時,再將新增的名字節(jié)點添加至自身的備用名字節(jié)點列表中,同時,將新增的名字節(jié)點成為備用名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點。

      需要說明的是,在上述的實現(xiàn)方式中,目標主節(jié)點將新增名字節(jié)點添加至自身的備用名字節(jié)點列表中,然后,將新增的名字節(jié)點成為備用名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點,除了這種方式外,目標主節(jié)點還可將新增名字節(jié)點添加至自身的主名字節(jié)點列表中,然后將新增名字節(jié)點成為主名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點,并且,將自身維護的元數(shù)據(jù)發(fā)送給該新增名字節(jié)點。

      在某些情況下,集群中發(fā)生故障的名字節(jié)點可能會重新恢復正常,為了重新利用這些重新恢復正常的名字節(jié)點,上述實施例提供的服務集群中,目標主名字節(jié)點,可按預設的時間間隔向故障名字節(jié)點列表中的故障名字節(jié)點發(fā)送測試信息,以測試故障名字節(jié)點是否恢復正常。當故障名字節(jié)點恢復正常時,在一種可能的實現(xiàn)方式中,將恢復正常的故障名字節(jié)點添加至自身的備用名字節(jié)點列表中,并將恢復正常的故障名字節(jié)點從自身的故障名字列表中刪除,同時,將故障名字節(jié)點恢復正常且成為備用名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點。在另一種可能的實現(xiàn)方式中,如果恢復正常的故障名字節(jié)點之前為主名字節(jié)點,則目標主名字節(jié)點可將其添加至自身的主名字節(jié)點中,并且,將其從自身的故障名字列表中刪除,然后將該故障名字節(jié)點恢復正常且成為主名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點,另外,目標主名字節(jié)點還需要將自身維護的元數(shù)據(jù)同步給該恢復正常的故障名字節(jié)點;如果恢復正常的故障名字節(jié)點之前為備用名字節(jié)點,則目標主名字節(jié)點可將其添加至自身的備用名字節(jié)點中,并且,將其從自身的故障名字列表中刪除,然后將該故障名字節(jié)點恢復正常且成為備用名字節(jié)點的信息同步給服務集群中的其它名字節(jié)點。

      上述實施例提供的服務集群還可包括:同步節(jié)點。服務集群中的主名字節(jié)點通過該同步節(jié)點將名字節(jié)點狀態(tài)發(fā)生變化的信息發(fā)送給其它名字節(jié)點,以使其它名字節(jié)點基于信息更新自身的列表。

      在上述本發(fā)明實施例的基礎上,現(xiàn)列舉一具體實例進行說明:

      請參閱圖2,示出了一服務集群一具體實例的結構示意圖,其包括:兩個主名字節(jié)點(activenamenode,簡稱activenn),分別為nn1和nn2,以及兩個備用名字節(jié)點(standbynamenode,簡稱standbynn),分別為nn3和nn4。其中,兩個主名字節(jié)點nn1和nn2可同時接收并處理來自客戶端的數(shù)據(jù)操作請求,實現(xiàn)了客戶端的負載均衡。

      nn1、nn2、nn3和nn4均維護主名字節(jié)點列表、備用名字節(jié)點列表以及故障名字節(jié)點列表,即,主名字節(jié)點列表中包括nn1和nn2,備用名字節(jié)點列表中包括nn3和nn4,故障名字節(jié)點列表中暫時沒有nn。

      (1)備用名字節(jié)點檢測主名字節(jié)點的故障:

      nn3周期性的分別向nn1和nn2發(fā)送測試信息(如ping命令)以測試nn1和nn2是否正常工作,假設nn3在向nn2發(fā)送ping命令之后,在預設時間內未接收到ping命令的響應,則表明nn2發(fā)生故障,則此時,nn3向主名字節(jié)點列表中第一個正常工作的主名字節(jié)點nn1發(fā)送選主申請,nn1接收到選主申請后,會立即觸發(fā)將hdfs集群鎖住(hdfs集群不接收任何的數(shù)據(jù)操作請求),將nn3作為主名字節(jié)點添加至主名字節(jié)點列表中,將nn3從備用名字節(jié)點列表中刪除,并且,將nn2從主名字節(jié)點列表中刪除,將nn2添加至故障名字節(jié)點列表中,然后,將nn2發(fā)生故障、nn3成為主名字節(jié)點的信息同步給nn3和nn4,nn3和nn4通過該信息更新自身列表。另外,每個主名字節(jié)點均維護有元數(shù)據(jù),主名字節(jié)點基于元數(shù)據(jù)處理數(shù)據(jù)操作請求,由于nn3成為了主名字節(jié)點,為了使其能處理數(shù)據(jù)操作請求,nn1需要將自身的元數(shù)據(jù)同步給nn3。在列表和元數(shù)據(jù)更新完成后,nn1觸發(fā)hdfs集群解鎖,使其接收數(shù)據(jù)操作請求。

      需要說明的是,對于nn4而言,其也會執(zhí)行與nn3相同的操作,在此不作贅述。在nn2發(fā)生故障時,nn3和nn4可能會同時向nn1發(fā)送選主申請,如果nn1先接收到nn3發(fā)送的選主申請,則將nn3作為主名字節(jié)點添加至主名字節(jié)點列表中,反之,如果nn1先接收到nn4發(fā)送的選主申請,則將nn4作為主名字節(jié)點添加至主名字節(jié)點列表中。假設nn3成為了主名字節(jié)點,則請參閱圖3,此時的服務集群中的主名字節(jié)點為nn1和nn3,備用名字節(jié)點為nn4,故障名字節(jié)點為nn2,即主名字節(jié)點列表中包括nn1和nn3,備用名字節(jié)點列表中包括nn4,故障名字節(jié)點列表中包括nn2。

      (2)主名字節(jié)點檢測備用名字節(jié)點的故障:

      圖3中的主名字節(jié)點nn1向備用名字節(jié)點nn4發(fā)送測試信息(如心跳數(shù)據(jù)包),如果在預設時間內未接收到測試信息的響應,則表明nn4發(fā)生故障,否則,表明nn4正常工作。如果nn4發(fā)生故障,則將nn4從備用名字節(jié)點列表中刪除,將nn4添加至故障名字節(jié)點列表中,同時將nn4發(fā)生故障的信息同步給nn3,nn3基于該信息更新自身列表。對于nn3而言,其也會執(zhí)行與nn1同樣的操作,在此不作贅述。

      (3)名字節(jié)點的擴展:

      服務集群提供用于擴展名字節(jié)點的接口(如restapi),服務集群通過該接口接收新增名字節(jié)點的請求,當服務集群接收到新增名字節(jié)點的請求時,主名字節(jié)點列表中第一個正常工作的主名字節(jié)點會向新增名字節(jié)點發(fā)送測試信息(如ping命令)以測試新增名字節(jié)點是否能夠正常工作,以圖3為例,主名字節(jié)點列表中第一個正常工作的主名字節(jié)點為nn1,即nn1會向新增名字節(jié)點nn5發(fā)送ping命令,如果新增名字節(jié)點nn5能夠正常工作,則將新增名字節(jié)點nn5作為備用名字節(jié)點添加至備用名字節(jié)點列表中,并將新增名字節(jié)點nn5成為備用名字節(jié)點的信息同步給nn3和nn4,nn3和nn4基于該信息同步自身列表。另外,由于nn5為新增名字節(jié)點,因此,nn1需要將當前的列表信息均同步給nn5。請參閱圖4,為新增nn5后的服務集群,此時服務集群中的主名字節(jié)點為nn1和nn3,備用名字節(jié)點為nn4和nn5,故障名字節(jié)點為nn2,即主名字節(jié)點列表中包括nn1和nn3,備用名字節(jié)點列表中包括nn4和nn5,故障名字節(jié)點列表中包括nn2。

      需要說明的是,除了上述實現(xiàn)方式外,主名字節(jié)點為nn1也可將新增名字節(jié)點nn5添加至主名字節(jié)點列表中,并將新增名字節(jié)點nn5成為主名字節(jié)點的信息同步給nn3和nn4,nn3和nn4基于該信息同步自身列表。另外,由于新增名字節(jié)點nn5成為主節(jié)點,其需要處理來自客戶端數(shù)據(jù)操作請求,因此,主名字節(jié)點nn1需要將自身的元數(shù)據(jù)同步給nn5。

      (4)故障名字節(jié)點的自檢測:

      以圖4為例,主名字節(jié)點列表中的第一個正常工作的主名字節(jié)點nn1會按預設時間間隔向故障名字節(jié)點nn2發(fā)送測試信息(如ping命令)以測試nn2是否恢復正常,如果nn2恢復正常,則將nn2添加至備用名字節(jié)點列表中,并將其從故障名字節(jié)點列表中刪除,然后,將nn2恢復正常的信息同步給nn3、nn4和nn5,nn3、nn4和nn5基于該信息更新自身列表。另外,nn1還需要將自身當前的列表信息同步給nn2。圖5示出了更新nn2狀態(tài)后的服務集群,此時服務集群中的主名字節(jié)點為nn1和nn3,備用名字節(jié)點為nn4、nn5和nn2,即主名字節(jié)點列表中包括nn1和nn3,備用名字節(jié)點列表中包括nn4、nn5和nn2,故障名字節(jié)點列表中沒有名字節(jié)點。

      需要說明的是,當nn2恢復正常時,由于其之前為主名字節(jié)點,因此,也可將其添加至主名字節(jié)點列表中,并將其從故障名字節(jié)點列表中刪除,然后,將nn2恢復正常且成為主名字節(jié)點的信息同步給nn3、nn4和nn5,nn3、nn4和nn5基于該信息更新自身列表,另外,由于nn2成為主節(jié)點需要處理來自客戶端數(shù)據(jù)操作請求,因此,nn1需要將自身的元數(shù)據(jù)同步給nn2。

      本發(fā)明實施例還提供了另一種服務集群,該服務集群可以包括:至少一個主名字節(jié)點和多個備用名字節(jié)點,每個名字節(jié)點均存儲有元數(shù)據(jù),每個名字節(jié)點均具有節(jié)點信息,節(jié)點信息包括節(jié)點標識值(nnid)、元數(shù)據(jù)標識值(metaid)和選舉值(transnumber)。

      其中,各個備用節(jié)點的元數(shù)據(jù)標識值從主名字節(jié)點獲得,理論上各個備用節(jié)點的元數(shù)據(jù)標識是相同的,然而,由于主名字節(jié)點可能發(fā)生故障,當主名字節(jié)點發(fā)生故障時,其可能只將元數(shù)據(jù)標識值同步給了部分備用名字節(jié)點,而另外一部分備用名字節(jié)點由于未接收到主名字節(jié)點發(fā)送的元數(shù)據(jù)標識而未進行更新,這就導致多個備用名字節(jié)點的元數(shù)據(jù)標識值可能不同。備用節(jié)點的元數(shù)據(jù)標識值越大,表明元數(shù)據(jù)越新,因此,本實施例基于元數(shù)據(jù)標識值從備用節(jié)點中選舉主節(jié)點。各個備用名字節(jié)點的節(jié)點標識值不變,其一方面用于標識并區(qū)分各個備用名字節(jié)點,另一方面,在備用名字節(jié)點的元數(shù)據(jù)標識值相同時,用于作為進一步選舉主節(jié)點的依據(jù)。對于選舉值而言,其是遞增的,例如,當某一備用名字節(jié)點接收到其它備用名字節(jié)點發(fā)送的選舉信息及節(jié)點信息時,如果發(fā)現(xiàn)自身的元數(shù)據(jù)標識值大于其接收的節(jié)點信息中的元數(shù)據(jù)標識值,則其可發(fā)起新的一輪選舉,將選舉值加1,選舉值可以反映備用名字節(jié)點當前所處的選舉輪數(shù)。

      多個備用名字節(jié)點中的第一備用名字節(jié)點,按預設的周期向至少一個主名字節(jié)點發(fā)送測試信息以測試至少一個主名字節(jié)點是否正常工作,當至少一主名字節(jié)點發(fā)生故障時,向其它備用名字節(jié)點發(fā)送自身的節(jié)點信息和選舉自身成為主名字節(jié)點的信息。

      其它備用名字節(jié)點中的第二備用名字節(jié)點,在第一備用名字節(jié)點的選舉值大于自身的選舉值時,如果第一備用名字節(jié)點的元數(shù)據(jù)標識值大于自身的元數(shù)據(jù)標識值,則將選舉第一備用名字節(jié)點成為主名字節(jié)點的信息作為選舉結果發(fā)送給其它備用名字節(jié)點。

      需要說明的是,在第一備用名字節(jié)點的選舉值大于自身的選舉值時,可能存在第一備用名字節(jié)點的元數(shù)據(jù)標識值等于自身的元數(shù)據(jù)標識值的情況,此時,可進一步基于節(jié)點標識值確定是否同意選舉第一備用名字節(jié)點成為主名字節(jié)點。在一種可能的實現(xiàn)方式中,可預先設定當?shù)谝粋溆妹止?jié)點的節(jié)點標識大于第二備用名字節(jié)點時,第二備用名字節(jié)點同意選舉第一備用名字節(jié)點成為主名字節(jié)點,在另一種可能的實現(xiàn)方式中,可預先設定當?shù)谝粋溆妹止?jié)點的節(jié)點標識小于第二備用名字節(jié)點時,第二備用名字節(jié)點同意選舉第一備用名字節(jié)點成為主名字節(jié)點。

      第一備用名字節(jié)點,在接收到的選舉結果表明大于預設數(shù)量的名字節(jié)點選舉自身成為主名字節(jié)點時,將自身設置為主名字節(jié)點。

      第二備用名字節(jié)點,在第一備用名字節(jié)點的選舉值等于自身的選舉值時,判斷自身的元數(shù)據(jù)標識值是否大于第一備用名字節(jié)點的元數(shù)據(jù)標識值,如果是,則更新選舉值,將選舉值加1,并將選舉自身成為主名字節(jié)點的信息作為選舉結果發(fā)送給其它備用名字節(jié)點。

      需要說明的是,各個備用名字節(jié)點在發(fā)送選舉結果時,可將自身的節(jié)點信息一并發(fā)送,以便其它備用名字節(jié)點發(fā)現(xiàn)自身的節(jié)點信息較舊時進行更新。

      第二備用名字節(jié)點,在第一備用名字節(jié)點的選舉值小于自身的選舉值時,將自身的節(jié)點信息發(fā)送給第一備用名字節(jié)點,以使第一備用名字節(jié)點基于第二備用名字節(jié)點的節(jié)點信息更新自身的節(jié)點信息。

      需要說明的是,在一種可能的實現(xiàn)方式中,第一備用名字會判斷是否接收到所有備用名字節(jié)點的選舉結果,如果是,則直接基于選舉結果設置自身的角色,具體的,如果選舉結果中有大于預設數(shù)量的名字節(jié)點選舉自身成為主名字節(jié)點,則設置自身的角色為主名字節(jié)點,否則,設置自身的角色為備用名字節(jié)點。在另一種可能的實現(xiàn)方式中,第一備用名字節(jié)點不用等到接收到所有備用名字節(jié)點的選舉結果之后再設置自身的角色,而是基于接收的選舉結果實時統(tǒng)計當前選舉自身成為主名字節(jié)點的備用名字節(jié)點的數(shù)量,如果當前選舉自身成為主名字節(jié)點的備用名字節(jié)點的數(shù)量大于預設數(shù)量,則等待預設時長,如果預設時長內沒有收到其它備用節(jié)點發(fā)送的優(yōu)于自身的節(jié)點信息(例如沒有收到元數(shù)據(jù)標識值大于自身的元數(shù)據(jù)標識值的節(jié)點信息),則設置自身成為主名字節(jié)點,否則進行下一次選舉。第一備用節(jié)點在將自身的角色設置為主名字節(jié)點之后,將自身成為主名字節(jié)點的信息同步給其它名字節(jié)點。

      對于每個備用名字節(jié)點而言,其在當前選舉過程中會存在三種狀態(tài),looking(選舉狀態(tài))、following(備用節(jié)點狀態(tài))、leading(主節(jié)點狀態(tài)),上述第二備用名字節(jié)點執(zhí)行的操作均是第一備用名字節(jié)點處于looking狀態(tài)時的操作。

      當?shù)谝粋溆妹止?jié)點為following或leading狀態(tài)時,對于第二備用名字節(jié)點而言,如果自身的選舉值與第一備用名字節(jié)點的選舉值相同,且第一備用名字節(jié)點的狀態(tài)為leading狀態(tài),那么判斷是否有大于預設數(shù)量的備用名字節(jié)點選舉了第一備用名字節(jié)點成為主名字節(jié)點,如果是,則退出選舉,如果否,則等待預設時長,若預設時長后,并未有大于預設數(shù)量的備用名字節(jié)點選舉第一備用名字節(jié)點成為主名字節(jié)點,則發(fā)起下一輪選舉。如果第二備用名字節(jié)點的選舉值與第一備用名字節(jié)點的選舉值不相同,此時存在兩種情況,第一種情況是第二備用名字節(jié)點的選舉值大于第一備用名字節(jié)點,此時,需基于元數(shù)據(jù)標識值重新選舉,第二種情況是第二備用名字節(jié)點的選舉值小于第一備用名字節(jié)點,此時第二備用名字節(jié)點需更新自身的節(jié)點信息。

      下面通過一具體實例對上述備用名字節(jié)點選舉主名字節(jié)點的過程進行說明:

      (1)假設備用名字節(jié)點包括nn1、nn2和nn3,nn2首先發(fā)現(xiàn)一主名字節(jié)點故障了,nn2選舉自身作為主名字節(jié)點,將自身的節(jié)點信息及選舉自身成為主名字節(jié)點的信息廣播給nn1和nn3,如圖6a所示。

      (2)對于nn1而言,其在接收到nn2的數(shù)據(jù)后,發(fā)現(xiàn)自身的metaid為3,而nn2的metaid為2,即自身的metaid更新一些,則其對選舉nn2作為主名字節(jié)點提出異議,將transnumber的值加1,將自身的節(jié)點信息以及選舉自身作為主名字節(jié)點的信息廣播給nn2和nn3。對于nn3而言,其在接收到nn2的數(shù)據(jù)后發(fā)現(xiàn)自身的metaid較舊,則更新自身的節(jié)點信息,然后廣播自身節(jié)點信息及選舉nn2成為主名字節(jié)點的信息給nn1與nn2,數(shù)據(jù)傳送過程如圖6b所示。

      (3)如上圖6b,nn2接收到來自nn1的數(shù)據(jù),由于nn2的transnumber小于nn1的節(jié)點信息中的transnumber,因此,此次是一次更新了的選舉,將nn2的transnumber值設為2,由于nn2的metaid小于nn1的節(jié)點信息中的metaid,因此,nn2更新自身的metaid,接受nn1成為主名字節(jié)點,并將更新后自身的節(jié)點信息以及選舉nn1成為主名字節(jié)點的信息廣播給nn1和nn3。

      此時,nn2接收到了來自nn3的數(shù)據(jù),nn2此時的transnumber值為2,而收到的數(shù)據(jù)中的transnumber為1,說明nn3在一次較早的選舉中,則nn2將自身的信息發(fā)送給nn3,同時,nn1也接收到了來自nn3的數(shù)據(jù),nn1的transnumber為2,大于收到數(shù)據(jù)的transnumber,因此nn1將自身的信息發(fā)送給nn3。

      假設此時nn3收到了來自nn1的數(shù)據(jù),收到數(shù)據(jù)的transnumber為2大于nn3自身的transnumber,因此,是更新了的選舉,nn3的metaid為2小于收到數(shù)據(jù)的metaid,因此nn3更新自身的信息,并向nn1與nn2發(fā)送信息同意nn1成為主名字節(jié)點,此時的數(shù)據(jù)傳送過程各節(jié)點的數(shù)據(jù)如圖6c所示。

      (4)nn1接收到來自nn2的數(shù)據(jù),此時它的列表中已經(jīng)有大于一半的節(jié)點選擇自身成為主名字節(jié)點,因此,它將自己的角色變?yōu)橹髅止?jié)點,并將自身成為主名字節(jié)點的信息廣播給nn2和nn3,如圖6d所示,退出選舉過程。nn3收到了nn1和nn2的選舉結果,均是選擇nn1為主名字節(jié)點,因此,nn3將自己的角色設置為備用名字節(jié)點,并廣播給其它節(jié)點,退出選舉過程;nn2同樣將自己角色設置為備用名字節(jié)點,整個選舉過程結束。

      本發(fā)明提供的服務集群,備用名字節(jié)點可通過向主名字節(jié)點發(fā)送測試信息來獲知主名字節(jié)點是否發(fā)生故障,并在主名字節(jié)點發(fā)生故障時,多個備用名字節(jié)點能夠通過選舉策略選出主名字節(jié)點。即本發(fā)明提供的服務集群及hdfs集群可自主發(fā)現(xiàn)主名字節(jié)點的故障信息,并在某一主名字節(jié)點發(fā)生故障時,使備用名字節(jié)點成為主名字節(jié)點,而不再依賴于zookeeper集群,系統(tǒng)架構簡化,運維成本大大降低。

      本發(fā)明實施例還提供了一種hdfs集群,該hdfs集群可以包括上述任一實施例提供的服務集群。

      本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。

      在本申請所提供的幾個實施例中,應該理解到,所揭露的方法、裝置和設備,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。

      所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。

      所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質。

      對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。

      當前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1