hadoop hdfs部署方案有兩種,一種namenode+secondary namenode,一種2.*后的HA, HA一般采用cloudera開發(fā)的QJM方案,已經(jīng)合并到Apache分支。
第一種存在單點(diǎn)問題庐舟,并且如果namenode數(shù)據(jù)跌了降铸,那secondary namenode的數(shù)據(jù)來恢復(fù)會丟失最近一部分修改,secondary做checkpointing, 應(yīng)該就只能恢復(fù)到上次checkpoint的數(shù)據(jù)偷线。
HA方案namenode本身應(yīng)該沒做什么過多修改磨确,利用其它組件協(xié)同工作。注意關(guān)鍵點(diǎn)兩個(gè)声邦,一個(gè)是存儲改成共享存儲, 一個(gè)是保證只有一個(gè)namenode提供服務(wù)乏奥。
- QJM 負(fù)責(zé)存儲高可用,對應(yīng)圖中Shard NN, QJM大多數(shù)結(jié)點(diǎn)可用時(shí)QJM服務(wù)就可用亥曹。
- standby 同時(shí)做checkpoint (替代secondary namenode)
- ZKFailoverController(ZKFC) 負(fù)責(zé)監(jiān)控選主切換active結(jié)點(diǎn)
- fencing
fencing是確保只有一個(gè)namenode active提供服務(wù)寫QJM的邓了,注意
standy NN的ZKFC在ZK發(fā)現(xiàn)active結(jié)點(diǎn)掉了的時(shí)候它要切換standby為active前先要確保原來的active真的停止服務(wù)了恨诱,目前有兩種配置,最簡單的就是ssh到原來的NN機(jī)器kill掉它確保沒運(yùn)行了再切standby為active骗炉。- sshfence - SSH to the Active NameNode and kill the process
- shell - run an arbitrary shell command to fence the Active NameNode
正常應(yīng)該kill掉active后可以看到standby切換為active繼續(xù)正常運(yùn)作照宝。
reference
https://www.cloudera.com/documentation/enterprise/5-8-x/topics/cdh_hag_hdfs_ha_intro.html#topic_2_1
https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/