初始化journal node的数据
hdfs namenode -initializeSharedEdits
执行完后,可以发现三台服务器所配的路径/home/hadoop-sny/bigdata/dfs/journal/data
下都有了edit.log与fsimages文件
d. 对比三台机器current路径下的最后一条edit.log,都是一样的。
执行完后,可以去看一下三台机器此路径下的current的edit.log与namenode路径下的edit.log做比较,其实最后一条数据是一样的。
e. 如果是全新的搭建HA的HDFS集群,在执行第a步后,就可以直接在master中格式化整个HDFS即可,(因为此处是在原本有HDFS的基础上搭建,所以,此步省略)
hdfs namenode -format
5. 校验HA配置
a. 启动HDFS
start-dfs.sh
会发现我们的namenode会从两台机器上启动
b. 查看nn1、nn2这个nameNode的状态(即master、slave1的状态)
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
发现两个都是standby状态,需要手动设置为活跃:
c. 将nn1设置为active状态
hdfs haadmin -transitionToActive nn1
如需设置为Standby,可参考下面命令
hdfs haadmin -transitionToStandby nn1
至此可以手动设置HDFS的namenode的状态!
0x03 配置Zookeeper自动切换状态
1. 配置hdfs-site.xml、core-site.xml
a. 停止HDFS
stop-dfs.sh
b. 配置master上的hdfs-site.xml
,添加内容:
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
c. 配置master上的core-site.xml
,添加内容:
vi $HADOOP_HOME/etc/hadoop/core-site.xml
<property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> </property>
d. 同步配置文件到slave1和slave2上:
~/shell/scp_all.sh $HADOOP_HOME/etc/hadoop/hdfs-site.xml
~/shell/scp_all.sh $HADOOP_HOME/etc/hadoop/core-site.xml
2. 初始化ZooKeeperFailoverController
a. 启动三台服务器的Zookeeper,不启动会报错
zkServer.sh start
b. 初始化ZooKeeperFailoverController,在master中执行
~/bigdata/hadoop-2.7.5/bin/hdfs zkfc -formatZK
执行完后,进入ZK的客户端,会发现多了一个hadoop-ha的节点,此节点用于进行master的选举。
c. 在master中执行
start-dfs.sh
3. 验证Zookeeper自动切换状态结果
a. 查看进程及两个namenode的状态
b. 可以查看集群的内容(如果是standby状态,WEB UI界面是看不到的)
hadoop fs -ls hdfs://mycluster/
c. 杀死active的namenode看看namenode的active是否会转换:
hadoop-daemon.sh stop namenode
或者kill掉master上的namenode进程,重新回去查看50070端口,发现状态slave1已切换成active,至此,所有配置以及完成。
0xFF 总结
如果发现自己状态无法自动改变,请检查hdfs-site.xml里面的配置的私钥路径(dfs.ha.fencing.ssh.private-key-files)是否正确,然后重新初始化zkfc,然后重新启动ZK与HDFS集群。
查看日志:
tail -fn200 /home/hadoop-sny/bigdata/hadoop-2.7.5/logs/hadoop-hadoop-sny-zkfc-master.log
如报错:java.lang.RuntimeException: Unable to fence NameNode at slave1/192.168.128.132:8020
可能是没有安装fuser,用root用户在master和slave1上安装fuser:
yum -y install psmisc
更多原因可参考此文章:Hadoop HA:active节点失效后standby 节点无法被拉起
请与HBase的HA配置做一下对比。
学习,其实用非HA模式也够了,有需要请看下面的教程:HDFS恢复非HA状态,而且,我的教程也将会采取非HA模式进行开发,如需参考更多,请恢复非HA状态,感谢大家的支持。