资讯专栏INFORMATION COLUMN

hbase无法启动问题处理

IT那活儿 / 874人阅读
hbase无法启动问题处理

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!





故障现象



某日接到客户反映hbase的测试环境无法启动故障。最终定位原因为hbase regions负载过大崩溃,测试人员在恢复失败后对zk实例删除了一个,导致zk实例数据异常最终无法正常启动完成,进一步导致hbase无法恢复启动。
恢复启动后发现hbase的regions数量过多,单节点超过5000 regions,后续对集群进行优化,清理过期历史数据,释放regions至正常水平,最终单节点承载数约1000regions左右。
虽然此次处理的为测试环境,但处理hbase数据库这种zk+hdfs+hbase常规综合架构问题的思路可以分给大家,于是将此次问题处理的主要流程及思考,结合zookeeper及hbase相关各组件的原理介绍,分享如下。





故障处理过程



1. 登录CM管理界面,发现登录正常,但是集群处于关闭状态。
2. 检查集群节点磁盘状态,发现状态正常,未有磁盘满的节点情况出现。
3. 尝试对zookeeper服务进行启动,发现无法启动,报错拒接连接。
操作解析:hbase的运行底层是依赖zookeeper组件存储hbase运行所需的关键信息的,比如当前活动master节点、backup-masters节点、table名称信息等,所以我们启动hbase服务之前,前提一定是zookeeper服务启动而且运行正常。
日常处理某些hbaes异常故障或者性能问题时,如果hbase侧排查未发现明显问题,此时也可以转方向查看hbase所依赖的zookeeper组件或者hdfs组件是否有问题。
4. 检查zookeeper实例,发现zk的实例被删除了一个,进一步检查zk的数据目录,发现有一个log文件大小为0,怀疑此最新的异常log导致zk无法启动。
5. zk的节点数进行恢复,并将异常的log文件log.d161f9进行删除,同时将次新的一个数据文件和snapshot文件scp到新加入的zk节点数据目录。
操作解析:zookeeper的运行中会定时将全量数据形成一个快照存放在zookeeper配置的数据目录dataDir中,命名snapshot.<当前事务ID>,全量后续zk中的的变化会存储在一个叫log.<当前事务ID>中。
所以zookeeper的正常运行其实只需要最近一次的snapshot和log文件,就能保证其数据的完整性,而且所有zk的节点的数据是一致的,如果某个节点数据异常,是可以将leader节点的dataDir中的最新snapshot和log文件复制到异常节点来进行启动恢复的。
6. 再次对处理后的zookeeper服务进行启动,已能够成功启动服务。
7. zookeeper启动完成后,使用zkCli.sh命令行进入zk目录,ls查看之前的文件,/hbase所使用的目录均正常,数据未丢失。
8. 恢复hdfs服务,使用CM界面对hdfs服务进行启动,启动成功。
操作解析:hbase是一个数据库,数据库的运行会依赖文件系统,hbase所依赖的文件系统即是hdfs,所以启动hbase之前,一定要保证hdfs的服务启动且运行正常的。同理日常生产中有些hbase的性能问题,我们同样可以从hdfs侧的方向同步进行排查。
9. 恢复hbase服务,对hbase服务进行启动,启动成功。
10. 使用hbase shell命令行进入对hbase服务进行测试,发现异常报错regions not online出现。
11. 检查hbase-master日志,发现存在大量的reigons online信息。
12. 此时登录CM界面和hbase-master web界面查看,也发现hbase存在大量的regions还在transition状态,而且超过了水位线。 
13. 怀疑hbase出现regions过载,导致启动后大量的regions需要重新上线,于是等待所有的reigons逐渐上线完成。
操作解析:hbase运行很久且存在大量数据时,hbase服务虽然启动完成了,但是初始化进行大量的表和reigons上线其实是很耗时的,如果日常维护时发现hbase启动后立即进行表数据的查询发现报错了,千万不要盲目再次进行重启,一定先检查master日志看hbase集群是否还在初始化中,在拥有大量的表和regions的hbase集群中,hbase的完全启动可能需要花费几分钟甚至几十分钟才能完成。
14. 上线完成后,hbase服务恢复正常,查询已能够正常返回结果,但集群共计10874个regions,共计2个节点,一个节点超过了5000+regions,比正常水平的单节点维持800-1000regions的建议值高了5倍以上。
15. hbase负载严重过载,与业务人员讨论后,确定了清理过期测试数据的方案,释放集群的regions数量,对2021年以前的所有表进行删除。
16. 清理完成后,再次检查regions总数,集群总regions数量已经2264个了,平均单节点1100个左右,基本处于正常水平。
操作解析:在官方的建议中,hbase的regionserver节点承载的reigons建议值是低于400,在实际使用和生产环境中,我们认为JVM设置最大32G时,低于1000个reigons是一个正常且安全的值(因为如果按官方低于400部署集群的话,集群所需的机器投入会更多)。
当hbase出现性能问题时,我们可以首先统计各个regionserver的承载regions数量,过多的regions存在某个reigonserver上时,就容易出现访问热点问题,集群的请求就会不平衡,这是日常最常见的hbase性能问题
17. 至此,hbase服务无法启动的问题恢复完成,CM界面上所有的服务均启动恢复完毕,故障处理完成因为测试集群机器数量无法满足最低3节点原因,部分组件存在黄色告警信息,可忽略。





