admin 管理员组

文章数量: 887021

RabbitMQ

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资料

.html


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

Keepalived资料

.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 实现负载均衡

资料

.html

本文标签: RabbitMQ