本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见大数据技术体系
HBase 系统中主要有两类服务进程: Master 进程以及 RegionServer 进程。
Master 主要负责集群管理调度,在实际生产线上并没有非常大的压力,因此发生软件层面故障的概率非常低。
RegionServer 主要负责用户的读写服务,进程中包含很多缓存组件以及与 HDFS 交互的组件,实际生产线上往往会有非常大的压力,进而造成的软件层面故障会比较多。
下面,笔者总结了生产线上常见的一些可能导致 RegionServer 宕机的异常。
长时间的 Full GC 是导致 RegionServer 宕机的最主要原因,据不完全统计, 80 %以上的宕机原因都和 JVM Full GC 有关。
导致 JVM 发生 FullGC 的原因有很多:
其中部分原因要归结于 HBase 系统本身,另一部分原因和用户业务以及 HBase 相关配置有关。
RegionServer 写入读取数据都是直接操作 HDFS 的,如果 HDFS 发生异常会导致 RegionServer 直接宕机。
物理节点直接宕机也是导致 RegionServer 进程挂掉的一个重要原因。
通常情况下,物理机直接宕机的情况相对比较少,但虚拟云主机发生宕机的频率比较高。
很多公司会将 HBase 系统部署在虚拟云环境,因为种种原因发生机器宕机的情况相对就会多一些。
网络环境不稳定其实也可以归属于这类。
生产线上因为 HBase 系统本身 bug 导致 RegionServer 宕机的情况很少,但在之前的版本中有一个问题让笔者印象深刻: RegionServer 经常会因为耗尽了机器的端口资源而自行宕机,这个 bug 的表现是,随着时间的推移,处于 close wait 状态的端口越来越多,当超过机器的配置端口数(65535)时 RegionServer 进程就会被 kill 掉。
这类问题建议多关注 HBase 的 JIRA 主页——HBase JIRA