一文瞭解華為FusionInsight MRS HBase的集群隔離方案RSGroup

来源:https://www.cnblogs.com/huaweiyun/archive/2023/01/05/17027750.html
-Advertisement-
Play Games

摘要: RSGroup是集群隔離方案。 本文分享自華為雲社區《華為FusionInsight MRS HBase的集群隔離——RSGroup》,作者: MissAverage。 一、HBase RSGroup理解 RSGroup是集群隔離方案。 HBase原有的資源隔離:為多個用戶共用同一個HBas ...


摘要: RSGroup是集群隔離方案。

本文分享自華為雲社區《華為FusionInsight MRS HBase的集群隔離——RSGroup》,作者: MissAverage。

一、HBase RSGroup理解

RSGroup是集群隔離方案。

HBase原有的資源隔離:為多個用戶共用同一個HBase集群,提供了資源隔離的能力。

  1. NameSpace,將不同業務的表隔離在不同的namespace是一個最簡單的資源隔離的方法。【輕量】
  2. ACL(Access Control Lists),用於限制不同的用戶對不同的資源的操作或訪問許可權。

1.1 運維成本與集群資源利用問題

同一個 HBase 集群使用的用戶越來越多,不同用戶之間的讀寫或者不同表的 compaction、region splits 操作可能對其他用戶或表產生了影響。將所有業務的表都存放在一個集群的好處是可以很好的利用整個集群的資源,只需要一套運維繫統。

如果一個業務或者一個部門使用一個 HBase 集群,這樣會導致 HBase 集群的數量越來越多,直接導致了運維成本的增加。而且集群的分離也會導致資源的浪費,有些集群資源過剩,有些集群資源不足,這種情況我們無法充分利用不同集群的資源。將集群按照業務或部門分開的好處是可以很好的隔離不同表、不同用戶之間的影響。

1.2 RSGroup方案原理

官方版本集成了yahoo提交的rsgroup隔離方案。

如下圖所示:

在上圖中有兩個rsgroup,具體原理為:

A、將不同的RegionServer分配到不同的rsgroup中

上圖中RegionServer1、RegionServer2、RegionServer3被分配到了Important_group中,RegionServer4、RegionServer5、RegionServer6被分配到了normal_group中。

B、將不同的表分配到不同的group中

上圖中表t1和t2分配到了Important_group,表t3和t4分配到了normal_group。

C、表、regionserver分配到具體的rsgroup後就達到了隔離的效果

做好分配後,以表t1為例,t1的所有region都只會落到Important_group所屬的Regionserver中。此時當normal_group的任何Regionserver異常,都不會引起t1表的異常(datanode異常會有影響,後面有說明)。只有當Important_group所屬的Regionserver異常,並且有t1的region落在該regionserver上才會有影響。表代著業務,你可以將同類型(重要等級)的表放在同一個rsgroup中,這就實現了不同業務的隔離。

對於於重點業務,可以分配更多的regionserver的機器,負載更低;而對於非重點業務,則可以更少的機器承擔負更多的業務。目前datanode已經支持了分級存儲,甚至可以將重點業務使用不同的介質,比如SSD。

總結:RegionServer Group 技術是通過對 RegionServer 進行分組,不同的 RegionServer 分到不同的組。每個組可以按需掛載不同的表,並且當組內的表發生異常後,Region 不會遷移到其他的組。這樣,每個組就相當於一個邏輯上的子集群,通過這種方式達到資源隔離的效果,降低管理成本,不必為每個業務線單獨搭集群。

1.3 RSGroup隔離優缺點

優點:

  • 管理方便
  • 充分利用集群的資源
  • 機器騰挪擴容很方便
  • 有利於整個集群性能的提升

缺點:

  • 隔離不徹底,hdfs層還是共用,如果datanode出現異常,還是會影響到多個業務。

1.4 RSGroup issue

http://issues.apache.org/jira/browse/HBASE-6721

RegionServer Group based Assignment

該補丁增加了一個新的實驗模塊hbase-rsgroup。它是一個高級特性,可以將regionserver劃分成不同的組,以嚴格隔離,只有足夠成熟的用戶才能使用它,這些用戶必須瞭解其全部含義,並且有足夠管理HBase集群的背景。

在HBase的多租戶部署中,RegionServer很可能會為不同客戶端應用程式擁有的多個不同表提供Region服務。

能夠對運行的RegionServer的子集進行分組併為其分配特定的表,為客戶端應用程式提供了隔離和資源分配的級別。

