中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase如何實現多租戶

發布時間:2021-12-09 10:39:43 來源:億速云 閱讀:195 作者:小新 欄目:大數據

這篇文章主要介紹了HBase如何實現多租戶,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。


多租戶(multi-tenancy technology),參考維基百科定義,它是在探討與實現如何于多用戶的環境下共享相同的系統或程序,并且仍可確保各用戶間數據的隔離性。隨著云計算時代的到來,多租戶對于云上服務顯得更加重要。所以HBase也有許多多租戶相關的功能,其為多個用戶共享同一個HBase集群,提供了資源隔離的能力。本文將從Namespace&ACL,Quota,RSGroup三個方面來進行介紹。

Namespace&ACL

在HBase中,創建namespace是一個很輕量的操作,將不同業務的表隔離在不同的namespace是一個最簡單的資源隔離的方法。同時,ACL、quota、 rsgroup等常用的資源隔離方式都支持設置在namespace上。

ACL,全稱Access Control Lists,用于限制不同的用戶對不同的資源的操作或訪問權限。

使用ACL需要添加如下配置:

HBase如何實現多租戶

1、ACL的幾個概念

HBase如何實現多租戶

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中的操作如圖:

HBase如何實現多租戶

設置namespace的權限需要加@前綴:

HBase如何實現多租戶

設置Cell的權限:

HBase如何實現多租戶

3、權限的存儲

存儲在hbase:acl表中,rowkey是根據scope計算出來的。acl表結構如下表:

HBase如何實現多租戶

Cell權限使用tags of HFile v3存儲。

4、鑒定權限

鑒定權限是指判斷某個用戶是否擁有某個操作的權限。這個過程是在AccessController中完成的,AccessController是一個實現了MasterObserver、RegionServerObserver、RegionObserver等的coprocessor,在master、regionserver、region等操作的hook中檢查權限。由于每臺RS上都維護了完整的PermissionCache,檢查PermissionCache中是否包含了所需的權限,如果權限不足,則拋出AccessDeniedException。

HBase如何實現多租戶


5、添加/刪除權限

添加/刪除授予的過程如下圖所示:

HBase如何實現多租戶

