为了账号安全,请及时绑定邮箱和手机立即绑定

HBase隔离方案实战

标签:
Hbase

HBase适合用于海量数据的存储,横向扩展非常方便,随着数据的增长,访问的性能却不会出现很大的下降。这是很多的公司选择使用HBase作为分布式数据库的一个很重要的原因。正常来说,一个HBase集群肯定不止跑一个业务,即多个业务共享集群资源。这些业务中有的对性能要求很高;有的业务要求存储很大;有的业务属于公司的核心业务,需要重点保障;有的业务是离线业务,短时间访问不了影响也不大。这里就会产生对于不同业务的不同SLA需求。也就是集群需要有隔离的功能。

全部业务共享集群资源的场景下,如果出现问题,将会同时影响多个业务。那么怎么来解决集群的隔离?不会因为某个业务的访问量陡增或者不合理使用,导致其他的业务受到影响?

集群隔离

最先想到的解决办法可能是搭建多个HBase集群,将不同的业务使用不同的HBase,这样就能很好地实现业务之间的隔离。但是这里会存在如下几个问题:

1、管理麻烦

2、集群很小,性能不太好

3、单台机器影响大(集群小,单台上的region多,出问题影响面广)

4、需要的zk、master、namenode等的机器更多

5、抗单个业务陡增的场景不强

因此真实的使用场景,不太可能为每个业务搭建单独的集群,最多就是给非常重要的业务搭建一个单利的集群,其他的非核心业务放在一个大集群中,隔离还是刚需。

rsgroup方案

那在HBase中是否有更好一点的隔离策略?

答案是有,之前yahoo在大规模使用HBase集群的时候也遇到了隔离的问题,他们开发了rsgroup解决方案,比较好地解决了不同应用在regionserver上的隔离。并将rsgroup推荐给了官方,官方版本集成了yahoo提交的rsgroup隔离方案。rsgroup方案的原理如下下图所示:

webp

在上图中有两个rsgroup,具体原理为:

1、将不同的RegionServer分配到不同的rsgroup中

    上图中RegionServer1、RegionServer2、RegionServer3被分配到了Important_group中,RegionServer4、RegionServer5、RegionServer6被分配到了normal_group中。

2、将不同的表分配到不同的group中

    上图中表t1和t2分配到了Important_group,表t3和t4分配到了normal_group。

3、表、regionserver分配到具体的rsgroup后就达到了隔离的效果

    做好分配后,以表t1为例,t1的所有region都只会落到Important_group所属的Regionserver中。此时当normal_group的任何Regionserver异常,都不会引起t1表的异常(datanode异常会有影响,后面有说明)。只有当Important_group所属的Regionserver异常,并且有t1的region落在该regionserver上才会有影响。表代着业务,你可以将同类型(重要等级)的表放在同一个rsgroup中,这就实现了不同业务的隔离。

    对于于重点业务,可以分配更多的regionserver的机器,负载更低;而对于非重点业务,则可以更少的机器承担负更多的业务。目前datanode已经支持了分级存储,甚至可以将重点业务使用不同的介质,比如SSD。

rsgroup隔离的优缺点

优点:

管理方便

充分利用集群的资源

机器腾挪扩容很方便

有利于整个集群性能的提升

缺点:

隔离不彻底,hdfs层还是共用,如果datanode出现异常,还是会影响到多个业务。

如何开启rsgroup功能

在hbase的配置文件hbase-site.xml中添加如下内容,并重启master即可

webp

如何使用rsgroup

1、规划好对应rsgroup,并添加对应的rsgroup

    根据业务规划好rsgroup,比如1个重点组,1个普通组,一个默认组,添加rsgroup的命令如下:

    add_rsgroup 'groupname'

    范例:

    add_rsgroup 'Important_group'

2、添加RegionServer到对应的group,命令如下:

    move_rsgroup_servers 'groupname',['regionserverip1:port']

    如果有多台regionserver就在添加多个regionserver到列表中即可,如下:

    move_rsgroup_servers 'groupname',['regionserverip1:port','regionserverip2:port',......]

    范例如下 :

    move_rsgroup_servers 'Important_group',['10.10.10.11:60020']

3、迁移表到对应的rsgroup中,命令如下

    move_rsgroup_tables 'groupname', ['tablename1']

    如果有多张表则添加多个tablename到列表中即可:

    move_rsgroup_tables 'groupname', ['tablename1','tablename2']

    范例如下:

move_rsgroup_tables 'Important_group', ['t_digit_user_crt_Fuid']

    注意:如果表的region很多,建议每次只迁移一个表,否则很容易超时。

4、迁移完表后,最好对表做一下大合并,实现表的本地化,如果表region很多或者region很大,则可以针对region发起大合并

    major_compact 'tablename'

5、迁移完表后也做一下hbase hbck校验

rsgroup相关命令介绍

列出所有的group名

list_rsgroups

获得某一个group详细信息,包括:表名和RS

get_rsgroup 'groupname'

获得某一个RS所属的group

get_server_rsgroup 'groupname'

获得某张表所属的group

get_table_rsgroup 'tablename'

新增group

add_rsgroup 'groupname'

将regionserver 移到指定的group下,一个regionserver只属于一个group

move_rsgroup_servers 'groupname',['regionserverip1:port']

将Table移到指定的group下,一张表也只能属于一个group

move_rsgroup_tables 'groupname', ['tablename1']

对指定group进行balance

balance_rsgroup 'groupname'

删除指定的group,删除前需要将该group下的RS和Table移掉

remove_rsgroup 'groupname'

rsgroup注意事项

1、迁移完表后记得做major compact(本地化)

2、迁移完表后做hbase hbck校验,防止添加迁移表的时候有部分region未上线的情况

3、删除group之前需要将group下的regionserver和table都移除掉

4、default组和其他的rsgroup不一样,default是动态的,其他的group则是静态的



作者:飞鸿无痕
链接:https://www.jianshu.com/p/04d56a2c8b5c


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消