分布式服務(wù)器上下線動(dòng)態(tài)感知(Hadoop HA)
HDFS集群中NameNode 存在單點(diǎn)故障問題,對(duì)于只有一個(gè)NameNode的集群,如果NameNode機(jī)器出現(xiàn)意外情況,將導(dǎo)致整個(gè)集群無法使用,直到NameNode 重新啟動(dòng)。
影響HDFS集群不可用主要包括以下兩種情況:
NameNode機(jī)器宕機(jī),將導(dǎo)致集群不可用,重啟NameNode之后才可使用。
計(jì)劃需要對(duì)NameNode節(jié)點(diǎn)軟件或硬件升級(jí),導(dǎo)致集群在短時(shí)間內(nèi)不可用。
為了解決上述問題,Hadoop給出了HDFS的高可用HA方案:HDFS的HA通常由兩個(gè)NameNode組成,一個(gè)處于active狀態(tài),另一個(gè)處于standby狀態(tài)。Active NameNode對(duì)外提供服務(wù),比如處理來自客戶端的RPC請(qǐng)求,而Standby NameNode則不對(duì)外提供服務(wù),僅同步Active NameNode的狀態(tài),以便能夠在它失敗時(shí)快速進(jìn)行切換。而這里的快速切換是如何實(shí)現(xiàn)的呢?是通過zookeeper的動(dòng)態(tài)上線感知來實(shí)現(xiàn)的。
簡(jiǎn)單介紹下zookeeper是什么?
ZooKeeper 顧名思義?動(dòng)物園管理員,他是拿來管大象(Hadoop) 、 蜜蜂(Hive) 、 小豬(Pig)??的管理員, Apache Hbase和 Apache Solr 以及LinkedIn sensei ?等項(xiàng)目中都采用到了 Zookeeper。ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),ZooKeeper是以Fast Paxos算法為基礎(chǔ),實(shí)現(xiàn)同步服務(wù),配置維護(hù)和命名服務(wù)等分布式應(yīng)用。這是zookeeper的官方介紹,對(duì)于程序原來說zookeeper在hadoop中的應(yīng)用可以理解為是hadoop的整體監(jiān)控系統(tǒng),如果namenode宕機(jī)后,這時(shí)候Zookeeper?的重新選出leader。這是它最大的作用所在。
接下來看看zookeeper的動(dòng)態(tài)上線感知圖:
1、首先在hadoop中配置自動(dòng)故障轉(zhuǎn)移機(jī)制。
2、在配置HA的時(shí)候首先配置zookeeper集群,然后啟動(dòng)zookeeper集群。
3、在第一次啟動(dòng)hadoop的HA之前先初始化HA在zookeeper中的狀態(tài)然后啟動(dòng)HA,在啟動(dòng)過程中會(huì)在各個(gè)NameNode節(jié)點(diǎn)上啟動(dòng)DFSZK Failover Controller,作用就是向zookeeper中注冊(cè)服務(wù)器的信息,然后hadoop通過進(jìn)程監(jiān)控在zookeeper中的節(jié)點(diǎn)狀態(tài)。
4、在zookeeper中注冊(cè)的節(jié)點(diǎn)是臨時(shí)節(jié)點(diǎn),當(dāng)服務(wù)器宕機(jī)下線的時(shí)候,zookeeper會(huì)把這個(gè)節(jié)點(diǎn)刪除掉,這樣才會(huì)產(chǎn)生事件,客戶端(hadoop)才能監(jiān)聽到,然后hadoop將Standby NameNode轉(zhuǎn)換為Active NameNode。