云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据

摘要: 使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。

概述

使用过开源HBase的人都知道,运维HBase是多么复杂的事情,集群大的时候,读写压力大,配置稍微不合理一点,就可能会出现集群状态不一致的情况,糟糕一点的直接导致入库、查询某个业务表不可用, 甚至集群运行不了。在早期0.9x版本的时候,HBase的修复工具还有一下bug,使得即使你懂得如何修复的情况下,依然需要多次重复运行命令,绕过那些不合理的修复逻辑,甚至有时候需要自己写代码预先修复某个步骤。

背景

上周五,某公司使用的某DataHup 大数据产品自建一个HBase集群挂了!整个集群有30+T 业务数据,是公司的数据中心,集群直接启动不了。他们也是经历了熬战一天一夜的情况下,依旧没有解决恢复,还曾有过重装集群重导数据念头。最后,通过钉钉HBase技术交流群找到群主——阿里云HBase的封神。随后其立即下达命令,临时成立 HBase抢救小分队,尽力最大的努力,使用最低风险的方式,抢救最完整的集群。
蹭蹭蹭,几个抢救队员集齐,开始救火。

救火开始

虽然紧急,但是抢救工作不能乱,我们把救火过程主要分为几步:

?1. 定位现象问题所在
?
首先与用户沟通现场环境情况,以及客户在出问题之前做过哪些重大操作,特别是一些特殊操作,平时没做过的。据用户描述已经远程观察了解到,用户使用开源的某DataHup自建了一个HBase集群, 存储公司的大量的业务,是公司的数据中心。集群有7个RegionServer、2个Master,32核256G的机器配置,业务数据量有30+T。HBase的master已经都挂了,两个RegionServer也挂了,用户使用过“重启大法”,依旧无法正常运行。
?寥寥几句没有更多信息,我们只能上集群开日志,打jstack,观察HBase运行流程为什么中断或者挂掉。

?首先我们先检查HDFS文件系统,fsck发现没有什么异常。其次开始检查HBase,把Debug日志打开,全部关闭HBase集群,为了便于观察现象,只启动一个Master和一个RegionServer。启动后,发现Master 因为fullscan meta表(master启动的一个流程)timeout Abort 终止了。观察meta region分配到的RegionServer也挂了,查看日志并没有异常,貌似是这个开源的DataHup 当RegionServer scan数据操作超时 会被manager kill掉的样子。打jstack发现,Master确实在等待fullscan meta完成,而接管meta region的RegionServer确实一直在忙着scan meta数据,确实有忙不过来超时了。按理说,扫描meta表应该很快的才对。

?检查发现HDFS的HBase meta表有1T多数据!!!进一步查看现象HFile的内容,发现了大量的Delete famly 的cell存在,而且很多是重复的,序列号(没有截图,想象一下)。问题现象定位了,用户使用这个系列的DataHup 的HBase生态时,有组件存在bug往hbase meta表写了大量的这些冗余的delete数据,导致hbase 启动时full scan meta卡着,最终导致整个集群无法正常启动运行服务。

2. 提出解决方案,评估风险

我们很快生成了两个相对较优的方案。第一个是使用离线compaction,把hbase meta表进行一次major compaction把多余的delete family删除,然后再重启即可。第二个方案是,直接移除meta 表的无用hfile, 逆向生成meta 表数据进行修复meta表即可。

第一个方案做离线compaction对集群来说没有什么风险,缺点是离线compaction并不快,因为meta表region只有一个,执行离线meta表compaction时只有一个task,非常的缓慢耗时。

第二个方案是逆向修复meta表信息。看似风险很大,其实实际操作起来,很多风险可以降低。我们可以备份好核心的元数据,只有就可以在恢复失败的时候,还原到原来修复手术的前状态。这样一来,这个修复过程也就风险极大降低了。

??3. 开始实施

?秉着更安全风险更低的情况下,我们还是先选择了方案一,给meta表做离线major compaction的方案。但最终因为MapReduce和本地模式的compaction都太慢了,开始会oom,调整后,最终因meta的hfile checksum校验失败中断了。meta表的hfile都存在问题,那么这个compaction过程就不能正常进行了。

?我们开始选择方案二,和用户沟通风险后,开始制定操作步骤, 把这个方案的实施带来的风险尽可能降到最低。规避这个方案存在的风险,前提是懂得这个方案会有什么风险。下面我们来分析一下,如图:

?可以看到,开源HBase的meta表,是可以逆向生成回来的,但是有可能不同的DataHup生产商可能会有一些额外的信息hack进meta表里,对于这部分信息,在开源的逆向生成过程中是不包含的,存在这个关系数据丢失。但是这些核心的业务数据都存在,只是hack的第三方关联信息不存在了。有人可能会问,会有哪些数据可能hack到这里呢?曾看到过某厂商会在meta表了多加一些额外的字段用来保存virtual hostname信息,还有一些将二级索引相关的信息会保存在tableinfo 文件那里。HBase的开发商越多,什么姿势都可能存在,这个就是可能的风险点。

