Namenode HA原理詳解(腦裂) - 遠(yuǎn)方的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/u014774781/article/details/51940301
Namenode HA 如何實(shí)現(xiàn)斜脂,關(guān)鍵技術(shù)難題是什么?
- 如何保持主和備NameNode的狀態(tài)同步触机,并讓Standby在Active掛掉后迅速提供服務(wù)帚戳,namenode啟動比較耗時,包括加載fsimage和editlog(獲取file to block信息)儡首,處理所有datanode第一次blockreport(獲取block to datanode信息)片任,保持NN的狀態(tài)同步,需要這兩部分信息同步椒舵。
- 腦裂(split-brain),指在一個高可用(HA)系統(tǒng)中约谈,當(dāng)聯(lián)系著的兩個節(jié)點(diǎn)斷開聯(lián)系時笔宿,本來為一個整體的系統(tǒng),分裂為兩個獨(dú)立節(jié)點(diǎn)棱诱,這時兩個節(jié)點(diǎn)開始爭搶共享資源泼橘,結(jié)果會導(dǎo)致系統(tǒng)混亂,數(shù)據(jù)損壞迈勋。
- NameNode切換對外透明炬灭,主Namenode切換到另外一臺機(jī)器時,不應(yīng)該導(dǎo)致正在連接的客戶端失敗靡菇,主要包括Client重归,Datanode與NameNode的鏈接。
社區(qū)的NN HA包括兩個NN厦凤,主(active)與備(standby)鼻吮,ZKFC,ZK较鼓,share editlog椎木。流程:集群啟動后一個NN處于active狀態(tài),并提供服務(wù)博烂,處理客戶端和datanode的請求香椎,并把editlog寫到本地和share editlog(可以是NFS,QJM等)中禽篱。另外一個NN處于Standby狀態(tài)畜伐,它啟動的時候加載fsimage,然后周期性的從share editlog中獲取editlog躺率,保持與active的狀態(tài)同步烤礁。為了實(shí)現(xiàn)standby在sctive掛掉后迅速提供服務(wù)讼积,需要DN同時向兩個NN匯報,使得Stadnby保存block to datanode信息脚仔,因?yàn)镹N啟動中最費(fèi)時的工作是處理所有datanode的blockreport勤众。為了實(shí)現(xiàn)熱備,增加FailoverController和ZK鲤脏,F(xiàn)ailoverController與ZK通信们颜,通過ZK選主,F(xiàn)ailoverController通過RPC讓NN轉(zhuǎn)換為active或standby猎醇。
QJM的設(shè)計(jì)
Namenode記錄了HDFS的目錄文件等元數(shù)據(jù)窥突,客戶端每次對文件的增刪改等操作,Namenode都會記錄一條日志硫嘶,叫做editlog阻问,而元數(shù)據(jù)存儲在fsimage中。為了保持Stadnby與active的狀態(tài)一致沦疾,standby需要盡量實(shí)時獲取每條editlog日志称近,并應(yīng)用到FsImage中。這時需要一個共享存儲哮塞,存放editlog刨秆,standby能實(shí)時獲取日志。這有兩個關(guān)鍵點(diǎn)需要保證忆畅, 共享存儲是高可用的衡未,需要防止兩個NameNode同時向共享存儲寫數(shù)據(jù)導(dǎo)致數(shù)據(jù)損壞。
是什么家凯,Qurom Journal Manager缓醋,基于Paxos(基于消息傳遞的一致性算法)。這個算法比較難懂绊诲,簡單的說改衩,Paxos算法是解決分布式環(huán)境中如何就某個值達(dá)成一致,(一個典型的場景是驯镊,在一個分布式數(shù)據(jù)庫系統(tǒng)中葫督,如果各節(jié)點(diǎn)的初始狀態(tài)一致,每個節(jié)點(diǎn)都執(zhí)行相同的操作序列板惑,那么他們最后能得到一個一致的狀態(tài)橄镜。為保證每個節(jié)點(diǎn)執(zhí)行相同的命令序列,需要在每一條指令上執(zhí)行一個"一致性算法"以保證每個節(jié)點(diǎn)看到的指令一致)