RabbitMQ–扩展–11–均衡负载


1、场景

面对大量业务访问、高并发请求,可以使用高性能的服务器来提升RabbitMQ服务的负载能力。当单机容量达到极限时,可以采取集群的策略来对负载能力做进一步的提升,但这里还存在一个负载不均衡的问题。

举例:如果一个集群中有3个节点,那么所有的客户端都与其中的某个节点nodel1建立TCP连接,那么nodel1的网络负载必然会大大增加而显得难以承受,其他节点又由于没有那么多的负载而造成硬件资源的浪费,所以负载均衡显得尤为重要。

对于RabbitMQ而言,客户端与集群建立的TCP连接不是与集群中所有的节点建立连接,而是挑选其中一个节点建立连接。如下图所示,在引入了负载均衡之后,各个客户端的连接可以分摊到集群的各个节点之中,进而避免了前面所讨论的缺陷。

2、负载均衡

2.1、定义

负载均衡是一种计算机网络技术,用于在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳资源使用、最大化吞吐率、最小响应时间及避免过载的目的。

使用带有负载均衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。

2.2、负载均衡分类

  1. 软件负载均衡

    1. 服务端负载
    2. 客户端负载
  2. 硬件负载均

2.2.1、软件负载均衡

  1. 是指在一个或者多个交互的网络系统中的多台服务器上安装一个或多个相应的负载均衡软件来实现的一种均衡负载技术。
  2. 负载均衡软件 可以很方便地安装在服务器上,并且实现一定的均衡负载功能。
  3. 负载均衡软件 配置简单、操作也方便,最重要的是成本很低。

2.2.2、硬件负载均

  1. 是指在多台服务器间安装相应的负载均衡设备,也就是负载均衡器(如F5)来完成均衡负载技术
  2. 与软件负载均衡技术相比,能达到更好的负载均衡效果。
  3. 由于硬件负载均衡技术需要额外增加负载均衡器,成本比较高,所以适用于流量高的大型网站系统。

2.3、负载均衡算法

对于RabbitMQ 而言可以在客户端连接时简单地使用负载均衡算法来实现负载均衡。
负载均衡算法有很多种,主流的有以下几种。

2.3.1、轮训算法

将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

2.3.2、加权轮询法

不同的后端服务器的配置可能和当前系统的负载并不相同,因此它们的抗压能力也不相同。

  1. 给配置高、负载低的机器,配置更高的权重,让其处理更多的请求
  2. 给配置低、负载高的机器,配置较低的权重,降低其系统负载

加权轮询能很好地处理这一问题,并将请求顺序和权重分配到后端。

2.3.3、随机法

通过随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用情况,也就是轮询的结果。

2.3.4、加权随机法

与加权轮询法一样,加权随机法也根据后端机器的配置、系统的负载分配不同权重。
不同的是,它按照权重随机请求后端服务器,而非顺序。

2.3.5、源地址后希法

源地址哈希的思想是根据获取的客户端IP 地址,通过啥希函数计算得到面一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。

采用源地址哈希法进行负载均衡,同一IP 地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

2.3.6、最小连接数法

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负载合理地分流到每一台服务器。

3、实现方式

3.1、使用HAProxy 实现负载均衡

HAProxy资料

https://blog.csdn.net/zhou920786312/category_11584732.html


3.2、使用Keepalived实现高可靠负载均衡

Keepalived资料

https://blog.csdn.net/zhou920786312/category_11276453.html

3.2.1、介绍

试想如果前面配置的HAProxy主机192.168.0.9突然宕机或者网卡失效,那么虽然RabbitMQ集群没有任何故障,但是对于外界的客户端来说所有的连接都会被断开,结果将是灾难性的。确保负载均衡服务的可靠性同样显得十分重要。这里就需要引入Keepalived 工具,它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。

Keepalived 采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)以软件的形式实现服务的热备功能。通常情况下是将两台Linux服务器组成一个热备组(Master 和Backup),同一时间内热备组只有一台主服务器Master提供服务,同时Master会虚拟出一个公用的虚拟IP地址,简称VIP。

这个VIP只存在于Master上并对外提供服务。如果Keepalived检测到Master宿机或者服务故障,备份服务器Backup会自动接管VIP 并成为Master,Keepalived将原Master从热备组中移除。当原Master恢复后,会自动加入到热备组,默认再抢占成为Master,起到故障转移的功能。

