更新時(shí)間:2020-11-12 來(lái)源:黑馬程序員 瀏覽量:
在HDFS分布式文件系統(tǒng)中,NameNode是系統(tǒng)的核心節(jié)點(diǎn),它存儲(chǔ)了各類元數(shù)據(jù)信息,并負(fù)責(zé)管理文件系統(tǒng)的命名空間和客戶端對(duì)文件的訪問(wèn)。但是,在Hadoop1.0版本中,NameNode只有一個(gè),一旦這個(gè)NameNode發(fā)生故障,就會(huì)導(dǎo)致整個(gè)Hadoop集群不可用,也就是發(fā)生了單點(diǎn)故障問(wèn)題。
為了解決單點(diǎn)故障問(wèn)題,Hadoop2.0中的HDFS中增加了對(duì)高可用的支持。在高可用的HDFS集群中,通常有兩臺(tái)或者兩臺(tái)以上的機(jī)器充當(dāng)NameNode,在任意時(shí)間內(nèi),都要保證至少有一臺(tái)機(jī)器處于活動(dòng)(Active)狀態(tài),一臺(tái)機(jī)器處于備用(Standby)狀態(tài)。處于活動(dòng)狀態(tài)的NameNode負(fù)責(zé)處理客戶端請(qǐng)求,而處于備用狀態(tài)的NameNode則處于“隨時(shí)待命”狀態(tài)。一旦處于活動(dòng)狀態(tài)NameNode節(jié)點(diǎn)發(fā)生故障,那么處于備用狀態(tài)的NameNode會(huì)立即接管它的任務(wù)并開始處理客戶端請(qǐng)求,保證業(yè)務(wù)不會(huì)出現(xiàn)明顯中斷,不影響系統(tǒng)的正常對(duì)外服務(wù)。接下來(lái),通過(guò)一張圖來(lái)描述HDFS的高可用架構(gòu),如圖1所示。
圖1 HDFS的高可用架構(gòu)
圖1所示的高可用架構(gòu)中,共包含了兩個(gè)NameNode,其中一個(gè)處于活動(dòng)狀態(tài),一個(gè)處于備用狀態(tài),活躍狀態(tài)的NameNode將更新的數(shù)據(jù)寫入共享存儲(chǔ)系統(tǒng)中,備用狀態(tài)的NameNode會(huì)一直監(jiān)聽(tīng)共享存儲(chǔ)系統(tǒng),一旦發(fā)現(xiàn)有新的數(shù)據(jù),就會(huì)立即從共享存儲(chǔ)系統(tǒng)中將這些數(shù)據(jù)加載到自己內(nèi)存中,從而保證與活躍狀態(tài)的數(shù)據(jù)同步。
Zookeeper是一種在HDFS高可用集群中集中提供自動(dòng)故障轉(zhuǎn)移功能的服務(wù),它為每個(gè)NameNode都分配了一個(gè)故障恢復(fù)控制器(Zookeeper Failover Controller,簡(jiǎn)稱ZKFC),該控制器用于監(jiān)控NameNode的健康狀態(tài),并通過(guò)“心跳”方式定期和Zookeeper保持通信。一旦NameNode發(fā)生故障,Zookeeper會(huì)通知備用狀態(tài)的NameNode啟動(dòng),使其成為活動(dòng)狀態(tài)去處理客戶端請(qǐng)求,從而實(shí)現(xiàn)高可用。