HBase隔离方案实战-rsgroup

本文参考: https://www.jianshu.com/p/04d56a2c8b5c  , 这篇文章写的很好, 就是命令没法用, 一度以为我们的集群不支持rsgroup, 无意中试出了帮助命令, 才发现, 命令不太对, 不知道是作者粗心还是每个版本的命令不一样, 这里做了一些修正, 我们的集群是CDH5.12.1, hbase是1.2.0

 

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方案的原理如下下图所示:

 

在上图中有两个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-site.xml, 并重启master即可

  <property>

    <name>hbase.coprocessor.master.classes</name>

    <value>org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint</value>

  </property>

  <property>

    <name>hbase.master.loadbalancer.class</name>

    <value>org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer</value>

  </property>

cdh集群配置方法: https://blog.csdn.net/yuanhaiwn/article/details/82768785

如何使用rsgroup

最重要的帮助命令:

help 'rsgroup'

帮助命令解释的很详细,大概有9个命令, 这里大致说一下:

1、添加rsgroup分组

add_rsgroup 'my_group'

例如:
add_rsgroup 'g01_group'

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

move_servers_rsgroup '组名',['RS地址:端口号','server2:port']

例如:

move_servers_rsgroup 'g01_group',['a2502f09:60020'] 
move_servers_rsgroup 'g01_group',['a2502f12:60020'] 

(a2502f09 和 a2502f12 是机器别名)


经测试, RS移动到新组的时候, 该RS上原有的region会自动分配到原组的其他RS上, 移动之后的RS是空的


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

move_tables_rsgroup '组名',['table1','table2']

例如:
move_tables_rsgroup 'g01_group', ['hbase:meta']

经测试, 表移动到新组, 所有和表相关的region会自动移动到新组所属的regionServer上

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

4. 查看组信息

get_rsgroup 'default'
get_rsgroup 'g01_group'

5. 平衡RegionServer组

balance_rsgroup 'g01_group'


6. 获取给定RegionServer的组名

get_server_rsgroup 'server1:port1'

例如:

get_server_rsgroup 'a2502f09:60020'

7. 获取给定表的组名

get_table_rsgroup 'hbase:meta'

8. 查看所有组

list_rsgroups

也可用正则表达式筛选
list_rsgroups 'de*'

9. 删除组

remove_rsgroup 'g01_group'

 

rsgroup注意事项

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

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

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

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


 

 

 

 

 

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值