HDFS原理分析之HA機制:avatarnode原理
一、問題描述
由于namenode 是HDFS的大腦,而這個大腦又是單點,如果大腦出現(xiàn)故障,則整個分布式存儲系統(tǒng)就癱瘓了。HA(High Available)機制就是用來解決這樣一個問題的。碰到這么個問題,首先本能的想到的就是冗余備份,備份的方式有很多種,前輩們設計的有元數(shù)據(jù)備份方案,secondary namenode以及avatarnode等方案。而這些方案中最有優(yōu)勢的自然是能夠讓HDFS以最短的時間完成故障切換的方案。也就是我們今天要討論的avatarnode。
二、基本結構
primary:負責正常業(yè)務namenode,也就是為client提供元數(shù)據(jù)查詢和操作。
standby:熱備的namenode,完全備份primary的元數(shù)據(jù),并對primary做checkpoint(一種元數(shù)據(jù)持久化機制,后面會介紹到)。
NFS:網(wǎng)絡文件服務器,primary會將日志實時同步一份到該服務器,來保證primary出故障時備份元數(shù)據(jù)的完整性。
三、數(shù)據(jù)持久化機制——checkpoint
primary管理著所有的元數(shù)據(jù),通常元數(shù)據(jù)都保存在內存里,這樣對元數(shù)據(jù)的訪問能夠高效。但是有個隱患,就是如果primary節(jié)點宕機了,或者掉電了,那么所有的元數(shù)據(jù)就一去不復返了。如果我們能夠把元數(shù)據(jù)在內存里保存一份,同時在硬盤上也保存一份,那么即使掉電也能將數(shù)據(jù)再恢復過來。
checkpoint機制就是將元數(shù)據(jù)實時在硬盤上保存一份的機制。
首先介紹幾個關鍵概念:
edits:日志文件,記錄引發(fā)元數(shù)據(jù)改變的操作。
fsimage:元數(shù)據(jù)的鏡像文件,可以理解為元數(shù)據(jù)保存在磁盤上的一個副本。
問題1:fsimage代表的是某一時刻的元數(shù)據(jù)鏡像,元數(shù)據(jù)在不斷改變,那么這個鏡像是如何實時更新的呢?
問題2:如何在保證primary namenode正常對外服務的情況下生成fsimage?
checkpoint步驟如下:
第一步:secondary namenode請求namenode停止使用edits,暫時記錄在edits.new文件中
第二步:secondary namenode從namenode復制fsimage、edits到本地
第三步:secondary namenode合并fsimage、edits為fsimage.ckpt
第四步:secondary namenode發(fā)送fsimage.ckpt到namenode
第五步:namenode用新的fsimage覆蓋舊的fsimage,用新的edits覆蓋舊的edits
第六步:更新checkpoint時間
到這里fsimage更新完畢,即保證了primary正常服務,也完成了fsimage的更新
四、avatarnode元數(shù)據(jù)的一致性
checkpoint只是保證了元數(shù)據(jù)的持久化,但是如果primary出現(xiàn)故障,修復后還是要花大量的時間來加載fsimage,如何讓standby在內存中就和primary保持元數(shù)據(jù)同步,就是一個高可用的HDFS需要解決的問題。
namenode的元數(shù)據(jù)其實包括兩個部分:
第一部分:目錄樹,目錄樹管理著HDFS中存儲的所有的文件信息。
第二部分:塊數(shù)據(jù)和datanode的對應關系
只要能夠保證以上兩部分的數(shù)據(jù)一致了,那么元數(shù)據(jù)的一致性問題就解決了。
第一部分:primary將日志實時同步到NFS上,而standby可以實時讀取NFS上的日志,通過日志回放,可以解決目錄樹信息一致的問題。
第二部分:快數(shù)據(jù)和datanode的對應關系,是所有datanode想namenode匯報總結出來的,那么讓所有的datanode向兩個namenode匯報,就可以解決塊數(shù)據(jù)和datanode的對應關系一致性問題。
問題:新引入的NFS會帶來新的單點問題。據(jù)facebook工程師統(tǒng)計,這個單點故障率非常之低,他們在四年中之碰到一次。
到這里avatarnode原理基本講完,但是實際應用中還存在幾個問題:
1、HDFS是如何快速檢測到primary出現(xiàn)故障的?
2、standby是如何迅速從備用機切換到primary的?