先達到極限眯勾,然后再突破它
HA高可用
HA概述
所謂HA(High Available)即彪,即高可用(7*24小時不中斷服務)。
實現(xiàn)高可用最關鍵的策略是消除單點故障兼丰。HA嚴格來說應該分成各個組件的HA機制:HDFS的HA和YARN的HA肘交。
Hadoop2.0之前笆载,在HDFS集群中NameNode存在單點故障(SPOF)。
-
NameNode主要在以下兩個方面影響HDFS集群
NameNode機器發(fā)生意外涯呻,如宕機凉驻,集群將無法使用,直到管理員重啟
NameNode機器需要升級复罐,包括軟件涝登、硬件升級,此時集群也將無法使用
HDFS HA功能通過配置Active/Standby兩個NameNodes實現(xiàn)在集群中對NameNode的熱備來解決上述問題效诅。如果出現(xiàn)故障胀滚,如機器崩潰或機器需要升級維護,這時可通過此種方式將NameNode很快的切換到另外一臺機器乱投。
HDFS-HA工作要點
1.元數(shù)據(jù)管理方式需要改變
內(nèi)存中各自保存一份元數(shù)據(jù)蛛淋;Edits日志只有Active狀態(tài)的NameNode節(jié)點可以做寫操作;兩個NameNode都可以讀取Edits篡腌;共享的Edits放在一個共享存儲中管理(qjournal和NFS兩個主流實現(xiàn));
2.需要一個狀態(tài)管理功能模塊
實現(xiàn)了一個zkfailover勾效,常駐在每一個namenode所在的節(jié)點嘹悼,每一個zkfailover負責監(jiān)控自己所在NameNode節(jié)點,利用zk進行狀態(tài)標識层宫,當需要進行狀態(tài)切換時杨伙,由zkfailover來負責切換,切換時需要防止brain split現(xiàn)象的發(fā)生萌腿。
3.必須保證兩個NameNode之間能夠ssh無密碼登錄
4.隔離(Fence)限匣,即同一時刻僅僅有一個NameNode對外提供服務
HDFS-HA自動故障轉移工作機制
手動轉移命令
hdfs haadmin -failover
但是手動轉移不夠方便,我們需要配置自動故障轉移毁菱,自動故障轉移為HDFS部署增加了兩個新組件ZooKeeper和ZKFailoverController(ZKFC)進程
HA的自動故障轉移依賴于ZooKeeper的以下功能:
故障檢測:集群中的每個NameNode在ZooKeeper中維護了一個持久會話米死,如果機器崩潰锌历,ZooKeeper中的會話將終止,ZooKeeper通知另一個NameNode需要觸發(fā)故障轉移峦筒。
-
現(xiàn)役NameNode選擇:ZooKeeper提供了一個簡單的機制用于唯一的選擇一個節(jié)點為active狀態(tài)究西。如果目前現(xiàn)役NameNode崩潰,另一個節(jié)點可能從ZooKeeper獲得特殊的排外鎖以表明它應該成為現(xiàn)役NameNode物喷。
ZKFC是自動故障轉移中的另一個新組件卤材,是ZooKeeper的客戶端,也監(jiān)視和管理NameNode的狀態(tài)峦失。每個運行NameNode的主機也運行了一個ZKFC進程扇丛,ZKFC負責;
健康監(jiān)測:ZKFC使用一個健康檢查命令定期地ping與之在相同主機的NameNode尉辑,只要該NameNode及時地回復健康狀態(tài)帆精,ZKFC認為該節(jié)點是健康的。如果該節(jié)點崩潰材蹬,凍結或進入不健康狀態(tài)实幕,健康監(jiān)測器標識該節(jié)點為非健康的巩趁。
ZooKeeper會話管理:當本地NameNode是健康的氮帐,ZKFC保持一個在ZooKeeper中打開的會話。如果本地NameNode處于active狀態(tài)揩晴,ZKFC也保持一個特殊的znode鎖闸溃,該鎖使用了ZooKeeper對短暫節(jié)點的支持整吆,如果會話終止,鎖節(jié)點將自動刪除辉川。
基于ZooKeeper的選擇:如果本地NameNode是健康的表蝙,且ZKFC發(fā)現(xiàn)沒有其它的節(jié)點當前持有znode鎖,它將為自己獲取該鎖乓旗。如果成功府蛇,則它已經(jīng)贏得了選擇,并負責運行故障轉移進程以使它的本地NameNode為Active屿愚。故障轉移進程與前面描述的手動故障轉移相似汇跨,首先如果必要保護之前的現(xiàn)役NameNode,然后本地NameNode轉換為Active狀態(tài)妆距。