?接下来我们开始实施,这个问题比较典型,用户的meta表里,有1T多的hfile 数据,检查hfile 发现几乎99%的hfile是delete famly相关的内容,我们就移除这些delete famly的hfile到备份目录,只留下一个正常数据的hfile,而这个hfile也仅仅有30M左右的数据。重启HBase后,正常运行。HBase一致性检查发现很幸运,没有坏文件,也没有丢失的tableinfo、regioninfo、hfile相关的block等。如果发现有文件丢失,corrupt hfile等等问题,逆向生成元数据的修复过程就可能会带来风险,但HBase集群核心业务数据依然可以完整挽救。

4. 用户再自己验证一下是否正常

通知用户验证集群运行,业务运行情况。

原文链接

阅读更多干货好文,请关注扫描以下二维码:

原文地址:http://blog.51cto.com/13679539/2104858

时间: 2024-10-08 07:10:09

云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据的相关文章

通过tarball形式安装HBASE Cluster(CDH5.0.2)——配置分布式集群中的YARN ResourceManager 的HA

<?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses

通过jedis连接redis单机成功,使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the pool

一,问题描述: (如题目)通过jedis连接redis单机成功,使用JedisCluster连接redis集群一直报Could not get a resource from the pool 但是使用redis客户端可以连接集群(我使用的redis desktop manager) 在java中通过jedis连接redis单机也成功,但使用JedisCluster连接redis集群一直报Could not get a resource from the pool, 我以命令行方式操作是没问题的

Kafka自建集群通过MirrorMaker同步数据到阿里云kafka标准版实操

说明:1.本次仅实现了两个topic的数据同步,后续优化会持续更新.....2.自建集群CDH5.8,kafka2.1.0;阿里云集群标准版kafka0.10.x踩坑:1.cdh添加kafka角色实例CMM,应该是不支持SSL连接2.VPC网络接入,不知道购买的阿里云实例有VPC网络,这个是没有SSL加密的连接3.kafka0.10.2的mirrormaker不能连接自建集群4.阿里云控制提示是SSl接入点,实际验证方式需要SASL_SSL5.不懂java,不知道这个是加在什么位置export

用阿里云三个ECS服务器搭建一个小模拟Hadoop集群(三个不同账号的阿里云,相同区域或不同区域)步骤整理

检查hosts和网卡配置 把三台小服务器先做内网互通 内网互通参照阿里云安全通道配置 1.准备至少三个虚拟机 2.相互通信,生成密钥并发送 生成密钥(ssh-keygen -t rsa) 发送密钥ssh-copy-id [email protected] (需要先修改.etc\hosts 文件) 登录测试 ssh [email protected] 3.安装JDK和Hadoop jdk安装 上传jdk到vm1并解压(tar -zvxf jdk-7u67-linux-x64.tar.gz) 配置环

云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月22日,我们进行移除与重启节点的操作时引发了故障,详见 云计算之路-阿里云上-容器服务:移除节点引发博问站点短暂故障 . 3月24日,我们参考阿里云容器服务帮助文档-指定多节点调度通过给节点添加用户标签的方式成功移除了部分节点.我们是这么操作的,当时所有节点没有添加用户标签,给待移除节点之外的所有节

阿里云ECOS 集群方案

转载 https://it.toggle.cn/article_detail/7e6f674b2564d6c319f807b4fda87eac.html 架构说明 前端由阿里云SLB统一分发Web请求 独立的网店管理后台管理入口域名绑定单台低权重ECS服务器(其他ECS管理做入口屏蔽),同时此ECS承担 ECStore crontab定时任务.应用文件同步源 独立一台ECS服务器做Mongo(KV NOSQL).MEMCACHE服务,如果在后期出现压力可以协同其他ECS服务器组Mongo副本集.

Hbase集群搭建

JDK版本和HBASE对应关系 HBase Version JDK 6 JDK 7 JDK 8 2 Not Supported Not Supported yes 1.3 Not Supported yes yes 1.2 Not Supported yes yes 1.1 Not Supported yes Running with JDK 8 will work but is not well tested. 1 Not Supported yes Running with JDK 8 wi

HBase集群变更zookeeper问题

在用华为的hindex-0.94.8时,出现HMaster启动后很短时间内自动关闭的情况,网上查询说是zookeeper的原因,在万般整修无果舍弃了其内部自带的zookeeper集群,自己安装了zookeeper-3.4.6重启后可以正常使用集群.但是出现一个问题,之前的HBase数据库中的表可以显示但是其中的数据在客户端查询的时候出现org.apache.hadoop.hbase.NotServingRegionException:的错误,网上查询资料得知HBase访问流程如下: 客户端cli

HBase集群搭建及hbaseshell使用

标签(空格分隔): hbase 大数据 (Hadoop)数据库 HBase功能 .表的设计 .环境配置与 Shell基本使用练习,最好与 RDBMS数据中的库和表进行对比 ,以下几点要注意 : 1) 企业中海量数据存储和实时查询的需求 2) HBase功能 ,与 RDBMS相比,优势在哪 3) HBase服务组件的说明.配置部署启动 4) HBase Shell中基本命令的使用 5) HBase 数据存储模型理解,结合实际操作 hadoop,spark,kafka交流群:459898801 1,