hbase集群regionserver死亡分析

这是一次生产hbase事故。那天在上海出差,同事打电话说生产hbase 4个regionserver 都挂了,master活着,听到这个信息心情非常沉重,这么久还没发生过这样的事,立马让同事把regionserver重启,把生产日志全部拿下来分析。那天在上海办公室看了2个小时日志分析原因。以下为分析日志及过程:
从日志中可以看到宕机前频繁的大批量的数据查询
hbase集群regionserver死亡分析
文章图片

hbase zookeeper客户端session过期
hbase集群regionserver死亡分析
文章图片

hbase regionserver jvm gc时间超过三分钟
hbase集群regionserver死亡分析
文章图片

hbase regionserver日志中报找不到/hbase/WALs目录,我检查了那几天hdfs文件系统均为正常
hbase集群regionserver死亡分析
文章图片

后面排查应用发现为一个新业务用户在spark上运行了一个分析任务做大批量的入库查询动作,停掉后服务正常。
结论:regionserver全部宕机是由于任务进行大批量数据的读写造成regionserver服务GC时间过长超过 regionserver zookeeper session最大超时时间(regionserver zookeeper session 超时时间设为2min),zookeeper会认为 hbase regionserver已死,master通知其它节点接管,其他regionserver会读取wal进行恢复regions,处理完的wal,会把wal文件删除,hbase regionserver恢复过来,找不到wal报错,从zookeeper得知自己已死就会关闭自己。

后续改进方案:服务端 hbase quota表限流 ,hbase进行扩容,批量实时hbase物理隔离使用regionserver groups,有条件的可以多hbase集群分离。 客户端 代码修改使用官方推荐api,控制查询数据的范围,控制并发量,批量查询入库提前更管理员沟通,方案可行行验证。
















【hbase集群regionserver死亡分析】

    推荐阅读