±à¼ÍƼö: |
±¾ÎĽ«´ÓNamespace&ACL£¬Quota£¬RSGroupÈý¸ö·½ÃæÀ´½øÐнéÉÜ¡£ ±¾ÎÄÀ´×ÔITPUB²©¿Í£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
HDFS¶Ì·¶ÁÏê½â
¶à×â»§(multi-tenancy technology)£¬²Î¿¼Î¬»ù°Ù¿Æ¶¨Ò壬ËüÊÇÔÚ̽ÌÖÓëʵÏÖÈçºÎÓÚ¶àÓû§µÄ»·¾³Ï¹²ÏíÏàͬµÄϵͳ»ò³ÌÐò£¬²¢ÇÒÈÔ¿ÉÈ·±£¸÷Óû§¼äÊý¾ÝµÄ¸ôÀëÐÔ¡£Ëæ×ÅÔÆ¼ÆËãʱ´úµÄµ½À´£¬¶à×â»§¶ÔÓÚÔÆÉÏ·þÎñÏԵøü¼ÓÖØÒª¡£ËùÒÔHBaseÒ²ÓÐÐí¶à¶à×â»§Ïà¹ØµÄ¹¦ÄÜ£¬ÆäΪ¶à¸öÓû§¹²Ïíͬһ¸öHBase¼¯Èº£¬ÌṩÁË×ÊÔ´¸ôÀëµÄÄÜÁ¦¡£
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ÖеIJÙ×÷Èçͼ£º

ÉèÖÃnamespaceµÄȨÏÞÐèÒª¼Ó@ǰ׺£º

ÉèÖÃCellµÄȨÏÞ£º

3¡¢È¨Ï޵Ĵ洢
´æ´¢ÔÚhbase:acl±íÖУ¬rowkeyÊǸù¾Ýscope¼ÆËã³öÀ´µÄ¡£acl±í½á¹¹ÈçÏÂ±í£º

CellȨÏÞʹÓÃtags of HFile v3´æ´¢¡£
4¡¢¼ø¶¨È¨ÏÞ
¼ø¶¨È¨ÏÞÊÇÖ¸ÅжÏij¸öÓû§ÊÇ·ñÓµÓÐij¸ö²Ù×÷µÄȨÏÞ¡£Õâ¸ö¹ý³ÌÊÇÔÚAccessControllerÖÐÍê³ÉµÄ£¬AccessControllerÊÇÒ»¸öʵÏÖÁËMasterObserver¡¢RegionServerObserver¡¢RegionObserverµÈµÄcoprocessor£¬ÔÚmaster¡¢regionserver¡¢regionµÈ²Ù×÷µÄhookÖмì²éȨÏÞ¡£ÓÉÓÚÿ̨RSÉ϶¼Î¬»¤ÁËÍêÕûµÄPermissionCache£¬¼ì²éPermissionCacheÖÐÊÇ·ñ°üº¬ÁËËùÐèµÄȨÏÞ£¬Èç¹ûȨÏÞ²»×㣬ÔòÅ׳öAccessDeniedException¡£

5¡¢Ìí¼Ó/ɾ³ýȨÏÞ
Ìí¼Ó/ɾ³ýÊÚÓèµÄ¹ý³ÌÈçÏÂͼËùʾ£º

£¨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¡£

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ÖйØÓÚQuotaµÄ¼¸¸ö¸ÅÄî¼°ÆäÏ໥¹ØÏµÈçÏÂͼËùʾ£º

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ÃüÁîÈçÏ£º

ÉèÖÃRegionServerµÄthrottle(Ŀǰֻ֧³ÖʹÓÃall¹Ø¼ü×Ö´ú±íÈ«²¿µÄRegionServer£¬²»Ö§³Ö¶ÔÖ¸¶¨µÄRegionServerÉèÖÃQuota)£¬Ò»°ãÀ´Ëµ£¬RSµÄquota´ú±í¸ÃRSµÄ·þÎñÉÏÏÞ£¬ÍƼöÒÔÃëΪʱ¼äµ¥Î»ÉèÖãº