(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中的同步。

6、基于Procedure的添加/刪除權限

為了使用Procedure實現權限的同步,需要首先將grant/revoke請求發送到master處理, 參考HBASE-21739。然后在添加/刪除權限階段,主要有兩個關鍵的步驟,一是記錄權限到acl table中,二是將更新后的權限同步到全部的RegionServer上。設計了UpdatePermissionProcedure來實現這個操作,參考HBASE-22271(目前還沒有合并到社區版的master分支)。在UpdatePermissionStorage階段,更新acl表及zk,master上的PermissionCache,在UpdatePermissionCacheOnRS階段,發起UpdatePermissionRemoteProcedure,更新RS的PermissionCache。

HBase如何實現多租戶

UpdatePermissionProcedure需要解決五種權限同步的case:

Grant:添加權限

Revoke:刪除權限

Delete Namespace:刪除namespace的全部權限

Delete Table:刪除table的全部權限

Reload:重新獲取全部的Permission。

在新的方案中,zk不用于通知RS更新PermissionCache,只用于acl的存儲。因為當RS或Master啟動時,acl table不一定online,此時,需要從zk上load permission。當acl表中的權限與zk上的權限不一致時,應該以acl表中的權限為準。因此,當master啟動且acl table online后,發起類型為Reload的UpdatePermissionProcedure,更新zk上的permission,并更新RS上的PermissionCache。

Quota&Throttle

由于集群的資源及服務能力是有上限的,Quota用于限制各個資源的數據量的大小及訪問速度。

需要如下配置開啟HBase的quota功能:

HBase如何實現多租戶

HBase中關于Quota的幾個概念及其相互關系如下圖所示:

HBase如何實現多租戶

1、Throttle Quota

Throttle限制單位時間內,訪問資源的次數或數據量。

  • 支持的時間單位包括sec, min, hour, day。

  • 使用req限制請求的次數;

  • 使用B, K, M, G, T, P限制請求的數據量的大小;

  • 使用CU限制請求的讀/寫容量單位,一個讀/寫容量單位是指一次讀出/寫入數據量小于1KB的請求,如果一個請求讀出了2.5K的數據,則需要消耗3個容量單位。可以通過hbase.quota.read.capacity.unit或hbase.quota.write.capacity.unit配置一個容量單位的數據量。

  • Machine scope代表throttle額度配置在單臺RS上。Cluster代表throttle配額被集群的全部RS共享。如果不指定QuotaScope的話,默認為Machine。

設置Throttle的shell命令如下:

HBase如何實現多租戶

設置RegionServer的throttle(目前只支持使用all關鍵字代表全部的RegionServer,不支持對指定的RegionServer設置Quota),一般來說,RS的quota代表該RS的服務上限,推薦以秒為時間單位設置:

HBase如何實現多租戶

設置Cluster scope的quota:

HBase如何實現多租戶

Cluster scope的quota是如何分配到各個RS上的:

  • 對于table的quota,TableMachineLimit = ClusterLimit / TotalTableRegionNum * MachineTableRegionNum;

  • 對于namespace的quota,NamespaceMachineLimit = ClusterLimit / RsNum,需要注意的是,這里沒有考慮RSGroup,如果把namespace隔離到某個RSGroup,分配到RS上的throttle limit是偏小的,后續需要改進這個計算方式。

GlobalBypass在全局范圍內,跳過throttle,配置在用戶上。

HBase如何實現多租戶

2、Space Quota

Space用于限制資源的數據量大小,配置在namespace或者table上。當數據量達到限額時,執行配置的違反策略,包括:

Disable:disable table/ the tables of namespace

NoInserts:禁止除Delete以外的Mutation操作,允許Compaction

NoWrites:禁止Mutation操作,允許Compaction

NoWritesCompactions:禁止Mutation操作,禁止Compaction

HBase如何實現多租戶

看當前Space quota的快照(這里的快照并不是HBase中的快照),而是指當前表的空間大小,配置的limit,觸發的策略的狀態:

HBase如何實現多租戶

限制namespace的table或region數量:


hbase.namespace.quota.maxtables/hbase.namespace.quota.maxregions


如果超出限制的話,會拋出QuotaExceededException。

HBase如何實現多租戶

Space quota的實現原理是:

(1)RS周期的把Region size信息發送給master:RegionSizeReportingChoreMaster

(2)統計表的size及觸發的策略并存到quota表:QuotaObserverChoreRS

(3)周期的讀quota表,執行policy:SpaceQuotaRefresherChore

3、Soft limit

配置throttle limit為soft limit,也就是在集群資源富余的情況下,允許超發,使用如下命令打開或關閉超發:

HBase如何實現多租戶

注意,超發是指允許用戶在RS的quota有富余的情況下,允許請求超出配置的user/namespace/table的quota,因此,必須首先設置RS的quota,才能打開超發功能。RS的quota推薦設置的時間單位為秒,因為使用其他時間單位的話,一旦RS的quota被其它用戶的請求先消耗的話,恢復quota需要較長的時間,可能會影響后續的請求,即使這些后來的請求并沒有超出其配置的user/namespace/table quota。

4、Quota存儲

quota相關的信息存儲在hbase:quota表中。

row key主要有以下幾種:

n.namespace:namespace的quota

t.table:table的quota

u.user:user的quota

r.all:RegionServer的quota

exceedThrottleQuota:是否允許超發

Throttle相關的quota存儲在q CF中,Space相關的quota存儲在u CF中。

Throttle是否打開存儲在/hbase/rpc-throttle的zk節點上,值為true或者false。因為打開或關閉Throttle是實時生效的,而其它quota配置是通過RS定期的讀quota表,是延遲生效的。

5、Throttle

設置throttle分為2步:

(1)client向master發送set quota請求,master把quota存入hbase:quota表中;

(2)RS每五分鐘,從quota表中加載最新的quota值并更新QuotaCache。因此,對于新設置的quota,最多五分鐘后生效(可以通過hbase.quota.refresh.period配置時間間隔)。

當讀寫請求到達RS上時,限流過程如下圖所示:

HBase如何實現多租戶


其中,在讀數據前,會首先預估本次請求將要消耗的quota數目,目前社區的代碼是按照一個get或mutate預計消耗100字節,一個scan預計消耗1000字節,這里應該是可以優化的,可以根據上次請求后讀出的數據量來動態的調整預估的字節數。

Throttle limit是設置在某個時間單位上的,會隨著時間的推移逐漸恢復,主要有兩種恢復方式:

(1)Average Interval Refill(默認):根據當前和上一次的恢復時間,恢復出這段時間內的quota,但最大不能超出quota配置的limit。

比如,配置了100資源/秒,100ms后,恢復出10個資源。2s后,恢復出100資源,而不是200資源。

(2)Fixed Interval Refill:經過固定的時間間隔,恢復出全部quota。

比如,配置了100資源/秒,如果上次quota恢復的時間是10:10:10,100,則下次恢復時間為10:10:11,100,并記錄本次恢復時間,如果在10:10:11,099訪問,此時可用資源依然為0。

打開或關閉限流:

HBase如何實現多租戶

關閉限流時,配置的throttle將不會進行限流,即使集群開啟了quota功能。

RSGroup

RSGroup,是把RS分配到不同的組中,之后,將namespace或者table分配到某個RSGroup中,從而實現隔離的目的,可以形象的理解為每個RSGroup組成了一個小集群。HBase如何實現多租戶

使用RSGroup,需要添加如下配置:

HBase如何實現多租戶

當開啟RSGroup后,所有的RS默認在default這個group中。

創建新的group后,必須首先移入RS到這個group中,之后才能把namespace或者table移動到這個group中。

添加新的RSGroup:

HBase如何實現多租戶

先將RS移動到這個group中,再將namespace移動到這個group中:

HBase如何實現多租戶

RSGroup的功能主要在RSGroupAdminEndpoint中實現,它是一個實現了MasterObserver的Endponit,在master操作的hook中,將table的region移動到對應的RSGroup中。

RSGroup的信息存儲在hbase:rsgroup表中。同時,RSGroup的信息也在zk中存儲,當集群啟動時,rsgroup表還沒有online時,從zk中讀出RSGroup的信息。


感謝你能夠認真閱讀完這篇文章,希望小編分享的“HBase如何實現多租戶”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

太仆寺旗| 瑞安市| 甘德县| 莲花县| 台江县| 庆城县| 双柏县| 英山县| 新野县| 客服| 祥云县| 思南县| 信阳市| 安平县| 兴仁县| 绍兴市| 成都市| 彰化市| 政和县| 河池市| 特克斯县| 依兰县| 郴州市| 承德市| 海宁市| 渑池县| 鄂州市| 昭通市| 望谟县| 中江县| 鹤山市| 漳州市| 龙川县| 东辽县| 正定县| 台南市| 井研县| 萍乡市| 泽普县| 渑池县| 巨鹿县|