ALM-14013 NameNode FsImage文件更新失败
告警解释
HDFS的元数据信息存储在NameNode数据目录(由配置项“dfs.namenode.name.dir”指定)中的FsImage文件中。备NameNode会周期将已有的FsImage和JournalNode中存储的Editlog合并生成新的FsImage,然后推送到主NameNode的数据目录。这个周期由HDFS的配置项“dfs.namenode.checkpoint.period”指定,默认为3600秒,即1个小时。如果主NameNode数据目录的FsImage没有更新,则说明HDFS元数据合并功能异常,需要修复。
在主NameNode节点上,系统每5分钟检测其上的FsImage文件的信息。如果在三个合并周期没有新的FsImage文件生成,则系统产生该告警。
当新的FsImage文件生成并成功推送到主NameNode,说明HDFS元数据合并功能恢复正常,告警自动恢复。
告警属性
告警ID |
告警级别 |
是否自动清除 |
---|---|---|
14013 |
重要 |
是 |
告警参数
参数名称 |
参数含义 |
---|---|
来源 |
产生告警的集群名称。 |
服务名 |
产生告警的服务名称。 |
角色名 |
产生告警的角色名称。 |
主机名 |
产生告警的主机名。 |
NameService名 |
产生告警的NameService名称。 |
对系统的影响
如果主NameNode数据目录的FsImage没有更新,则说明HDFS元数据合并功能异常,需要修复。如不修复,HDFS在运行一段时间后,Editlog会一直增长。此时如果重启HDFS,由于要加载非常多的Editlog,会导致启动非常耗时。另外,该告警的产生也说明备NameNode功能异常,导致NameNode的HA机制失效。一旦主NameNode故障,则整个HDFS服务将不可用。
可能原因
- 备NameNode被停止。
- 备NameNode实例运行状态异常。
- 备NameNode合并新的FsImage失败。
- 备NameNode数据目录空间不足。
- 备NameNode推送FsImage到主NameNode失败。
- 主NameNode数据目录空间不足。
处理步骤
查看备NameNode是否被停止。
- 在FusionInsight Manager首页,选择“运维 > 告警 > 告警”,在告警列表中单击此告警。
- 在告警详情区域,查看“定位信息”,获取告警产生的主NameNode的主机名和所在的NameService名称。
- 选择“集群 > 待操作集群的名称 > 服务 > HDFS > 实例”,在实例列表中找到该NameService的备NameNode实例,查看其“配置状态”是否为“已同步”。
- 勾选该备NameNode实例,单击“启动实例”,等待启动完成。
- 等待1个NameNode合并元数据的周期时间后,查看告警是否清除。
- 是,处理完毕。
- 否,执行6。
查看备NameNode实例运行状态是否正常。
- 查看该备NameNode实例的“运行状态”是否为“良好”。
- 勾选该备NameNode实例,单击“更多 > 重启实例”,等待启动完成。
重启备NameNode业务不受影响。
- 启动完成后,等待1个NameNode合并元数据的周期时间,然后查看告警是否清除。
- 是,处理完毕。
- 否,执行30。
备NameNode合并新的FsImage是否失败。
- 在FusionInsight Manager首页,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 配置 > 全部配置”,搜索并获取“dfs.namenode.checkpoint.period”的值,该值即为NameNode合并元数据的周期。
- 选择“集群 > 待操作集群的名称 > 服务 > HDFS > 实例”,获取产生该告警的NameService的主、备NameNode节点的业务IP地址。
- 单击“NameNode(xx,备)”,单击“实例配置”,获取配置项“dfs.namenode.name.dir”的值,该值即为备NameNode的FsImage存储目录。
- 以root或omm用户登录备NameNode节点。
- 进入到FsImage存储目录,查看最新的FsImage的生成时间。
cd 备NameNode存储目录/current
stat -c %y $(ls -t | grep "fsimage_[0-9]*$" | head -1)
- 执行date命令获取系统当前时间。
- 计算最新FsImage的生成时间和当前时间的时间差,判断该时间差是否大于元数据合并周期的三倍。
- 备NameNode合并元数据的功能异常。执行以下命令查看是否为存储空间不足造成。
进入到FsImage存储目录,查看最近一个的FsImage的大小(单位为MB)。
cd 备NameNode存储目录/current
du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
- 执行命令查看备NameNode的磁盘剩余空间(单位为MB)。
df -m ./ | awk 'END{print $4}'
- 对比FsImage的大小和目录剩余空间大小,看剩余空间是否还能存储一个FsImage文件。
- 清理该目录所在磁盘的冗余文件,以便给元数据存放预留足够的空间。空间清理完毕后等待1个NameNode合并元数据的周期时间,查看告警是否清除。
- 是,处理完毕。
- 否,执行20。
查看备NameNode推送FsImage到主NameNode是否失败。
- 以root用户登录备NameNode节点。
- 执行su - omm命令切换到omm用户。
- 使用如下命令查看备NameNode是否能将文件推送到主NameNode上。
tmpFile=/tmp/tmp_test_$(date +%s)
echo "test" > $tmpFile
scp $tmpFile 主NameNode的业务IP:/tmp
- 联系MRS集群管理员,处理在omm用户下备NameNode无法推送数据到主NameNode的原因。故障恢复后等待1个NameNode合并元数据的周期时间,查看告警是否清除。
- 是,处理完毕。
- 否,执行24。
查看主NameNode数据目录空间是否不足。
- 在FusionInsight Manager首页,选择“集群 > 待操作集群的名称 > 服务 > HDFS > 实例”,单击产生告警的NameService的主NameNode,单击“实例配置”,获取配置项“dfs.namenode.name.dir”的值,该值即为主NameNode的FsImage存储目录。
- 以root或omm用户登录主NameNode节点。
- 进入到FsImage存储目录,查看最近一个的FsImage的大小(单位为MB)。
cd 主NameNode存储目录/current
du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
- 执行如下命令查看主NameNode的磁盘剩余空间(单位为MB)。
df -m ./ | awk 'END{print $4}'
- 对比FsImage的大小和目录剩余空间大小,看剩余空间是否还能存储一个FsImage文件。
- 清理该目录所在磁盘的冗余文件,以便给元数据存放预留足够的空间。空间清理完毕后等待1个NameNode合并元数据的周期时间,查看告警是否清除。
- 是,处理完毕。
- 否,执行30。
收集故障信息。
告警清除
此告警修复后,系统会自动清除此告警,无需手工清除。
参考信息
无。