ÉèÖÃCluster scopeµÄquota£º

Cluster scopeµÄquotaÊÇÈçºÎ·ÖÅäµ½¸÷¸öRSÉϵģº
¶ÔÓÚtableµÄquota£¬TableMachineLimit = ClusterLimit /
TotalTableRegionNum * MachineTableRegionNum£»
¶ÔÓÚnamespaceµÄquota£¬NamespaceMachineLimit = ClusterLimit
/ RsNum£¬ÐèҪעÒâµÄÊÇ£¬ÕâÀïûÓп¼ÂÇRSGroup£¬Èç¹û°Ñnamespace¸ôÀ뵽ij¸öRSGroup£¬·ÖÅäµ½RSÉϵÄthrottle
limitÊÇÆ«Ð¡µÄ£¬ºóÐøÐèÒª¸Ä½øÕâ¸ö¼ÆË㷽ʽ¡£
GlobalBypassÔÚÈ«¾Ö·¶Î§ÄÚ£¬Ìø¹ýthrottle£¬ÅäÖÃÔÚÓû§ÉÏ¡£

2¡¢Space Quota
SpaceÓÃÓÚÏÞÖÆ×ÊÔ´µÄÊý¾ÝÁ¿´óС£¬ÅäÖÃÔÚnamespace»òÕßtableÉÏ¡£µ±Êý¾ÝÁ¿´ïµ½ÏÞ¶îʱ£¬Ö´ÐÐÅäÖõÄÎ¥·´²ßÂÔ£¬°üÀ¨£º
Disable£ºdisable table/ the tables of namespace
NoInserts£º½ûÖ¹³ýDeleteÒÔÍâµÄMutation²Ù×÷£¬ÔÊÐíCompaction
NoWrites£º½ûÖ¹Mutation²Ù×÷£¬ÔÊÐíCompaction
NoWritesCompactions£º½ûÖ¹Mutation²Ù×÷£¬½ûÖ¹Compaction
¿´µ±Ç°Space quotaµÄ¿ìÕÕ(ÕâÀïµÄ¿ìÕÕ²¢²»ÊÇHBaseÖеĿìÕÕ)£¬¶øÊÇÖ¸µ±Ç°±íµÄ¿Õ¼ä´óС£¬ÅäÖõÄlimit£¬´¥·¢µÄ²ßÂÔµÄ״̬£º

ÏÞÖÆnamespaceµÄtable»òregionÊýÁ¿£º
hbase.namespace.quota.maxtables/hbase.namespace.quota.maxregions
Èç¹û³¬³öÏÞÖÆµÄ»°£¬»áÅ׳öQuotaExceededException¡£

Space quotaµÄʵÏÖÔÀíÊÇ£º
£¨1£©RSÖÜÆÚµÄ°ÑRegion sizeÐÅÏ¢·¢Ë͸ømaster£ºRegionSizeReportingChoreMaster
£¨2£©Í³¼Æ±íµÄsize¼°´¥·¢µÄ²ßÂÔ²¢´æµ½quota±í£ºQuotaObserverChoreRS
£¨3£©ÖÜÆÚµÄ¶Áquota±í£¬Ö´ÐÐpolicy£ºSpaceQuotaRefresherChore
3¡¢Soft limit
ÅäÖÃthrottle limitΪsoft limit£¬Ò²¾ÍÊÇÔÚ¼¯Èº×ÊÔ´¸»ÓàµÄÇé¿öÏ£¬ÔÊÐí³¬·¢£¬Ê¹ÓÃÈçÏÂÃüÁî´ò¿ª»ò¹Ø±Õ³¬·¢£º

×¢Ò⣬³¬·¢ÊÇÖ¸ÔÊÐíÓû§ÔÚ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ÉÏʱ£¬ÏÞÁ÷¹ý³ÌÈçÏÂͼËùʾ£º

