这篇文章主要介绍了HBase如何实现多租户,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
多租户(multi-tenancy technology),参考维基百科定义,它是在探讨与实现如何于多用户的环境下共享相同的系统或程序,并且仍可确保各用户间数据的隔离性。随着云计算时代的到来,多租户对于云上服务显得更加重要。所以HBase也有许多多租户相关的功能,其为多个用户共享同一个HBase集群,提供了资源隔离的能力。本文将从Namespace&ACL,Quota,RSGroup三个方面来进行介绍。
在HBase中,创建namespace是一个很轻量的操作,将不同业务的表隔离在不同的namespace是一个最简单的资源隔离的方法。同时,ACL、quota、 rsgroup等常用的资源隔离方式都支持设置在namespace上。
ACL,全称Access Control Lists,用于限制不同的用户对不同的资源的操作或访问权限。
使用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,是实现用户权限控制的最佳方式。
在HBase shell中或调用HBase API,设置或取消权限。shell中的操作如图:
设置namespace的权限需要加@前缀:
设置Cell的权限:
存储在hbase:acl表中,rowkey是根据scope计算出来的。acl表结构如下表:
Cell权限使用tags of HFile v3存储。
鉴定权限是指判断某个用户是否拥有某个操作的权限。这个过程是在AccessController中完成的,AccessController是一个实现了MasterObserver、RegionServerObserver、RegionObserver等的coprocessor,在master、regionserver、region等操作的hook中检查权限。由于每台RS上都维护了完整的PermissionCache,检查PermissionCache中是否包含了所需的权限,如果权限不足,则抛出AccessDeniedException。
添加/删除授予的过程如下图所示:
(1)client向有acl region的region server发出grant或revoke请求;
(2)收到请求的region server,将新的权限put或者delete到acl表中;
(3)AccessController在region的postPut和postDelete的hook中,如果操作的是acl region,则将更新的权限从acl table中读出,并写入到zk上;
(4)通过zk的监听机制,通知master和regionserver更新PermissionCache,实现权限在master和其他regionserver中的同步。