非HA的Namenode架構(gòu)
一個HDFS集群只存在一個Namenode吨些,Datanode只向一個Namenode匯報 磅甩,Namenode的edit log存儲在本地目錄
HA架構(gòu):
包含兩個Namenode,主(active)與備(standby)包券,ZKFC(Zookeeper Failover Controller),ZK, share editlog(可以是NFS和QJM)
editlog
Namenode記錄了HDFS的目錄文件等元數(shù)據(jù)蛮粮,客戶端每次對文件的增刪改等操作,Namenode都會記錄一條日志优烧,叫做editlog
ZKFC
Zookeeper故障轉(zhuǎn)移控制器控制Namenode故障轉(zhuǎn)移過程蝉揍,每個Namenode對應一個ZKFC
NFS: Network File System
NameNode之間通過NAS進行元數(shù)據(jù)同步,有一定局限性
QJM: Quorum Journal Manager
(Quorum一致性:w+r>n r>n-w)
由JournalNode(JN)組成畦娄,一般是奇數(shù)個節(jié)點又沾。JournalNode保存共享的編輯日志。每個JournalNode對外有一個簡易的RPC接口熙卡,以供NameNode讀寫EditLog到JN本地杖刷。
流程:
集群啟動后,一個Namenode處于active狀態(tài)驳癌,并提供服務滑燃,處理客戶端和datanode請求,并把editlog寫到share editlog(JournalNode)和本地颓鲜。
另一個Namenode處于Standby狀態(tài)表窘,它啟動時從fsimage(File System Image)(保存了HDFS中文件名稱,目錄結(jié)構(gòu)甜滨,文件權(quán)限等信息)加載HDFS元數(shù)據(jù)到內(nèi)存乐严,然后周期性地從share editlog(JournalNode)獲取editlog,保持與active的狀態(tài)同步衣摩。
為了實現(xiàn)standby在active掛掉后迅速提供服務昂验,需要Datanode同時向兩個Namenode發(fā)送心跳(block report 塊狀態(tài)報告)(健康狀態(tài)和塊位置),因為Namenode啟動中最費時的工作是處理所有的datanode的block report艾扮。
ZKFC與ZK通信既琴,通過ZK選主,ZKFC通過RPC讓Namenode轉(zhuǎn)換為active或standby泡嘴。
防止腦裂
使用QJM實現(xiàn)共享同存儲的fencing甫恩,以確保只有一個Namenode能寫成功
Datanode fencing,只有一個Namenode能命令Datanode
客戶端fencing酌予,確保只有一個Namenode能相應客戶端請求填物,讓訪問standby的Namennode的客戶端直接失敗纹腌。