项目场景:
HDFS HA 场景下NameNode journalnode数据目录损坏以及故障恢复
问题描述:
一套开源的测试集群由于journalnode目录配置错误,导致所有的3个journalnode节点数据目录丢失,启动后hdfs集群进入不可用的状态,3个namenode无法升主,且启动后一段时间会挂掉
在修复过程种,将集群1个namenode节点格式化,有时候要根据网上的正确的来,好多都是教报错的怎么格式化namenode,那样数据不都丢失了吗?
原因分析:
3个journalnode故障且数据丢失,导致namenode不能升主,总共3个namenode以及格式化了一个,也就是还有两个namenode目录中有元数据信息。
解决方案:
好记性不如烂笔头…,当时修复完处理别的问题了,没有记录,现在是真的想不起多少…
总体思路就是如何将两个namenode中的数据复制到journalnode中并恢复jn,在恢复另一个被格式化的namenode。
记得的坑位:
1、被格式化的那个namenode,格式化后这个namenode的version跟其他两个namenode会变得不一致,要改成一致的否则不能修复
大体处理步骤:
1、修改jn的目录配置改成正确的,防止目录丢失
2、执行命令初始化jn :
hdfs namenode -initializeSharedEdits
3、将namenode中的editslog相关文件传到上述步骤设置的目录中
4、启动3个jn,此时3个jn会自动同步文件
5、修改被格式化过namenode的version与其他namenode一致
6、将其他节点的namenode的fsimage和edislog复制到格式化过的namenode中,并启动所有namenode
7、中间可能会有一些报错,在nn恢复的过程中,由于复制的fsimage的txid不同,可能导致报错,要复制最新的也就是之前故障前active状态的nn下的fsimage,可以根据fsimage文件来判断