提議的實質上是存在一個AssignmentManager,它知道RSGroup,並根據RSGroup向RegionServer分配表。負載平衡也將按組進行

二、RSGroup使用(以FusionInsight 8.0.2 --HBase 內核版本2.2.3為背景)

2.1 RSGroup相關配置

1) hbase.master.loadbalancer.class

【說明】負載均衡發生用來執行region均衡的類。當使用RSGroup時,該值必須是org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer,原值需要設置到hbase.rsgroup.grouploadbalancer.class中。

【預設值】org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer

<name>hbase.master.loadbalancer.class</name>
<value>org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer</value>

在引入RSGroup技術之前,HBase預設使用StochasticLoadBalancer策略(通過hbase.master.loadbalancer.class參數實現,參見HBASE-9555)將表的 Region 移動到 RegionServer裡面去。

這種策略並沒有考慮到RegionServer Group的信息,所以如果要對RegionServer分組,我們就需要在移動Region的時候考慮到這些信息。

基於這些信息,社區開發出能夠識別出RSGroup信息的 RSGroupBasedLoadBalancer,這個類和上面的StochasticLoadBalancer都是實現了LoadBalancer介面的,詳見 HBASE-6721。

2) hbase.coprocessor.master.classes

【說明】逗號隔開的org.apache.hadoop.hbase.coprocessor.MasterObserver coprocessors列表,在主HMaster中預設載入。對於實現了協處理器的所有方法,本配置列表將被順序調用。當實現了自己的MaterObserver時,只要將它加入到HBase的classpath並且類名全稱添加到本配置列表即可。

<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.hindex.server.master.HIndexMasterCoprocessor,com.huawei.hadoop.hbase.backup.services.RecoveryCoprocessor,org.apache.hadoop.hbase.security.access.ReadOnlyClusterEnabler,org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint </value>

3) hbase.rsgroup.fallback.enable

【說明】當Region所在的RSGroup沒有線上的RegionServer時,是否允許Region在預設的RSGroup或者其他的RSGroup短暫上線。[HBASE-24760]

【預設值】true

【註意】使用該功能時,balancer必須打開,否則Region可能在錯誤的RSGroup上線。關閉該功能時,會影響滾動重啟失敗。

<name>hbase.rsgroup.fallback.enable</name>
<value>true</value>

4) hbase.rsgroup.grouploadbalancer.class

【說明】負載均衡發生用來執行region均衡的類。當未使用RSGroup時,該參數不生效。

<name>hbase.rsgroup.grouploadbalancer.class</name>
<value>org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer</value>

5) hbase.priority.rsgroup.enabled

【說明】Priority RSGroup功能開關。開啟後,該RSGroup中表的數據副本會按照策略優先存放到Priority RSGroup和default RSGroup中的數據節點。故障恢復時,priority RSGroup的節點會優先處理。

【預設值】false

<name>hbase.priority.rsgroup.enabled</name>
<value>false</value>

2.2. RSGroup相關Shell命令

1) add_rsgroup

創建新的RSGroup。

2) alter_rsgroup_config

更新RSGroup配置。

3) balance_rsgroup

對某個RSGroup進行balance操作。

4) get_rsgroup

獲取RSGroup組信息,將列舉RSGRoup包含的所有servers和tables。

5) get_server_rsgroup

查看RSGroup組信息。

6) get_table_rsgroup

查看RSGroup組信息。將列舉RSGRoup包含的所有servers和tables。

7) list_rsgroups

查看RSGroup組信息。

8) move_namespaces_rsgroup

移動指定namespace到RSGroup。原namespace下的表可能位於不同的RSGroup,執行該命令時,均一起移動至同一RSGroup。

9) move_servers_namespaces_rsgroup

移動指定namespace及regionserver到RSGroup

10) move_servers_rsgroup

移動RegionServer到指定RSGroup,其上的region將移動到原RSGroup的另一RegionServer上。

11) move_servers_tables_rsgroup

將RegionServers和表從一個RSGroup 移動到另一個 RSGroup。

12) move_tables_rsgroup

將表從一個RSGroup移動另一個RSGroup。將指定的表添加到RSGroup,表的region都會轉移到該RSGroup內的RegionServer上。無法將表移動到無RegionServer存在的RSGroup,將報錯。

13) remove_rsgroup

刪除指定RSGroup。存在table和regionserver的非空RSGroup不可以被remove。

