http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 背景 在Hadoop 2.0.0以前,在一個HDFS集群中NameNode存在單點故障。每個集群 ...
http://hadoop.apache.org/docs/r2.9.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
背景
在Hadoop 2.0.0以前,在一個HDFS集群中NameNode存在單點故障。每個集群中只有一個NameNode,如果這個機器不可用的話,那麼整個集群將不可用,直到這個機器被重啟或者其它的機器來替代它。這就意味著:
- 萬一NameNode機器宕機了,那麼整個集群不可用
- NameNode機器上的軟體或者硬體升級的時候,集群不得不停止運行
HDFS HA在每個集群中運行兩個NameNode,一個是Active的,一個Passive的,作為熱備。
架構
在典型的HA集群中,兩個分開的機器均被配置為NameNode。在任意時刻,只有一個NameNode處於活動狀態,另一個處於備用狀態。處於活動狀態的NameNode負責處理集群中所有客戶端操作,此時處於備用狀態的NameNode只是扮演者slave的角色。這個備用的NameNode維護足夠的狀態,以防快速容災。
備用NameNode為了保持和活動NameNode的狀態同步,這兩個節點用一組單獨的後臺進程進行通信,這個守護進程被叫做“JournalNodes”(簡稱JNs)。當處於活動狀態的NameNode做了任何修改以後,它將修改的日誌傳給大部分JNs。備用的NameNode從JNs中讀取這種修改,並且會把這種改變寫到EditLog中。因為備用NameNode看到這些編輯,所有它將這種改變應用到自己的namespace中。
要想保住HA集群正確的操作,至關重要的一點是,同一時間集群中只能有一個NameNode處於活動狀態。為了保證這一點,JournalNodes只允許同一時間只有一個NameNode可以寫。
硬體資源
為了部署一個HA集群,你需要準備下列資源:
- NameNode machines:運行活動的和備用的NameNode的機器的硬體配置應該是相等的
- JournalNode machines:必須至少3個JournalNode,因為Edit Log必須被寫到大多數JNs上。也就是說,可以容忍單個機器失敗。你也可以運行3個以上的JournalNode,但是為了能夠增加系統承受失敗的數量,你應該運行奇數個JNs(比如:3,5,7等等)。當運行的JournalNode數量是N的時候,系統最多可以容忍(N - 1)/ 2個失敗,並且正常服務。
其它參考
http://blog.csdn.net/strongerbit/article/details/7013221/