一、HDFS-HA故障转移机制
考虑到edits编辑日志如果放在一台active的NamNode上话,如果此节点挂掉,另外的NameNode无法获取到数据,所以引出了Edits文件管理系统:qjournal集群。
故障转移流程
- NameNode正常运行时,向去journal集群获取edits,各个NameNode节点都有一个独立的Zookeeper Failover controller(ZKFC),active的NameNode的ZKFC在Zookeeper中占用一个临时节点,其余的ZKFC通过监视此临时节点是否存在来判断active的NameNode是否还在正常运行。
- 假设active的NameNode节点挂掉了,首先此节点的ZKFC会第一时间检测到,他会试图唤醒NameNode,唤醒失败就会释放在Zookeeper上占用的临时节点
- 此时其他ZKFC会发现active的NameNode挂掉了,但他不会第一时间激活自己对应的standby的NameNode,首先他会强行杀死已经挂掉的NameNode,如果ssh补刀失败,就会调用用户自定义脚本进行处理
- 杀死之后此NameNode才会登基上位,成为active的NameNode
- 在切换过程中的资源请求会挂起,等待故障转移成功后再进行资源执行(故障转移速度很快,这点几乎不会考虑)