前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


负载均衡

负载均衡是分布式系统的必备功能,多个节点组成的分布式系统必须通过负载均衡机制保证各个节点之间负载的均衡性,一旦出现负载非常集中的情况,就很有可能导致对应的部分节点响应变慢,进而拖慢甚至拖垮整个集群。

在实际生产线环境中,负载均衡机制最重要的一个应用场景是系统扩容。

分布式系统通过增加节点实现扩展性,但如果说扩容就是增加节点其实并不准确。

扩容操作一般分为两个步骤:

  • 首先,需要增加节点并让系统感知到节点加入;
  • 其次,需要将系统中已有节点负载迁移到新加入节点上。第二步负载迁移在具体实现上需要借助于负载均衡机制。

负载均衡从字面上来看就是通过一定策略使得整个系统的负载在所有节点上都表现均衡。

那首先需要明确系统负载是什么,应该通过哪些元素来刻画。

负载明确之后进一步检查集群的负载现状,如果已经均衡就不必做任何处理,如果不均衡就要制订负载迁移计划。

迁移计划制订之后需要根据计划进行具体负载的迁移。


负载均衡策略

HBase 官方目前支持两种负载均衡策略: SimpleLoadBalancer 策略和 StochasticLoadBalancer 策略。


1. SimpleLoadBalancer 策略

这种策略能够保证每个 RegionServer 的 Region 个数基本相等,假设集群中一共有 n 个 RegionServer,m 个 Region ,那么集群的平均负载就是 average = m/n,这种策略能够保证所有 RegionServer 上的 Region 个数都在 [floor(average),ceil(average)]之间。

因此, SimpleLoadBalancer 策略中负载就是 Region 个数,集群负载迁移计划就是 Region 从个数较多的 RegionServer 上迁移到个数较少的 RegionServer 上。

很显然这种策略简单易懂,但是,考虑的因素太过单一,对于 RegionServer 上的读写 QPS 、数据量大小等因素都没有实际考虑,这样就可能出现一种情况:虽然集群中每个 RegionServer 的 Region 个数都基本相同,但因为某台 RegionServer 上的 Region 全部都是热点数据,导致 90 %的读写请求还是落在了这台 RegionServer 上,这样显而易见没有达到负载均衡的目的。


2. StochasticLoadBalancer 策略

StochasticLoadBalancer 策略相比 SimpleLoadBalancer 策略更复杂,它对于负载的定义不再是 Region 个数这么简单,而是由多种独立负载加权计算的复合值,这些独立负载包括:

  • Region 个数( RegionCountSkewCostFunction )
  • Region 负载
  • 读请求数( ReadRequestCostFunction )
  • 写请求数( WriteRequestCostFunction )
  • Storefile 大小( StoreFileCostFunction )
  • MemStore 大小( MemStoreSizeCostFunction )
  • 数据本地率( LocalityCostFunction )
  • 移动代价( MoveCostFunction )

这些独立负载经过加权计算会得到一个代价值,系统使用这个代价值来评估当前 Region 分布是否均衡,越均衡代价值越低。

HBase 通过不断随机挑选迭代来找到一组 Region 迁移计划,使得代价值最小。


负载均衡策略的配置

StochasticLoadBalancer 是目前 HBase 默认的负载均衡策略。 用户可以通过配置选择具体的负载均衡策略,如下所示:

<property>
<name>hbase.master.loadbalancer.class</name>
<value>org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer</value>
</property>

3 .负载均衡相关的命令

HBase 提供了多个与负载均衡相关的 shell 命令,主要包括负载均衡开关 balance_switch 以及负载均衡执行 balancer 等命令。

HBase 怎样负载均衡?相关推荐

  1. hbase源码系列(一)Balancer 负载均衡

    看源码很久了,终于开始动手写博客了,为什么是先写负载均衡呢,因为一个室友入职新公司了,然后他们遇到这方面的问题,某些机器的硬盘使用明显比别的机器要多,每次用hadoop做完负载均衡,很快又变回来了. ...

  2. HBase流量限制和表负载均衡剖析

    1.概述 在HBase-1.1.0之前,HBase集群中资源都是全量的.用户.表这些都是没有限制的,看似完美实则隐患较大.今天,笔者就给大家剖析一下HBase的流量限制和表的负载均衡. 2.内容 也许 ...

  3. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇) 十三.Nginx负载均衡 1.Nginx安装环境 2.编译 3.启动测试 4.ngi ...

  4. 架构师之路 — 部署架构 — 超大规模负载均衡架构演进

    目录 文章目录 目录 超大规模负载均衡架构演进技术路线 0.单机架构 1.HTTP 与 DB 服务器分开部署 2.引入本地缓存和分布式缓存 3.引入反向代理实现负载均衡 4.数据库读写分离 5.数据库 ...

  5. 一文搞懂负载均衡中的一致性哈希算法

    一致性哈希算法在很多领域有应用,例如分布式缓存领域的 MemCache,Redis,负载均衡领域的 Nginx,各类 RPC 框架.不同领域场景不同,需要顾及的因素也有所差异,本文主要讨论在负载均衡中 ...

  6. linux window nginx性能,Nginx负载均衡搭建(Window与Linux)

    windows上搭建nginx负载均衡 1.准备几台http服务器软件,这里选用一台apache一台tomcat apache(windows)下载链接:https://www.apachehaus. ...

  7. mysql集群负载均衡,这些知识你必须拿下

    如何提升自己的实力? Step 1:梳理自己的知识 对照下面这份学习大纲,梳理出自己的知识盲区,这份大纲里面的技术点完全对标P7岗的主流技术,因此这是一份很好的知识大纲笔记. Step 2:查漏补缺, ...

  8. CC00010.hadoop——|HadoopImpala.V10|——|Impala.v10|集群实现|负载均衡.v01|

    一.Impala进阶 ### --- Impala的负载均衡~~~ Impala主要有三个组件,分别是statestore,catalog和impalad, ~~~ 对于Impalad节点,每一个节点 ...

  9. 数据库分类和负载均衡方案

    最近我在研究数据库方面的知识,包括数据库发展历史.分类.使用场景.大数据时代的数据库等等.网上收集了很多资料,整理出来,供感兴趣的同学参考. 一.数据库发展史和数据库分类 为啥我会把发展史和分类放在一 ...

最新文章

  1. 6、UmbracoNewsSite:添加新闻分类
  2. CentOS 6.5 使用docker 容器
  3. android的选项菜单,Android界面菜单(2)—选项菜单
  4. idea debug调试_大牛都会用的 IDEA 调试技巧!!!
  5. 第一章 Linux系统简介
  6. 大连交通大学计算机网络,计算机网络题库(大连交通大学)chapter5.doc
  7. Linux(CentOS 6.5)下配置Mono和Jexus并且部署ASP.NET MVC5
  8. Linux命令Man解释:useradd:帐号建立或更新
  9. 最近好闷,什么时候才有需求啊,很郁闷
  10. 13、XSI,信号量简介
  11. Ubuntu16安装搜狗拼音输入法
  12. 企业长期偿债能力评估-利息收入倍数、财务杠杆比率、资产负债率、利息保障倍数、债务股本比率...
  13. Go语言——Viper
  14. 读书笔记:redis开发与运维 基础篇
  15. 地图可视化“一网打尽“
  16. unity3d之读取图集图片
  17. 什么是七日年化收益率和万分收益?
  18. Lintcode -378. 将二叉查找树转换成双链表
  19. 【JAVA面试】来自某双非本科菜比的秋招历程分享
  20. 不用CSDN博客了,用博客园。。。

热门文章

  1. 鸿蒙系统报名选择一个应用,申请鸿蒙系统有一个应用选择怎么选择呢
  2. Android判断手机是否是小米MIUI系统
  3. 前端框架 ng 环境配置
  4. 2421:Exchange Rates——动态规划
  5. 基于PP-TSM+BMN+LSTM实现足球精彩时刻剪辑_副本1
  6. Java 趣事之 a=a++ 和 a=++a
  7. 阿里云天池AI龙珠计划-Python训练营学习笔记task1
  8. 2014年中款MacBook Pro 更换CPU散热硅脂再战5年
  9. 高手必备 | Revit插件到底哪个好?区别是什么?
  10. 今日学习在线编程题:幻数