HBase集群多租户实践:「从零单排HBase 10」
hbase> set_quota TYPE => THROTTLE, TABLE => 't1', LIMIT => '1000req/sec'
hbase> set_quota TYPE => THROTTLE, THROTTLE_TYPE => WRITE, USER => 'u1', LIMIT => '10M/sec'
注意事项:
1)set_quota 的限制都是针对单个region server来说的,并不是针对整个集群,是一种分布式的限制
2)set_quota 默认执行后并不会立刻生效,需要等待一段时间才会生效,等待时间默认为5min。可以通过参数 进行设置,比如可以通过设置
= 60000将生效时间缩短为1min
3)可以通过命令list_quotas查看当前所有执行的set_quota命令
4)本质上是一种限流手段,无法充分隔离资源
对此,得益于HBase的共享存储、计算分离的架构,Hbase提供了多租户隔离技术region group。
相关jira见:
https://issues.apache.org/jira/browse/HBASE-6721
RegionServer Group 技术是通过对 RegionServer 进行分组,不同的 RegionServer 分到不同的组。每个组可以按需挂载不同的表,并且当组内的表发生异常后,Region 不会迁移到其他的组。这样,每个组就相当于一个逻辑上的子集群,通过这种方式达到存储资源共享、计算资源隔离的效果,提高资源利用率,降低管理成本,不必为每个高 SLA 的业务线单独搭集群。
2.多租户核心架构图
下面,我们进一步深入多租户的核心架构图,通过架构图能清晰的看到,资源的隔离和共享情况,某一个租户的RS上哪些操作会对其他租户的资源产生影响,具体影响在哪里,影响大小如何量化。
从上图可以看的,group对region server做了隔离,因此,在计算资源上是物理隔离的。
因此,多租户场景下,相互直接的影响是在共享存储层面的。
在共享存储上,发生相互影响的根本原因在于HDFS的数据三副本写入,如下图所示
从以上可以看出多租户间可能产生的影响主要来自于其他租户引发的一些写流量,主要包括:
- HBase写入产生的WAL同步
- MemStore 刷盘导致的数据同步(flush)
- StoreFile合并导致的数据同步(MinorCompaction & MajorCompaction)
- 尤其是大数据量的写入,会对其他group的load造成显著影响
- 单个group内region server也不要太少,至少2个,region server越少,单个region server故障的影响面越大。
- 如果做了group,那么default的group最好空出来,只用来放meta表。
- 最佳模式是按照namespace纬度进行group的划分。
- 集群中,可以划分一个buffer group,不承担任何流量,如果出现线上的热点,可以临时把这个热点表移动到buffer group上.