NameNode主备宕机引发的思考

简介: 大家都知道在双十一这些电商大型营销活动期间,电商网站的访问量等是平时的N倍。每当这个时候到来,无论是开发还是运维人员都严阵以待生怕服务出现问题。很不幸,笔者的一个朋友在一家电商公司上班,在双十一时,恰恰就出现了NameNode宕机的生产事故。鉴于涉及到一些公司私密信息,不便发一些排查问题截图,同时,JVM调优作为大数据从业者必备技能,笔者打算后续分篇系统阐述,这里仅就问题现象、问题分析、解决方案三个层面阐述这次生产事故从产生、排查到最终解决的历程。希望能给大家带来一定思考,避免此类事情的发生以及提供出现类似问题时处理的一个思路。

大家都知道在双十一这些电商大型营销活动期间,电商网站的访问量等是平时的N倍。每当这个时候到来,无论是开发还是运维人员都严阵以待生怕服务出现问题。很不幸,笔者的一个朋友在一家电商公司上班,在双十一时,恰恰就出现了NameNode宕机的生产事故。

鉴于涉及到一些公司私密信息,不便发一些排查问题截图,同时,JVM调优作为大数据从业者必备技能,笔者打算后续分篇系统阐述,这里仅就问题现象、问题分析、解决方案三个层面阐述这次生产事故从产生、排查到最终解决的历程。希望能给大家带来一定思考,避免此类事情的发生以及提供出现类似问题时处理的一个思路。

问题现象

电商节日,各种促销活动等导致网站访问量等激增,数据量比平时多了很多倍,然后NameNode主备都挂了!问题排查的时候发现有大量的full GC日志

问题分析

NameNode的主要职责就是管理元数据,不会频繁创建和销毁对象,官方推荐1/4--1/3给年轻代,剩下的给老年代。当然这个配比应对平时的数据量是没有问题的,但在这种大型营销活动盛行的时候,网站访问量激增带来的是数据量激增,那么NameNode需要管理的元数据也会激增,对NameNode的内存是一个很大挑战。

  1. 正常情况下,对象创建最初在新生代Eden区,Eden区放满,进行minor GC到Survivor区,反复进行minor GC,当Survivor对象年龄达到默认"15"岁,存活的对象进入老年区
  2. Namenode启动时加载元数据到堆内存,元数据一般不会改变,会一直加载到老年代,当日新增数据量特别大时,NameNode加载大量数据到老年代,然后当老年代空间不足发生full GC,日志持续剧增,导致频繁发生full GC,最终主NameNode宕掉。然后备NameNode上,同样因为频繁发生full GC最终宕掉。

解决方案

方案1:调整NameNode新生代和老年代空间大小,将年轻代空间调小一些,老年代相应调大一些。新生代和老年代比例参数:-XX:NewRatio。
(如内存分配给新生代和老年代内存总共15G,按照官方说法分配给新生代5G,老年代10G,但假如实际情况是新生代根本用不了这么多,1G左右就够用。则可分配给新生代2G,老年代13G即可)

方案2:加内存(差方案,毕竟内存有限,增加服务器配置如内存是要走申请的。。还是要解决根本问题才是王道)

最终结果

1.问题解决

2.笔者的朋友当月的鸡腿没了。。
对于NameNode主要管理元数据,而元数据一般不会频繁发生变化,可以适当将新生代比例设置小点,老年代比例设置大点。但是像Hive、Spark等任务型的,经常会频繁的创建和销毁对象,这个时候就可以把新生代比例设置大点,老年代比例设置小点以避免发生full GC的机率。

相关文章
|
5月前
|
存储 分布式计算 运维
ChunkServer 故障恢复机制
【8月更文第30天】在分布式文件系统中,如Google的GFS(Google File System)或Hadoop的HDFS(Hadoop Distributed File System),数据被划分为多个块(chunks),并分散存储在多个ChunkServer上。这种分布式的存储方式提高了系统的可扩展性和容错能力。然而,由于硬件故障和网络中断不可避免,ChunkServer需要具备强大的故障恢复机制来确保数据的一致性和可用性。本文将深入探讨ChunkServer在遇到硬件故障或网络中断时如何自动恢复数据的一致性,并通过伪代码示例来说明这些机制的工作原理。
74 0
|
3月前
|
NoSQL 算法 Redis
主从复制:多副本
【10月更文挑战第6天】
35 1
|
4月前
|
存储 移动开发 算法
Quorum NWR:通过仲裁实现数据一致性
Quorum NWR:通过仲裁实现数据一致性
95 11
|
5月前
|
运维 分布式计算 监控
NameNode如何处理DataNode故障?
【8月更文挑战第31天】
201 1
|
5月前
|
存储 缓存 Kubernetes
在K8S中,集群节点宕机,可能由哪些原因造成?
在K8S中,集群节点宕机,可能由哪些原因造成?
|
监控
一个 datanode 宕机,恢复流程
一个 datanode 宕机,恢复流程
351 0
|
NoSQL Redis
Redis哨兵集群主库故障数据恢复
Redis哨兵集群主库故障数据恢复
319 0
Redis哨兵集群主库故障数据恢复
|
NoSQL Redis 开发者
集群-主从下线与主从切换|学习笔记
快速学习集群-主从下线与主从切换
|
SQL 关系型数据库 MySQL
主库挂了,从库谋权篡位的那些事!
大家好,我是Leo。一个Java后端的程序员。之前我们介绍了MySQL如何保证高可用的相关技术点,比如可靠性优先策略,可用性优先策略,主从延迟,主从延迟的来源以及解决方案。今天我们继续上一篇文章遗留的问题作一个延伸,今天介绍一下从库的延迟问题!以及主库宕机,从库的抉择!
主库挂了,从库谋权篡位的那些事!
|
NoSQL Redis
Redis哨兵集群主库故障数据恢复(九)
Redis哨兵集群主库故障数据恢复 当主库修复后重新上线首先通过哨兵知道谁是当前的主库,然后就会去找主库同步数据,并且会自动修改配置文件,当数据同步后,想恢复的主库重新成为主库则需要把主库的权重调高,然后重新选举,这时原来的主库就能成为新的主库,调整完再将主库的权重值调成默认的
271 0
Redis哨兵集群主库故障数据恢复(九)

热门文章

最新文章