1.负载均衡概述
- Master的LoadBalancer线程周期性的在各个RegionServer间移动region维护负载均衡
1 经常被并发查询的数据不要存储在同一个RegionServer中 , 避免热点读取问题 .
2 当一个机器上经过大量的插入或者删除数据以后 ,region合并或者分裂 ,那么机器上的region的数量会相差很大 .
3 当新增了节点以后 , 应该去分配一些其他机器上的region数据
4 当某个RegionServer宕机以后 , 这台机器上数据的分配
region的执行
- Hbase中负载均衡的开关balanceSwitch默认是开启的 .hbase.balancer.period是设定负载均衡的参数,默认为每5分钟(300000毫秒)运行一次,参数配置通过hbase-site.xml文件。具体的设置格式如下:
<property>
<name>hbase.balancer.period</name>
<value>300000</value>
</property>
2. 自动全局负载均衡流程
- 两个有效参数:MIN = floor(average)(表示下限)和MAX=ceil(average)(表示上限)。
- 循环过载机器,将Region卸载到MAX数量,在小于等于MAX时停止排序Region(按时间新旧)。
- 遍历最轻负载机器,分配Region直到Server达到MIN值。在大于等于MIN时停止。这些Region都是之前卸载的。可能没有足够地卸载Region让轻负载的机器达到MIN值,如果这样,在Region数等于neededRegions(轻负载机器的数量)时停止。可能我们分配了卸载的Region到轻负载机器,但是仍然有Region没有分配出去,这种情况下,本步骤完成,在下面步骤中再做处理。
- 如果neededRegions是非零的值,遍历负载最重的机器,从每台机器上卸载一个Region,使得它们的值从MAX到MIN。
- 现在有很多Region等待分配,遍历最轻的负载机器(多台),分配Region到MIN。
- 如果仍然有Region没有分配,遍历最轻的负载机器(多台),这次分配Region到MAX。
- 所有Server的Region数量时MAX或者MIN,另外,所有大于等于MAX的Server保证在均衡完成后都是MAX个Region。从而保证Region移动的最小数量。
其中,轻负载指的是Region数量小于等于AVG,过载指大于等于AVG,所有的RegionServer都按照负载从大到小排序,存放在TreeMap中(保证先遍历过载Server)。
3. 手动负载均衡
- kill 掉不是Hmaster节点的 regionserver(slave2)
- hbase 16010 查看regionserver在slave2节点
- 在master节点启动 regionserver(slave2)
master $>hbase-daemons.sh start regionserver - hbase 16010 查看regionserver负载不均衡 (多刷新 0 6)
balance负载均衡指令,需使用开关模式,原因负载均衡比较耗费资源:hbase(main):> balance_switch true //开启负载均衡 hbase(main):> balancer //执行负载均衡 hbase(main):> balance_switch false //关闭负载均衡 hbase(main):> balancer "force" //强制负载均衡