hadoop hdfs部署方案有两种,一种namenode+secondary namenode,一种2.*后的HA, HA一般采用cloudera开发的QJM方案,已经合并到Apache分支。
第一种存在单点问题,并且如果namenode数据跌了,那secondary namenode的数据来恢复会丢失最近一部分修改,secondary做checkpointing, 应该就只能恢复到上次checkpoint的数据。
HA方案namenode本身应该没做什么过多修改,利用其它组件协同工作。注意关键点两个,一个是存储改成共享存储, 一个是保证只有一个namenode提供服务。
- QJM 负责存储高可用,对应图中Shard NN, QJM大多数结点可用时QJM服务就可用。
- standby 同时做checkpoint (替代secondary namenode)
- ZKFailoverController(ZKFC) 负责监控选主切换active结点
- fencing
fencing是确保只有一个namenode active提供服务写QJM的,注意
standy NN的ZKFC在ZK发现active结点掉了的时候它要切换standby为active前先要确保原来的active真的停止服务了,目前有两种配置,最简单的就是ssh到原来的NN机器kill掉它确保没运行了再切standby为active。- sshfence - SSH to the Active NameNode and kill the process
- shell - run an arbitrary shell command to fence the Active NameNode
正常应该kill掉active后可以看到standby切换为active继续正常运作。
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/