NameNode高可用性的2个备用NameNode

1、功能描述:

在Hdfs3.0以前版本中,一个hdfs只有两个namenode服务,一个是active状态,一个是standby 状态。当active namenode进程挂掉后,standby namenode会变成active状态,保证hdfs服务正常运行。但是这时如果这个standby namenode也挂掉了,则hdfs将无法提供服务。基于这种情况,hdfs3.0可以允许有一个active namenode,多个standby namenode,从而防止这种情况发生。

2、功能实现:

由于ambari界面没有直接提供该功能实现。需要我们通过ambari rest api来进行实现。
调整dfs.qjournal.write-txns.timeout.ms 到90s

2.1、安装相关组件

前置条件:先将主机注册到集群中。

在需要安装namenode的节点通过ambari rest api进行安装:
curl -u admin:admin1219 -i -H “X-Requested-By:ambari” -X POST ‘http://10.29.31.243:8080/
/api/v1/clusters/hbcm_ocdp/hosts/hbbdc-sc-rm-01/host_components/NAMENODE’

curl -u admin:admin1219 -i -H “X-Requested-By:ambari” -X PUT ‘http://10.29.31.243:8080/
/api/v1/clusters/hbcm_ocdp/hosts/hbbdc-sc-rm-01/host_components/NAMENODE’ -d ‘{“HostRoles”: {“state”: “INSTALLED”}}’

curl -u admin:admin1219 -i -H “X-Requested-By:ambari” -X POST ‘http://10.29.31.243:8080/
/api/v1/clusters/hbcm_ocdp/hosts/hbbdc-sc-rm-01/host_components/ZKFC’

curl -u admin:admin1219 -i -H “X-Requested-By:ambari” -X PUT ‘http://10.29.31.243:8080/
/api/v1/clusters/hbcm_ocdp/hosts/hbbdc-sc-rm-01/host_components/ZKFC’ -d ‘{“HostRoles”: {“state”: “INSTALLED”}}’

2.2、修改hdfs配置

dfs.ha.namenodes.hbcm_ocdp=nn1,nn2,nn3
dfs.namenode.http-address.hbcm_ocdp.nn3=hbbdc-sc-rm-01:50070
dfs.namenode.https-address.hbcm_ocdp.nn3=hbbdc-sc-rm-01:50470
dfs.namenode.rpc-address.hbcm_ocdp.nn3=hbbdc-sc-rm-01:8020
ocdp5.0添加多namenode详细步骤 - 图1

2.3、关闭hdfs、zkfc的自动重启

2.4、停止StandByNameNodeZKFC

2.5、停止ActiveNameNodeZKFC

2.6、FormatActiveNameNodeZKFC

su ocdp
hdfs zkfc -formatZK

2.7、启动ActiveNamenodeZKFC

2.8、启动原来namenode对应的StandByNamenodeZKFC

启动原来namenode对应的StandByNamenodeZKFC

2.9、在新加namenode同步元数据

su ocdc
hdfs namenode -bootStrapstandby

2.10、启动新增namenode服务

hdfs dfsadmin -safemode get

2.11、启动新增namenode节点ZKFC

注意:⚠️生产环境可以考虑第二个standbynamenode启动完后执行下面的操作(轮询重启)

2.12、重启journalnode

需一个一个重启journal,待一个journal正常后再重启下一个journalnode

2.13、轮询重启datanode


重启所有zkfc,使配置刷到本地磁盘。然后停止zkfc服务,重新format zkfc:
sudo su ocdc -l -c ‘hdfs zkfc -formatZK’
启动zkfc,在新加namenode节点执行:
sudo su ocdc -l -c ‘hdfs namenode -bootStrapstandby’
重启hdfs服务即可。

如果成功,显示如下:
ocdp5.0添加多namenode详细步骤 - 图2

3、回退测试:

关闭zkfc的自动重起

3.1、删除还原添加的参数

删除如下属性:
dfs.namenode.http-address.ocdp40.nn3=host-10-25-176-98:50070
dfs.namenode.https-address.ocdp40.nn3=host-10-25-176-98:50470
dfs.namenode.rpc-address.ocdp40.nn3=host-10-25-176-98:8020
还原如下属性:
dfs.ha.namenodes.ocdp40=nn1,nn2

3.2、停止新增StandByNameNodeZKFC

3.3、停止新增NameNode

3.4、Rolling Restart The Datanodes

rolling重启一下datanode

4.3、停止StandByNameNodeZKFC

4.4、停止ActiveNameNodeZKFC

4.8、重启StandByNamenode

等待退出安全模式

4.3、启动StandByNameNodeZKFC

4.3、启动ActiveNameZKFC

4.10、重启ActiveNameNode

nn正常进行切换

4.10、删除新安装的hdfs组件

curl -u admin:admin1219 -i -H ‘X-Requested-By: ambari’ -X DELETE ‘host-10-25-176-90:8080/api/v1/clusters/ocdp40/hosts/host-10-25-176-98/host_components/NAMENODE’
curl -u admin:admin1219 -i -H ‘X-Requested-By: ambari’ -X DELETE ‘host-10-25-176-90:8080/api/v1/clusters/ocdp40/hosts/host-10-25-176-98/host_components/ZKFC’

4.11、重启journalnode

需一个一个重启journal,待一个journal正常后再重启下一个journalnode