Hadoop HA namenode宕机环境恢复

描述

Ambari管理的Hadoop生产集群开启了HA,在运行期间,namenode1(nn1)为活跃(active)namenode,namenode2(nn2)为备用(standby)namenode。

nn1主机在运行期间宕机,nn2切换为active namenode,重启nn1主机,系统启动失败。

硬件检测正常,排除硬件问题。

最优的解决方案是修复操作系统,尝试多种方法,结果失败。

这时,集群故障已经持续将近两周。

接下来能想到的解决方案是重装操作系统,然后恢复主机上的原有服务和数据。

思路

现状

Hadoop集群的两个namenode是nn1和nn2,其中nn1主机宕机,集群只有nn2这个namenode。虽然集群运行状态正常,但是已经影响到业务。

思考

从理论上来看,Hadoop的主备namenode,备用namenode除了提供高可用的功能外,还负责更新HDFS元数据,也就是secondarynamenode的功能,定期处理edits和fsimage。所以处于这种状况的Hadoop集群,功能是不完整的,但是可以坚持一段时间,这段时间就可以尽快恢复nn1服务。

这种情况下,需要重装nn1主机的操作系统,恢复ambari-agent服务,然后恢复nn1主机原有的服务,主要是Hadoop服务。

想到的恢复服务的方法有两个。

第一个是利用Ambari进行Hadoop的HA回滚。这种方法会根据正常运行的namenode(这里指nn2),重新生成一个namenode(这里指新的nn1),这个操作可能会用nn2的数据覆盖nn1的原有的数据。具体我这里没有研究。

第二个是在新系统上完整的复原服务。我是这么想的,现在的集群情况,可以认为nn1主机处于关机状态,只要开机启动服务,就可以让Hadoop自行恢复。现在是nn1主机的操作系统出问题,需要重装系统,之后所要做的事就是,在新系统上还原服务状态,使其最后相当于主机关机状态,然后开机启动服务。从理论上说,这个方法可以比较完整的恢复服务和状态。

我是按照第二个方法做的,这个是我自己的猜想,需要模拟故障环境进行验证。不过结果证明这个方法是可行的。下面讨论一下恢复过程。

恢复方案

目标是在新安装的操作系统上还原服务环境,然后恢复服务。

  1. 备份,备份宕机主机上的服务的关键目录
  2. 重装操作系统
  3. 配置预安装环境
  4. 恢复ambari-agent
  5. 恢复Hadoop服务

重要:如要参考此方案恢复类似问题,建议先在故障模拟环境中测试。

恢复操作

备份

备份宕机主机上的服务的关键目录,关键目录如下表:

目录 说明
/etc/ambari-agent ambari-agent的配置目录
hdfs的dfs.namenode.name.dir配置指定的目录 在生产环境中,一般是一个单独的磁盘
hdfs的dfs.namenode.edits.dir配置指定目录 默认使用dfs.namenode.name.dir的参数

重装操作系统

操作系统环境要和之前的操作系统环境保持一致,包括网络环境,主机名等。

注意IP和主机名一定要保持一致。

配置预安装环境

  1. 登录操作系统,确认主机名和IP与之前环境保持一致。
  2. 从其他的正常节点上复制/etc/hosts文件到本机。
  3. 设置ambari-server主机到新主机的免密登录。
  4. 关闭防火墙。
  5. 设置selinux配置,编辑/etc/selinux/config,将SELINUX的参数值修改为disabled。
  6. 设置jdk,需要和原环境保持一致
  7. 同步时间
  8. 复制安装源文件ambari.repo到新主机上。

还原ambari-agent

安装ambari-agent

yum install ambari-agent

复制以下目录到对应目录

/etc/ambari-agent

还原Hadoop服务

安装软件包

安装hdp-select

yum install hdp-select

安装Hadoop

需要安装对应的安装包,版本对应已安装的hdp版本号。

yum install hadoop_<version>-client \
hadoop_<version>-yarn \
hadoop_<version> \
hadoop_<version>-libhdfs \
hadoop_<version>-mapreduce \
hadoop_<version>-hdfs

还原服务数据

还原Hadoop元数据

如果Hadoop元数据存储在独立磁盘上,则直接挂载到配置目录并设置开机自动挂载。

如果Hadoop元数据存储在操作系统目录上,则将之前备份的数据直接放到对应目录。

从宕机的namenode节点上复制,也就是之前备份的数据。生产环境中,namenode元数据一般放在独立磁盘中。

注意目录的用户权限,可以参考另一台正常的namenode的信息。

还原配置目录

从另一台正常的namenode主机上,将配置目录复制到新系统的对应目录。

复制之后,目录软链可能不对,需要手动设置。

启动服务

启动ambari-agent

ambari-agent start

在Ambari Web上启动Hadoop服务,启动过程中可能遇到权限问题,需要根据提示修改目标的权限。顺利的话,服务应该可以恢复正常。

后记

在整个恢复过程中,还算比较顺利,只在启动服务时遇到了用户权限问题。

在服务恢复后,在最初几天的观察中,整个集群没有异常。

希望本篇文章对遇到同样问题的朋友有用。

你可能感兴趣的:(大数据)