| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> hbase运维故障案例分析 -> 正文阅读 |
|
[大数据]hbase运维故障案例分析 |
在实际运维HBase集群时,各位小伙伴总会遇到RegionServer异常宕机、业务写入延迟增大甚至无法写入等类似问题。本章结合笔者的经验、列举真实生产线环境常见的几个问题,并介绍这些地问题的基本排查思路。同时,重点对HBase系统中的日志进行梳理介绍,最后对如何通过监控、日志等工具进行问题排查进行总结,形成问题排查套路,方便读者进行实践。 regionserver宕机案例一: 长时间GC导致Regionserver宕机长时间FullGC是RegionServer宕机最常见的原因.分析这类问题,可以遵循如下排错过程: 现象:收到Regionserver进程退出的报警。 1. 宕机原因定位步骤1: 通常在监控上看不出,需要到事发的RegionServer日志直接搜索2类关键字---a long garbage collecting pause 或ABORTING region server。对于长时间Full GC的场景,搜索第一个关键字会检索到:
步骤2: 通常CMS GC策略会在2种场景下产生严重的Full GC ,1. Concurrent Mode Failure 2. Promotion Failure。
现在基本可以确认是由于concurrent mode failure模式的CMS GC导致长时间应用程序暂停。 2. 宕机原因分析故障因果分析: JVM触发的concurrent mode failure模式的CMS GC 会产生长时间的stop the world,上层应用因此长时间暂停。进一步导致RegionServer与Zookeeper之间建立的session超时。session一旦超时,Zookeeper就会通知Master将此宕机RegionServer踢出集群。 什么是concurrent mode failure模式的GC?为什么会造成长时间暂停?假设HBase系统正在执行CMS回收老年代空间,在回收的过程中恰好从年轻代晋升了一批对象进来,不巧的是,老年代此时已经没有空间再容纳这些对象了。这种场景下,CMS收集器会停止工作,系统进入stop-the-world模式,并且回收算法会退化为单线程复制算法,重新分配整个堆内存的存活对象到SO中,释放所有其他空间。很显然,整个过程会比较漫长。 3. 解决方案既然是老年代来不及GC导致的问题,那只需要让CMS收集器更早一点回收就可以大概率避免这种情况发生。 JVM提供了参数XX:CMSInitiatingOccupancyFraction=N来设置CMS回收的时机, N表示当前老年代已使用内存占年轻代总内存的比例, 可以将值改得更小使回收更早进行,比如60 另外建议在处理时关注下系统BlockCache是否开启了offheap模式,还有JVM启动参数是否合理,JVM堆内存管理是否未合理使用堆外内存。 案例二: 系统严重Bug导致Regionserver宕机大字段scan导致RegionServer宕机 现象: RegionServer进程退出 1. 宕机原因定位步骤1: 日志。先检查GC相关,如果没有再继续搜索关键字“abort”,查到可疑日志“java.lang.OutOfMemoryError: Requested array exceeds VM limit" 步骤2: 源码确认。看到带堆栈的FALTAL级别日志,定位到源码或者根据在关键字在网上搜索,确认该异常发生在scan结果数据在回传给客户端时,由于数据量太大导致申请的array大小超过JVM规定的最大值(Interge.Max_Value-2) 2. 故障因果分析因为HBase系统自身的bug,在某些场景下scan结果数据太大导致JVM在申请array时抛出OutOfMemoryError,造成RegionServer宕机 3. 本质原因分析造成这个问题可以认为是HBase的bug,不应该申请超过JVM规定阈值的array。另一方面,也可以认为是业务方用法不当。
4. 解决方案可以在服务端做限制 hbase.server.scanner.max.result.size 大小 也可以在客户端访问的时候对返回结果大小做限制(scan.setMaxResultSize) hbase写入异常案例:HDFS缩容导致部分写入异常 现象:业务反馈部分写入请求超时异常。此时HBase在执行HDFS集群多台DataNode退役操作。 1. 写入异常原因定位步骤1: 理论上平滑退役不会造成上层业务感知 步骤2: 排查HBase节点集群监控, 发现退役操作期间节点IO负载较高 初步判断写入异常和退服期间IO负载较高有一定关系。 步骤3:在相关时间点查看RegionServer日志,搜索“Exception”,得到关键的2行:
HLog执行sync花费时间太长(13924ms), 写入响应阻塞。 步骤4: 进一步查看了DataNode日志发现刷盘很慢,有异常信息
2. 写入异常原因分析
3. 解决方案
hbase运维时问题分析思路生产线问题是系统运维工程师的导师。之所以这样说,是因为对问题的分析可以让我们积累更多的问题定位手段,并且让我们对系统的工作原理有更加深入的理解,甚至接触到很多之前不可能接触到的知识领域。就像去一个 未知的世界探索一个未知的问题,越往里面走,就越能看到别人看不到的世界。所以生产线上的问题发生了,一定要抓住机会,追根溯源。毫不夸张地说,技术人员的核心能力很大部分表现在定位并解决问题的能力上。 实际上,解决问题只是一个结果。从收到报警看到问题的那一刻到最终解决问题,必然会经历三个阶段: 问题定位,问题分析,问题修复。 问题定位是从问题出发通过一定的技术手段找到触发问题的本质,问题分析是从原理上对整个流程脉络梳理清楚,问题解决依赖于问题分析,根据问题分析的结果对问题进行针对性修复或全局修复。 1. 问题定位定位问题的触发原因是解决问题的关键。问题定位的基本流程如图:
对问题定位有用的监控指标非常多,宏观上看可以分为系统基础指标和业务相关指标两大类。系统基础指标包括系统IO利用率、CPU负载、带宽等;业务相关指标包括RegionServer级别读写TPS、读写平均延迟、请求队列长度/Compaction队列长度、MemStore内存变化、BlockCache命中率等。
对于日志分析并不需要将日志从头到尾读一遍,可以直接搜索类似于“Exception”,“ERROR”,甚至“WARN”关键字,再结合时间段对日志进行分析。
2. 问题分析解决未知问题就像一次探索未知世界的旅程。定位问题的过程就是向未知世界走去,走得越远,看到的东西越多,见识到的世面越大。然而眼花缭乱的景色如果不仔细捋一捊,一旦别人问起那个地方怎么样,必然会无言以对。 问题分析是问题定位的一个逆过程。从问题的最本质原因出发,结合系统的工作原理,不断推演,最终推演出系统的异常行为。要把这个过程分析的清清楚楚,不仅仅需要监控信息、异常日志,更需要结合系统工作原理进行分析。所以回过头来看,只有把系统的原理理解清楚,才能把问题分析清楚。 3. 问题修复如果能够把问题的来龙去脉解释清楚,相信就能够轻而易举地给出针对性解决方案。这应该是整个问题探索中最轻松的一个环节。没有解决不了的问题,如果有,那就是没有把问题分析清楚。 参考: 《HBase 原理与实践》 作者:许佳宾|Growing运维实施工程师 专注于平台实施、sla管理/工具建设、Devops开发 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/15 13:53:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |