有关负载均衡的相关源码分析请参考上一篇博文:
http://blog.youkuaiyun.com/u013080251/article/details/68947654
负载均衡是计算机网络领域的一个专业术语,该术语在分布式系统领域应用非常广泛。对于HBase来讲,不同节点(RegionServer)用户请求需要负载均衡技术,其实在HBase很早的版本中已经实现了负载均衡,0.92版本后HBase的负载均衡算法可以通过实现LoadBalancer接口的hbase.master.loadbalancer.class来自定义。HBase通过Region数量实现简单的负载均衡,虽然这种方式比较简单,但官方认为这样的实现是最简洁、高效的,能够满足绝大部分的需求。接下来将介绍三种负载均衡计划的原理和应用场景,以及手动控制的负载均衡。
一、全局计划
全局计划是最常见的负载均衡,它贯穿在整个集群的平衡运行期内,负载均衡以特定时间间隔(hbase.balancer.period默认是5分钟)执行。但是,当遇到如下场景时不进行全局负载均衡:
- 均衡负载开关balanceSwitch关闭。
- HMaster未完成初始化操作。
- RIT中有未处理完的Region(当前有region处于splitting状态)。
- 有正在处理的Dead RegionServer。
- RegionServer上的平均Region数量小于等于1.
1.算法流程
1)两个有效参数:MIN = floor(average)(表示下限)和MAX=ceil(average)(表示上限)。
2)循环过载机器,将Region卸载到MAX数量,在小于等于MAX时停止排序Region(按时间新旧)。
3)遍历最轻负载机器,分配Region直到Server达到MIN值。在大于等于MIN时停止。这些Region都是之前卸载的。可能没有足够地卸载Region让轻负载的机器达到MIN值,如果这样,在Region数等于neededRegions(轻负载机器的数量)时停止。可能我们分配了卸载的Region到轻负载机器,但是仍然有Region没有分配出去,这种情况下,本步骤完成,在下面步骤中再做处理。
4)如果neededRegions是非零的值,遍历负载最重的机器,从每台机器上卸载一个Region,使得它们的值从MAX到MIN。
5)现在有很多Region等待分配,遍历最轻的负载机器(