HA启动流程
1.健康监控
HealthMonitor调用doHealthChecks()发送两个远程调用:HAServiceProtocol#getServiceStatusHAServiceProtocol#monitorHealth
确认NameNode状态为SERVICE_HEALTHY,如果此时NameNode没启动,ZKFC会关闭重启,直到NameNode进程启动。
2.选举
/hadoop-ha/${nameservice}/ActiveStandbyElectorLock
3.触发fencing
如果ActiveBreadCrumb节点有值会触发fencing。
4.写ZK
ActiveStandbyElector将Active的主机地址写入ZK的/hadoop-ha/${nameservice}/ActiveBreadCrumb节点
5.选举成功后
ZKFailoverController通知NameNode转换为Active状态。
原理
ZK路径
2020-05-12 11:03:16,685 INFO org.apache.hadoop.ha.ActiveStandbyElector: Yielding from election
ZKFC
ActiveStandbyElector:选举
HealthMonitor:监控NN状态
JournalNode
注意事项
fencing配置注意事项
<!-- 指定选择哪个隔离的方案,选择SSH --><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property>
启动命令注意事项
没有数据启动HA启动命令
hdfs zkfc -formatZK# Active 第一hdfs namenode -format# StandBy节点hdfs namenode -bootstrapStandby
有数据的集群升级成HA启动命令
hdfs zkfc -formatZK# namenode之前有数据hdfs namenode -initializeSharedEdits# StandBy节点hdfs namenode -bootstrapStandby
手动主备切换
hdfs haadmin -failover nn1 nn2