14) remove_servers_rsgroup

從RSGroup中刪除已退服的Region server。 無法對處於Dead/recovering/live狀態的Region server進行該操作。

15) rename_rsgroup

刪除指定RSGroup。

16) show_rsgroup_config

顯示RSGroup配置。

三、RSGroup實現

3.1 Coprocessor相關

擴展RSGroup 是Coprocessor的應用場景之一。Coprocessor可以擴展HBase介面能力且不影響主流程。如果用戶想實現增刪改查之外其它介面,這些介面可能既不是table的介面,也不是Master的介面,那麼Coprocessor是一個較好的選擇。Coprocessor可以通過封裝服務邏輯的方式,在HBase裡面重新建立一個RPC服務。

Coprocessor分為Observer和Endpoint兩種:

1) Observer協處理器類似於RDBMS中的觸發器,因為它在特定事件(如Get或Put)發生之前或之後執行代碼。

2) Endpoint協處理器類似於RDBMS中的存儲過程,因為它允許在RegionServer本身而不是在客戶端上對數據執行自定義計算。

3.1.1 RSGroup核心功能模塊

RSGroup的核心功能模塊有以下幾個:proto文件,AdminEndpoint,Servicelmpl,Client,Server和BasedLoadBalancer等。AdminEndpoint實現MasterCoprocessor和MasterObserver。Service沒有使用Endpoint來實現,而是自己寫了RSGroupAdminServiceImpl類實現。Client真正的業務邏輯在RsGroupAdminServer和BasedLoadBalancer裡面。

3.2 proto文件

3.2.1 【hbase-protocol】 RSGroup.proto

定義了RSGroupInfo message。

message RSGroupInfo {
  required string name = 1;
  repeated ServerName servers = 4;
  repeated TableName tables = 3;
  repeated NameStringPair configuration = 5;
}

3.2.2 【hbase-rsgroup】 RSGroupAdmin.proto

定義了多個 message數據結構,以及service RSGroupAdminService。

service RSGroupAdminService {
 rpc GetRSGroupInfo(GetRSGroupInfoRequest)
 returns (GetRSGroupInfoResponse);
 rpc GetRSGroupInfoOfTable(GetRSGroupInfoOfTableRequest)
 returns (GetRSGroupInfoOfTableResponse);
 rpc GetRSGroupInfoOfServer(GetRSGroupInfoOfServerRequest)
 returns (GetRSGroupInfoOfServerResponse);
 rpc MoveServers(MoveServersRequest)
 returns (MoveServersResponse);
 rpc MoveTables(MoveTablesRequest)
 returns (MoveTablesResponse);
 rpc AddRSGroup(AddRSGroupRequest)
 returns (AddRSGroupResponse);
 rpc RemoveRSGroup(RemoveRSGroupRequest)
 returns (RemoveRSGroupResponse);
 rpc BalanceRSGroup(BalanceRSGroupRequest)
 returns (BalanceRSGroupResponse);
 rpc ListRSGroupInfos(ListRSGroupInfosRequest)
 returns (ListRSGroupInfosResponse);
 rpc MoveServersAndTables(MoveServersAndTablesRequest)
 returns (MoveServersAndTablesResponse);
 rpc RemoveServers(RemoveServersRequest)
 returns (RemoveServersResponse);
 rpc RenameRSGroup(RenameRSGroupRequest)
 returns (RenameRSGroupResponse);
 rpc UpdateRSGroupConfig(UpdateRSGroupConfigRequest)
 returns (UpdateRSGroupConfigResponse);
}

RSGroupAdminService由RSgroupAdminEndpoint.RSGroupServiceImpl類繼承實現,調用RSGroupAdminServer進行實際工作,將結果轉換為protocol buffer response;如果發生異常處理異常,然後使用RpcCallback進行response。

3.3 RSGroupAdmin

