深度剖析HBase負載均衡和效能指標
深度剖析 HBase 負載均衡和效能指標
在分散式系統中,負載均衡是一個非常重要的功能, HBase透過Region的數量實現負載均衡,即透過hbase.master.loadbalancer.class實現自定義負載均衡演算法。下面將為大家剖析HBase負載均衡的相關內容以及效能指標。
內容
HBase系統負載均衡是一個週期性的操作,透過負載均衡來均勻分配Region到各個RegionServer上,透過hbase.balancer.period屬性來控制負載均衡的時間間隔,預設是5分鐘。觸發負載均衡操作是有條件的,但是如果發生以下情況則不會觸發負載均衡操作:
l 負載均衡自動操作 balance_switch關閉,即:balance_switch false;
l HBase Master節點正在初始化操作;
l HBase叢集中正在執行RIT,即Region正在遷移中;
l HBase叢集正在處理離線的RegionServer;
負載均衡演算法
HBase執行負載均衡操作的時候,如何判斷各個RegionServer節點上的Region個數是否均衡,這裡透過以下步驟來判斷:
l 計算均衡值的區間範圍,透過總 Region個數以及RegionServer節點個數,算出平均Region個數,然後在此基礎上計算最小值和最大值;
l 遍歷超過 Region最大值的RegionServer節點,將該節點上的Region值遷移出去,直到該節點的Region個數小於等於最大值的Region;
l 遍歷低於 Region最小值的RegionServer節點,分配叢集中的Region到這些RegionServer上,直到大於等於最小值的Region;
l 負責上述操作,直到叢集中所有的 RegionServer上的Region個數在最小值與最大值之間,叢集才算到達負載均衡,之後,即使再次手動執行均衡命令,HBase底層邏輯判斷會執行忽略操作。
演算法流程例項
下面筆者透過實際的應用場景來給大家剖析 HBase負載均衡演算法的實現流程。舉個例子,假如我們當前有一個5臺節點規模的HBase叢集(包含Master和RegionServer),其中2臺Master和3臺RegionServer組成,每臺RegionServer上的Region個數,如圖所示:
圖 1
執行負載均衡操作之前,首先計算叢集中總的 Region個數,當前例項中叢集中的Region總個數為175+56+99=330,然後計算每個RegionServer需要容納的Region平均值,計算結果:
平均值 (110) = 總Region個數(330) / RegionServers總數(3)
計算最小值和最大值來判斷 HBase叢集是否需要進行負載均衡操作,計算公式:
# hbase.regions.slop 權重值,預設為0.2
最小值
= Math.
floor
(平均值 * (
1-0.2
))
最大值
= Math.
ceil
(平均值 * (
1
+
0.2
))
HBase叢集如果判斷各個RegionServer中的最小Region個數大於計算後的最小值,並且最大Region個數小於最大值,這是直接返回不會觸發負載均衡操作。根據例項中給出的Region數,計算得出最小值Region為88,最大值Region為120。
由於例項中 RegionServer2的Region個數為56,小於最小值Region數88,而RegionServer1的Region個數為175,大於了最大值Region數120,所以需要負載均衡操作。
HBase系統提供管理員命令來操作負載均衡,具體操作命令:
# 使用hbase shell命令進入到HBase控制檯,然後開啟自動執行負載均衡
hbase(main):001:0>
balance_switch true
balance_switch 命令底層實現 balance_switch.rb 和 admin.rb 檔案原始碼:
圖 2
此命令輸出的是之前負載均衡器 balancer的開關設定,再看balance_switch命令處理實現原始碼:
圖 3
此時 HBase負載均衡自動操作就開啟完畢,但是如果我們需要立即均衡叢集的Region個數怎麼辦?這裡HBase也提供管理命令,透過balancer命令來實現,操作命令:
hbase ( main ) :001:0 > balancer
balancer命令實現檢視balancer.rb和admin.rb檔案原始碼:
圖 4
圖 5
該命令透過呼叫負載均衡器 balancer的balanceCluster()方法生成負載均衡計劃執行叢集的負載均衡操作,Master實現負載均衡底層原始碼:
圖 6-1
圖 6-2
但是這樣每次手動執行,每次均衡的個數不一定能滿足要求,那麼我們可以透過封裝該命令,用指令碼來排程執行,具體實現程式碼:
圖 7
此指令碼預設執行 20次,可以透過輸入整型引數來自定義執行次數。
當 HBase叢集檢查完所有的RegionServer上的Region個數已打要求,那麼此時叢集的負載均衡操作就已經完成了。如果沒有達到要求,可以再次執行上述指令碼,直到所有的Region個數在最小值和最大值之間為止。當HBase叢集中所有的RegionServer完成負載均衡後,例項中的各個RegionServer上的Region個數分佈,如圖所示:
圖 8
此時各個 RegionServer節點上的Region個數均在最小值和最大值範圍內,HBase叢集各個RegionServer節點上的Region處理均衡狀態。
效能指標
HBase系統有一個非常重要的效能指標,那就是叢集處理請求的延時。HBase系統為了反應叢集內部處理請求所耗費的時間提供一個工具類即:
org .apache.hadoop.hbase.tool.Canary
此類主要使用者檢查 HBase系統的耗時狀態。如果不知道使用方法,透過help命令來檢視具體的用法,操作命令:
hbase org.apache.hadoop.hbase.tool.Canary -help
(1)檢視叢集中每個表中每個Region的耗時情況
hbase org.apache.hadoop.hbase.tool.Canary
(2) 檢視 money表中每個Region的耗時情況,多個表之間使用空格分割
# 檢視
money
表和
person
表
hbase
org.apache.hadoop.hbase.tool.Canary
money
person
(3) 檢視每個 RegionServer的耗時情況
hbase org.apache.hadoop.hbase.tool.Canary -regionserver dn1
通常情況下我們比較關注每個 RegionServer節點的耗時情況,將該命令封裝一下,然後列印叢集中每個RegionServer的耗時情況,指令碼實現:
圖 9
總結
維護 HBase叢集,比如重啟某幾個RegionServer節點後,可能會傳送Region不均衡的情況,這時如果開啟自動均衡後,需要立即使當前叢集上其他RegionServer上的Region處於均衡狀態,那麼就可以使用手動均衡操作。另外,HBase叢集各個RegionServer的耗時情況,能夠反映當前叢集的健康狀態。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555587/viewspace-2216292/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 剖析HBase負載均衡和效能指標負載指標
- 解密負載均衡技術和負載均衡演算法解密負載演算法
- 深入剖析 RocketMQ 原始碼 - 負載均衡機制MQ原始碼負載
- 【知識分享】四層負載均衡和七層負載均衡負載
- 代理和負載均衡概述負載
- 負載均衡和動態負載均衡分別是什麼?-VeCloud負載Cloud
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- 負載均衡負載
- dubbo叢集和負載均衡負載
- 做了反向代理和負載均衡的nginx配置檔案簡單示例(nginx.conf) HTTP負載均衡/TCP負載均衡負載NginxHTTPTCP
- 負載均衡是什麼?怎麼理解負載均衡的部署方式和工作原理負載
- IP負載均衡負載
- WebSocket負載均衡Web負載
- nginx負載均衡Nginx負載
- NGINX 負載均衡Nginx負載
- 【Nginx】負載均衡Nginx負載
- 負載均衡---ribbon負載
- LoadBalancer負載均衡負載
- LVS 負載均衡負載
- 負載均衡技術(一)———負載均衡技術介紹負載
- 負載均衡技術(二)———常用負載均衡服務介紹負載
- CDN和負載均衡的基本瞭解負載
- dubbo容錯機制和負載均衡負載
- 伺服器效能指標(一)——負載(Load)分析及問題排查伺服器指標負載
- Nginx負載均衡模式Nginx負載模式
- 漫談負載均衡負載
- 負載均衡簡介負載
- golang grpc 負載均衡GolangRPC負載
- gRPC的負載均衡RPC負載
- 負載均衡詳解負載
- 負載均衡知多少?負載
- Linux LVS 負載均衡Linux負載
- 淺談負載均衡負載
- 負載均衡叢集負載
- 負載均衡補充負載
- 負載均衡4層負載
- 負載均衡之keepalived負載