HBase高可用集群运维实践

随着越来越多的业务选择HBase作为存储引擎,对HBase的可用性要求也越来越高,对于HBase的运维也提出了新的挑战。目前运维集群超过30+,而且接入的业务类型繁多,对于性能要求也不完全一样,这是今年面临的问题。从15年开始,结合京东的业务情况,基于大数据平台,实现用户接入使用全流程自动化。而今年,我们主要从集群层面上提升集群可用性。

1

控制隔离——rsgroup

在94版本中,经常困扰我们的一个问题就是集群上的某些机器会因为某些用户的不恰当操作,例如热点问题,大量的scan操作等导致机器上的其他表正常读写受到影响。之前的运维经验,一般的做法就是stop balance,然后通过move region的方式把有影响的表移到某些机器上。由于存在这个原因和业务的压力,往往只能采用拆分集群的方式,在一个HDFS 上往往运行几个HBase集群,但是带来的是运维成本的增加。

今年618之前,在我们决定采用新版本之后,我们将HBase 2.0 尚未发布的rsgroup功能迁移到我们的自己维护的1.1.X版本中,从而实现在HBase集群上隔离和控制。整个架构如下:

最后我们把分组功能接入了BDP运维平台。DBA在配置实例的时候,根据业务选择不同的分组。通过rsgroup 解决拆分集群问题,可运维性也得到了提升。另外,不同于之前的平滑滚动重起,动不动就需要几天,我们也通过移动分组的方式进行集群滚动从而缩短维护时间。考虑到不同分组的replication可能会产生影响,我们也开发不同分组的replication功能,主集群的日志只能发送到备份集群的同一个分组的regionserver中。在集群页面上,我们也添加不同分组统计,效果如下:

2

异地容灾——replication

HDFS提供了三个备份的功能,但是对于重要的业务还远远不够。HBase本身的replication功能可以实现集群间秒级的数据同步,而且整个replication的过程是异步化,对于主集群几乎没有影响。考虑业务的重要性,在新版本的集群配置了集群间的主主同步。如果机房出现问题或者主集群异常短时间无法恢复,那么用户可以切换到备份集群。

由于采用实例来管理集群,所以DBA配置的时候可以选择实例是否进行主备以及集群:增加备份集群之后,我们把所有需要抽取的表从主集群改成为备份集群,这样对于大量的抽取可以减少对主集群的影响。

目前集群的数据,除了用户普通的写入之外,还有采用bulkload的方式入库,不同用户在不同的集市生成HFile导入到HBase中。针对这种情况,我们把2.0 版本的HBASE-13153(Bulk Loaded HFile Replication)打进到我们的版本中,实现了HFile的replication。

最终通过replication实现数据的备份和聚合,这样在用户申请实例的时候,可以选择不同的套餐组合。例如只需要实时数据存储,可以选择主主备份,需要离线分析的可以选择主备同步到离线分析集群。

3

资源限制——配置quotas

虽然rsgroup 起到了隔离功能,HBase本身读写队列分离,但是同个分组的表还会互相影响,而且京东这么多业务部门,不可能都独立分组。HBase1.0 发布了一个针对读写进行限制的功能——配额管理。使用配额管理做到对namespace和table 的rpc请求的限制,目前是限制读写次数和流量。这个功能很适合我们,作为底层提供者,很大程度上我们没有办法预估用户的所有情况,在运维过程中,经常有用户出现热点问题导致单台服务的请求量过高从而影响到了其他表的读写。我们针对实例,也就是表空间的请求进行限制,这就需要用户在申请的时候衡量资源了。

通过配额,我们可以做到对集群的资源整体把控。唯一的遗憾是当前HBase的quotas 只能限制单台的ReginServe。目前配额管理功能在开发集成自动化配置流程当中,预计年后上线。

总结

目前我们准备这三把利剑保障了集群的稳定性,但是随着业务规模的增大,我们也越来越重视客户端,目前也在对客户端进行改造。希望通过SDK 实现集群主备切换,接入UMP采集更多性能指标,做到提前发现问题,从而保障集群稳定。

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2018-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恒思考

个人项目前期准备

作为一个项目一般都需要写代码,写代码就需要管理代码。作为个人项目可以直接选免费的第三方代码托管平台。如果机密性比较强,可以自己搭gogs或者gitlab,如果没...

15650
来自专栏Java编程技术

分布式事务- TCC编程式模式

严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务...

18530
来自专栏搜云库

保证分布式系统数据一致性的6种方案

在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要...

2.3K80
来自专栏猿人谷

三种Linux服务器监控技术的对比

本文介绍三种Linux服务器监控技术的优缺点,其中有SNMP代理(客户端)方式、SSH方式、安装私有代理(客户端)方式等内容。 Linux系统的强大的功能和绚丽...

25870
来自专栏CSDN技术头条

携程开源Redis多数据中心解决方案XPipe

Redis在携程内部得到了广泛的使用,根据客户端数据统计,整个携程全部Redis的读写请求在每秒200W,其中写请求约每秒10W,很多业务甚至会将Redis当成...

47790
来自专栏Netkiller

消息队列在使用中的注意事项

消息队列在使用中的注意事项 异步不是万能的,实现异步重要的手段,消息队列在使用中也是有很多注意事项的。 消息队列的瓶颈 消息队列至少有三处容易出现瓶颈,我们一经...

33820

API-First,Kubernetes上微服务的一种方法

对那些曾经使用更传统方式构建应用的开发者来说,转向容器化微服务不是一个容易的转变。当开发者设计分布式应用时,微服务应用也正是分布式的,其中有许多新的概念和细节需...

45640
来自专栏

基于JMS的数据交换既数据互操作平台的解决方案

为解决应用系统间数据和信息的互通、互用,建立一个通用的、分布式的数据集成平台,用以解决异构数据平台数据交流和沟通的问题。

63040
来自专栏架构师之路

小小的IP,大大的耦合,你痛过吗?

什么是耦合? 耦合,是架构中,本来不相干的代码、模块、服务、系统因为某些原因联系在一起,各自独立性差,影响则相互影响,变动则相互变动的一种架构状态。 感官上,...

47660
来自专栏Netkiller

消息队列在使用中的注意事项

消息队列在使用中的注意事项 异步不是万能的,实现异步重要的手段,消息队列在使用中也是有很多注意事项的。 消息队列的瓶颈 消息队列至少有三处容易出现瓶颈,我们一经...

35950

扫码关注云+社区

领取腾讯云代金券