HA 高可用集羣概述及其原理解析

HA 高可用集羣概述及其原理解析

1. 概述

1)所謂HA(High Available),即高可用(7*24小時不中斷服務)。node

2)實現高可用最關鍵的策略是消除單點故障。HA嚴格來講應該分紅各個組件的HA機制:HDFS 的HA和YARN的HA。ssh

3)Hadoop2.0以前,在HDFS集羣中NameNode存在單點故障(SPOF)。oop

4)NameNode主要在如下兩個方面影響HDFS集羣:日誌

​ NameNode機器發生意外,如宕機,集羣將沒法使用,直到管理員重啓blog

​ NameNode機器須要升級,包括軟件、硬件升級,此時集羣也將沒法使用進程

針對這些個問題,大佬們提供了以下的解決方式:內存

HDFS HA功能經過配置Active/Standby兩個NameNodes實如今集羣中對NameNode的熱備來解決上述問題。若是出現故障,如機器崩潰或機器須要升級維護,這時可經過此種方式將NameNode很快的切換到另一臺機器。部署

總的來講就是:一臺機器不夠用,那我就多搞幾臺,畢竟多臺機器一塊兒掛掉的機率小一點嘛。這幾臺機器如何配合呢?注意提到節點的Active和Standby狀態,就是說有一臺節點是Active模式,也就是工做模式,其餘的呢,就是賣呆模式。幹活的若是掛了,賣呆的就選出一臺頂上去。it

2 . HDFS-HA工做要點

1). 元數據管理方式須要發生以下的改變:集羣

​ 兩個NameNode內存中各自保存一份元數據,原來只有一份,如今你們都有;

​ Edits日誌只有Active(工做)狀態的NameNode節點能夠作寫操做,賣呆的只能讀;

​ 兩個NameNode均可以讀取Edits;

​ 共享的Edits放在一個共享存儲中管理(qjournal和NFS兩個主流實現),這樣各個節點就都能看獲得;

2). 須要一個狀態管理功能模塊

​ 每一個NameNode節點都有一個zkfailover客戶端,常駐在每個NameNode所在的節點,每個zkfailover負責監控本身所在NameNode節點,而且給本身的節點狀態進行標識,將這個標識註冊到zookeeper裏,當須要進行狀態切換時,由zkfailover來負責切換,切換時須要防止brain split(腦裂:即多個NameNode一塊兒工做,形成數據不一致)現象的發生。

3). 必須保證兩個NameNode之間可以ssh無密碼登陸,兩個節點要可以隨時通訊

4). 隔離(Fence),即同一時刻僅僅有一個NameNode對外提供服務(兩個同時,會腦裂噠)

3. HDFS-HA自動故障轉移工做機制

前面已經瞭解了HA工做的要點,那麼如何配置部署HA自動進行故障轉移。自動故障轉移爲HDFS部署增長了兩個新組件:ZooKeeper和ZKFailoverController(ZKFC)進程,如圖所示。

ZooKeeper(在Zookeeper隨筆分類下有專門的詳細闡述)的功能主要是維護少許協調數據,通知客戶端這些數據的改變和監視客戶端故障的高可用服務。HA的自動故障轉移依賴於ZooKeeper的如下功能:

1)故障檢測:集羣中的每一個NameNode在ZooKeeper中維護了一個持久會話,若是機器崩潰,ZooKeeper中的會話將終止,ZooKeeper通知另外一個NameNode須要觸發故障轉移,趕忙上位。

2)現役NameNode選擇:ZooKeeper提供了一個簡單的機制用於惟一的選擇一個節點爲active狀態。若是目前現役NameNode崩潰,另外一個節點可能從ZooKeeper得到特殊的排外鎖以代表它應該成爲現役NameNode。ZKFC是自動故障轉移中的另外一個新組件,是ZooKeeper的客戶端,也監視和管理NameNode的狀態。每一個運行NameNode的主機也運行了一個ZKFC進程,ZKFC負責:

  • 健康監測:ZKFC使用一個健康檢查命令按期地ping與之在相同主機的NameNode,只要該NameNode及時地回覆健康狀態,ZKFC認爲該節點是健康的。若是該節點崩潰,凍結或進入不健康狀態,健康監測器標識該節點爲非健康的。
  • ZooKeeper會話管理:當本地NameNode是健康的,ZKFC保持一個在ZooKeeper中打開的會話。若是本地NameNode處於active狀態,ZKFC也保持一個特殊的znode鎖,該鎖使用了ZooKeeper對短暫節點的支持,若是會話終止,鎖節點將自動刪除。
  • 基於ZooKeeper的選擇:若是本地NameNode是健康的,且ZKFC發現沒有其它的節點當前持有znode鎖,它將爲本身獲取該鎖。若是成功,則它已經贏得了選擇,並負責運行故障轉移進程以使它的本地NameNode爲Active。故障轉移進程與前面描述的手動故障轉移類似,首先若是必要保護以前的現役NameNode,而後本地NameNode轉換爲Active狀態。

參考資料: 尚硅谷Hadoop(HDFS)講義

相關文章
相關標籤/搜索