本文从三个方面介绍了HBase的多租户实现。
上篇文章回顾:HDFS短路读详解
”多租户(multi-tenancy technology),参考维基百科定义,它是在探讨与实现如何于多用户的环境下共享相同的系统或程序,并且仍可确保各用户间数据的隔离性。随着云计算时代的到来,多租户对于云上服务显得更加重要。所以HBase也有许多多租户相关的功能,其为多个用户共享同一个HBase集群,提供了资源隔离的能力。本文将从Namespace&ACL,Quota,RSGroup三个方面来进行介绍。
Namespace&ACL在HBase中,创建namespace是一个很轻量的操作,将不同业务的表隔离在不同的namespace是一个最简单的资源隔离的方法。同时,ACL、quota、 rsgroup等常用的资源隔离方式都支持设置在namespace上。
ACL,全称Access Control Lists,用于限制不同的用户对不同的资源的操作或访问权限。
使用ACL需要添加如下配置:
1、ACL的几个概念User分为普通user和super user。super user包括启动HBase服务的用户和hbase.superuser配置的用户,可以对集群进行管理操作。普通用户需要授权后,才能访问或操作HBase。Scope可以理解为资源的粒度。
HBase的各种操作需要的Action可以在HBase的官方文档中查看:http://hbase.apache.org/book.html#appendix_acl_matrix
结合用户的访问或操作需求,将user在合理的scope上设置合理的action,是实现用户权限控制的最佳方式。
2、设置或取消权限在HBase shell中或调用HBase API,设置或取消权限。shell中的操作如图:
设置namespace的权限需要加@前缀:
设置Cell的权限:
3、权限的存储存储在hbase:acl表中,rowkey是根据scope计算出来的。acl表结构如下表:
Cell权限使用tags of HFile v3存储。
4、鉴定权限鉴定权限是指判断某个用户是否拥有某个操作的权限。这个过程是在AccessController中完成的,AccessController是一个实现了MasterObserver、RegionServerObserver、RegionObserver等的coprocessor,在master、regionserver、region等操作的hook中检查权限。由于每台RS上都维护了完整的PermissionCache,检查PermissionCache中是否包含了所需的权限,如果权限不足,则抛出AccessDeniedException。