1.8 删除/hadoop-ha/hdfsHACluser节点及其子节点
现象:两个Namenode都为Standby状态
解释:
- 两个Namenode被kill后,健康状态变为SERVICE_NOT_RESPONDING,运行quitElection方法,删除znode,销毁zookeeper客户端对象
- 两个Namenode重新上线后,HealthMonitor检测到健康状态为HEALTHY,会调用joinElection方法,尝试创建/hadoop-ha/hdfsHACluster/ActiveStandbyElectorLock节点,但hdfsHACluster节点被我们删除了,会报fatalError,ZKFC SHUTDOWN,两个Namenode维持standby状态
- 守护进程拉起ZKFC,ZKFC检测到父节点hdfsHACluster不存在,SHUTDOWN,之后进入不断重启的循环。
- 运行hdfs zkfc -formatZK后会创建/hadoop-ha/hdfsHACluster节点,之后流程和正常启动后类似,恢复正常。
1.9 Namenode磁盘空间不足
现象:SNN切换为ANN,ANN切换为SNN,可以继续读写文件
问题:此时,再kill ANN,SNN会不会变成ANN
解释:
- HM检测到磁盘空间不足,健康状态变为SERVICE_UNHEALTHY,调用quitElection方法,断开连接,销毁zk客户端,锁节点自动删除
- SNN watch到锁节点删除事件,joinElection,创建锁节点;fence原ANN节点,使其状态变为Standby;自己成为ANN
- 此时,再kill ANN,对SNN不会产生影响,因为SNN所在ZKFC已经没有zk客户端,HM一直处于“检测-UNHEALTHY”的循环。
1.10 znode数据异常(修改ActiveBreadCrumb节点内容)
现象:两个NN节点都为Standby状态
解释:
- 删除锁节点后,两个ZKFC都watch到这一事件,开始抢占创建锁节点
- ZKFC1成功创建锁节点,开始fence另一个节点的NN
- ZKFC1解析ActiveBreadCrumb中的信息失败,fence失败,rejoinElection(断开zk连接;joinElection)
- ZKFC1断开zk连接后,锁节点删除,被ZKFC2观察到,创建锁节点,开始fence另一个节点的NN
- ZKFC1和ZKFC2开始陷入3和4的死循环,两个NN一直处于Standby状态