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