3.2.2、整条调用链路

  1. 客户端通过VIP建立通信链路
  2. 通信链路通过Keeaplived 的Master 节点路由到对应的HAProxy之上
  3. HAProxy 通过负载均衡算法将负载分发到集群中的各个节点之上。
    1. 正常情况下客户端的连接通过图11-12中左侧部分进行负载分发。
    2. 当Keepalived 的Master节点挂掉或者HAProxy挂掉无法恢复时,Backup提升为Master,客户端的连接通过图11-12 中右侧部分进行负载分发。

3.3、使用Keepalived+LVS 实现负载均衡

资料

https://blog.csdn.net/zhou920786312/category_11840630.html

RabbitMQ--扩展--11--均衡负载相关推荐

  1. RabbitMQ镜像队列与负载均衡

    镜像队列 RabbitMQ集群是由多个broker节点构成的,那么从服务的整体可用性上来讲,该集群对于单点失效是有弹性的,但是同时也需要注意:尽管exchange和binding能够在单点失效问题上幸 ...

  2. 集群和均衡负载[摘]

    http://www.xxlinux.com/linux/article/network/app/20060921/4464.html 本文目的在于分析Jetspeed支持集群的现状.首先介绍了集群计 ...

  3. php 安装rabbitmq拓展_【RabbitMQ】——centos7安装rabbitmq教程 以及 PHP开启rabbitmq扩展...

    第一步:安装Erlang 因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装Erlang rpm -Uvh http://www.rabbitmq.com/releases/erlan ...

  4. tomcat+nginx+redis实现均衡负载、session共享(一)

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  5. tomcat+nginx+redis实现均衡负载、session共享

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  6. 均衡负载集群(LBC)-1

    均衡负载集群(LBC) 客户–>通过Internet->负载调度器->n台真实服务器 负载调度器: 软件:LVS:Nginx:Haproxy 硬件:F5: LVS架构: 使用到C/S ...

  7. 9 Kong LVS 均衡负载

    图片不清晰可以去看word文档:word文档地址:https://github.com/IceEmblem/LearningDocuments/tree/master/%E5%AD%A6%E4%B9% ...

  8. 使用Springboot实现Nginx均衡负载功能

    ** 使用Springboot实现Nginx均衡负载功能 ** 1.什么是Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD- ...

  9. Haproxy+Keepalived+MySQL高可用均衡负载部署

    一.安装主从MySQL 1. 按照Linux-rpm安装MySQL步骤完成MySQL安装: 2. 修改启动的配置文件 (1)复制/usr/share/mysql路径下的my-default.cnf文件 ...

  10. 【项目实战19】k8s(5)—service服务(IPVS均衡负载)

    service服务 一.前言 (1).service简述 (2).service类型 二.IPVS服务 (1).简介 (2).使用 三.service外部访问方式 (1).NodePort (2).L ...

最新文章

  1. SpringMVC中的拦截器
  2. C++通过GSoap访问webService
  3. php directoryiterator,PHP DirectoryIterator getBasename()用法及代码示例
  4. aws eks_在生产中配置和使用AWS EKS
  5. 视频会议应用空间广阔 未来“上云”将成趋势
  6. 【英语学习】【Daily English】U14 Transportation L03 Sorry for keeping you waiting
  7. 实战VEEAM BR 10针对物理AD服务器备份与APP感知还原
  8. ODE网络:一场颠覆RNN的革命即将到来
  9. 计算机械效率的公式怎么读,机械效率公式总结
  10. 关于Cocos2d-x中使用完Blink动作后精灵突然消失的问题的解决
  11. web集群之LVS集群
  12. 在 RAID 磁盘上面架构 LVM 系统
  13. docker 部署 gitlab最新版本( 当前 11.8.1通过验证)
  14. AMS1117-5.0-ASEMI低压差线性稳压IC详细解析
  15. linux 安装 迅雷
  16. 计算机word图标不显示,win7系统中Word文档图标无法正常显示的解决方法
  17. 教师继续教育 计算机知识,教师继续教育管理制度
  18. Python计算身体质量指数BMI
  19. 力扣随机数randX——透过现象看本质之二元独立随机分布
  20. 完全用GNU/Linux工作,摈弃Windows---你我共勉 (转)

热门文章

  1. spring配置bean
  2. bzoj3238 [ AHOI2013 ] --后缀自动机
  3. 上海高中计算机知识点总结,上海高中高考数学知识点总结(大全)
  4. RN:React Native原理以及新架构JSI、Fabric等概念
  5. YepEda Allegro Skill学习版
  6. 如何查看win10专业版是否永久激活
  7. DP问题之01背包如此简单
  8. python坐标轴刻度设置_Python Matplotlib 设置x/y坐标轴刻度
  9. 查询分析器里查看执行计划
  10. js复制文本(带文本格式or不带文本格式)