ÆäÖУ¬ÔÚ¶ÁÊý¾Ýǰ£¬»áÊ×ÏÈÔ¤¹À±¾´ÎÇëÇó½«ÒªÏûºÄµÄquotaÊýÄ¿£¬Ä¿Ç°ÉçÇøµÄ´úÂëÊǰ´ÕÕÒ»¸öget»òmutateÔ¤¼ÆÏûºÄ100×Ö½Ú£¬Ò»¸öscanÔ¤¼ÆÏûºÄ1000×Ö½Ú£¬ÕâÀïÓ¦¸ÃÊÇ¿ÉÒÔÓÅ»¯µÄ£¬¿ÉÒÔ¸ù¾ÝÉÏ´ÎÇëÇóºó¶Á³öµÄÊý¾ÝÁ¿À´¶¯Ì¬µÄµ÷ÕûÔ¤¹ÀµÄ×Ö½ÚÊý¡£
Throttle limitÊÇÉèÖÃÔÚij¸öʱ¼äµ¥Î»Éϵ쬻áËæ×Åʱ¼äµÄÍÆÒÆÖð½¥»Ö¸´£¬Ö÷ÒªÓÐÁ½ÖÖ»Ö¸´·½Ê½£º
£¨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¡£
´ò¿ª»ò¹Ø±ÕÏÞÁ÷£º

¹Ø±ÕÏÞÁ÷ʱ£¬ÅäÖõÄthrottle½«²»»á½øÐÐÏÞÁ÷£¬¼´Ê¹¼¯Èº¿ªÆôÁËquota¹¦ÄÜ¡£
RSGroup
RSGroup£¬ÊǰÑRS·ÖÅäµ½²»Í¬µÄ×éÖУ¬Ö®ºó£¬½«namespace»òÕßtable·ÖÅ䵽ij¸öRSGroupÖУ¬´Ó¶øÊµÏÖ¸ôÀëµÄÄ¿µÄ£¬¿ÉÒÔÐÎÏóµÄÀí½âΪÿ¸öRSGroup×é³ÉÁËÒ»¸öС¼¯Èº¡£

ʹÓÃRSGroup£¬ÐèÒªÌí¼ÓÈçÏÂÅäÖãº

µ±¿ªÆôRSGroupºó£¬ËùÓеÄRSĬÈÏÔÚdefaultÕâ¸ögroupÖС£
´´½¨ÐµÄgroupºó£¬±ØÐëÊ×ÏÈÒÆÈëRSµ½Õâ¸ögroupÖУ¬Ö®ºó²ÅÄܰÑnamespace»òÕßtableÒÆ¶¯µ½Õâ¸ögroupÖС£
Ìí¼ÓеÄRSGroup£º

ÏȽ«RSÒÆ¶¯µ½Õâ¸ögroupÖУ¬ÔÙ½«namespaceÒÆ¶¯µ½Õâ¸ögroupÖУº

RSGroupµÄ¹¦ÄÜÖ÷ÒªÔÚRSGroupAdminEndpointÖÐʵÏÖ£¬ËüÊÇÒ»¸öʵÏÖÁËMasterObserverµÄEndponit£¬ÔÚmaster²Ù×÷µÄhookÖУ¬½«tableµÄregionÒÆ¶¯µ½¶ÔÓ¦µÄRSGroupÖС£
RSGroupµÄÐÅÏ¢´æ´¢ÔÚhbase:rsgroup±íÖС£Í¬Ê±£¬RSGroupµÄÐÅÏ¢Ò²ÔÚzkÖд洢£¬µ±¼¯ÈºÆô¶¯Ê±£¬rsgroup±í»¹Ã»ÓÐonlineʱ£¬´ÓzkÖжÁ³öRSGroupµÄÐÅÏ¢¡£
×ÛÉÏ£¬¾ÍÊÇHBaseÖжà×â»§Ïà¹Ø¹¦ÄܵĽéÉÜ£¬Ï£Íû´ó¼ÒÔÚÉú²ú»·¾³Öжà¶àʹÓ㬲¢ÏòÉçÇø·´À¡¸Ä½ø½¨Ò飬¹²Í¬Íƶ¯HBase¶à×â»§¹¦ÄܵĽøÒ»²½ÍêÉÆ¡£ |