故障根因分析



此次故障初步分析根本原因hbase集群在进行相关写入测试时,有大量的预分区和数据写入,没有及时进行清理,时间久了导致hbase因负载过高而崩溃。

溃后测试人员尝试进行恢复但是失败,期间进行了zk实例的删除,zk异常启动时,写入log失败导致出现了大小为0的最新log文件,进一步导致最终zk无法正常启动。





 优化建议



1. 对hbase历史的数据进行清理,释放集群的regions数量,维持在较健康的水平(已完成);

2. 测试人员在后续测试后,及时进行hbase表及数据的清理,避免多人大量数据写入导致hbase负载过高而崩溃,清理数据方法为truncate ‘tablename’(已通知测试人员);

3. 建议测试环境的重要权限进行人员管控,CM管理界面的admin密码不要让过多人员有权进行操作,避免再次出现误删除zookeeper实例或者其他实例的问题。





写在文末



1. hbase集群的运行通常是一个zk+hdfs+hbase综合的架构,处理hbase问题时,一定不要单只看hbase组件,综合zookeeper和hdfs组件一起分析往往有奇效;

2. zookeeper组件在此综合架构中属于最底层,建议部署时只作为hdfs和hbase组件依赖使用,不要用于其他业务数据的存储使用,避免zk的问题影响到整个hdfs和hbase集群;

3. 文中hbase regionserver建议承载reigons在1000以内是基于JVM设置32G的前提下的,如果环境JVM过小,承载regions的数量建议也对应减少,另regionserver的JVM不建议高于32G,避免GC的时机过久导致服务异常。




本文作者:何  青

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129575.html

相关文章

  • Apache Trafodion技术架构介绍

    摘要:它主要包括以下几部分采用对文本进行文法分析,生成语法树。对语法树进一步进行分析,类似程序编译器的语义分析,对语法合格的进一步进行检查。优化器对语法树应用各种规则,生成不同的执行计划,形成一个搜索空间。 Trafodion简介 Trafodion是一个构建在Hadoop/HBase基础之上的关系型数据库,它完全开源免费。Trafodion能够完整地支持ANSI SQL,并且提供ACID事...

    DevYK 评论0 收藏0
  • Apache Trafodion技术架构介绍

    摘要:它主要包括以下几部分采用对文本进行文法分析,生成语法树。对语法树进一步进行分析,类似程序编译器的语义分析,对语法合格的进一步进行检查。优化器对语法树应用各种规则,生成不同的执行计划,形成一个搜索空间。 Trafodion简介 Trafodion是一个构建在Hadoop/HBase基础之上的关系型数据库,它完全开源免费。Trafodion能够完整地支持ANSI SQL,并且提供ACID事...

    zhjx922 评论0 收藏0
  • Trafodion值得放入工具箱,因为有以下优点

    摘要:而支持事务处理,尤其是分布式情况下的事务和数据一致性是很复杂的事情。 Trafodion是Apache基金会的一个开源项目,提供了一个成熟的企业级SQL-on-HBase解决方案。Trafodion的主要设计思想是处理operational类型的工作负载,或者是传统的OLTP应用。此外,对于需要保证数据一致性、需要标准SQL开发接口,或者需要实时数据读写分析的应用,Trafodion也...

    luckyyulin 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<