[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdmin

介面,定義了client和server之間的RSGroup用戶API介面。

RSGroupInfo getRSGroupInfo(String groupName) throws IOException;
RSGroupInfo getRSGroupInfoOfTable(TableName tableName) throws IOException;
void moveServers(Set<Address> servers, String targetGroup) throws IOException;
void moveTables(Set<TableName> tables, String targetGroup) throws IOException;
void addRSGroup(String groupName) throws IOException;
void removeRSGroup(String groupName) throws IOException;
boolean balanceRSGroup(String groupName) throws IOException;
List<RSGroupInfo> listRSGroups() throws IOException;
RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException;
void moveServersAndTables(Set<Address> servers, Set<TableName> tables,
 String targetGroup) throws IOException;
default void removeServers(Set<Address> servers) throws IOException {
 removeServers(servers, false);
}
void removeServers(Set<Address> servers, boolean forceRemove) throws IOException;
void renameRSGroup(String oldName, String newName) throws IOException;
void updateRSGroupConfig(String groupName, Map<String, String> configuration) throws IOException;

3.4 RSGroupAdminClient

[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdminClient

實現RSGroupAdmin介面。

3.5 RSGroupAdminServer

[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupAdminServer

實現RSGroupAdmin介面。

3.6 RSGroupProtobufUtil

[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupProtobufUtil

實現了兩個方法分別進行RSGroupProtos.RSGroupInfo和【hbase-common】org.apache.hadoop.hbase.rsgroup. RSGroupInfo的轉換

3.7 RSGroupProtobufUtil

[hbase-rsgroup] org.apache.hadoop.hbase.rsgroup. RSGroupProtobufUtil

實現了兩個方法分別進行RSGroupProtos.RSGroupInfo和【hbase-common】org.apache.hadoop.hbase.rsgroup. RSGroupInfo的轉換。

static RSGroupInfo toGroupInfo(RSGroupProtos.RSGroupInfo proto)
static RSGroupProtos.RSGroupInfo toProtoGroupInfo(RSGroupInfo pojo)

其中:

toGroupInfo的調用在RSGroupAdminClient和RSGroupInfoManagerImpl中。(除了測試代碼)

toProtoGroupInfo的調用在RSGroupAdminEndpoint.RSGroupAdminServiceImpl中和RSGroupInfoManagerImpl中。

以上,是對HBase集群隔離方案RSGroup的背景、應用及模塊實現介紹說明。

參考

  • 一文讀懂HBase多租戶
  • RegionServer Group based Assignment

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本實例使用了工具包SKIT.FlurlHttpClient.Wechat.TenpayV3(github:https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat) 示例中的_repositoryWrapper的相關使用是我們 ...
  • 1 ProXmoX-VE簡介 PVE(ProXmoX VE)是一個開源的虛擬化管理軟體,類似ESXI,用戶可以通過網頁的方式來管理伺服器,使用kvm以及lxc技術運行虛擬機,同時也提供了一些集群和HA等功能。 2 安裝 2.1準備工作 首先準備好安裝的鏡像proxmox-ve_7.3-1下載地址:h ...
  • 技術方案: 1.運行時使用.Net Framework4.6框架,界面使用WPF與Chromium。 2.上位機與下位機使用串口對接每家設備協議,上位機與UI使用WebSocket通訊。 3.資料庫使用SQLite和localStorage。 單機版V1.0 界面清新、操作簡單。 支持地磅秤、智能電 ...
  • 由於.NET 中是讓垃圾收集器Garbage Collector (簡稱GC)刪除未使用的對象。但是,由於GC只是不時地刪除未使用的對象,因此同時使用的記憶體會增加。更重要的是,對於GC來說,HALCON 的標誌性變數(圖像、區域……)似乎相當“小”,因為它們只包含對(在許多情況下相當大)標誌性對象的 ...
  • 目標:在掃雷中註入一個messagebox彈窗; 方法:打開一個進程(掃雷的進程),申請記憶體,寫入messagebox; 另外啟動一個線程,讓整個代碼跑起來 項目創建 註入代碼 .586 .model flat,stdcall option casemap:none include windows. ...
  • 最近在學習stm32的FSMC,打算整一個LCD的驅動,然後封裝的比正點原子更高層一些,方便後期直接調用 然後在學習的時候碰到了一個小問題,研究了一會之後覺得挺有意思的,所以記下來 //使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作為數據命令區分線 ...
  • 背景 客戶收到了SQL專家雲告警郵件,在凌晨2點到3點之間帶有資源等待的會話數暴增,請我們協助分析。 現象 登錄SQL專家雲,進入活動會話的趨勢分析頁面,下鑽到2點鐘一個小時內的數據,看到每分鐘的等待數都在100左右,2點15分時達到200。 轉到活動會話原始數據頁面,看到大量會話都在等待,等待類型 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:蟹黃瓜子 文章來源:GreatSQL社區投稿 1.Zookeeper概述 Zookeeper對於很多人開始可能都有所耳聞,他的使用場景也很多,可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...