负载均衡概述

1. 负载均衡简介

  • 负载均衡,英文名称为LoadBalance,其含义就是指将负载进行平衡、分摊到多个后端服务器运行,例如Web服务器、核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
  • 这样做的优点就是减少后端单台服务器的压力,将单台服务器索要承受的访问量分给多台,提高项目的可用性。即使挂掉一台后端服务器,也不会影响项目的正常访问。

2. 负载均衡的分类

硬件负载均衡

硬件负载均衡:直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成网络请求转发的任务,独立于操作系统,整体性能高,负载均衡策略多样化,流量管理智能化。

软件负载均衡

软件负载均衡的主流产品有:Nginx、HAProxy、LVS

LVS 可以作为四层负载均衡器。其负载均衡的性能要优于Nginx。

HAProxy可以作为HTTP和TCP负载均衡器。

Nginx、HAProxy 可以作为四层或七层负载均衡器。

负载均衡通信分类

3. 主流负载均衡软件的使用

Nginx

Nginx (engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(文:PaMonep)开发的,第一个公开版本0.1.0发布于2004年10月4日。

以高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。在连接高井发的情况下,Nginx是Apache服务不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应。

Nginx官网提供了三个类型的版本。

Mainline version:Mainline 是Nginx目前主力在做的版本,可以说是开发版。

Stable version:最新稳定版,生产环境上建议使用的版本。

Legacy versions:遗留的老版本的稳定版。

下载地址:http://nginx.org/en/download.html

Nginx支持哪些负载均衡策略?

轮询 权重 ip_hash

负载均衡能实现什么
  • 将多个服务器节点绑定在一起提供统一的服务入口。
  • 故障转移,在意外发生的时候,可以增加一层保险,减少损失。
  • 降低上线运维复杂度,实现平滑上线。

负载均衡就是将请求"均衡"地分配到多台业务节点服务器上。这里的"均衡"是依据实际场景和业务需要而定的。

对于Nginx来说,请求到达Nginx,Nginx作为反向代理服务器,有绝对的决策权,可以按照规则将请求分配给它知道的节点中的一个,通过这种分配,使得所有节点需要处理的请求量处于相对平均的状态,从而实现负载均衡。

Nginx的负载均衡策略
  • round robin(轮询)
  • random(随机)
  • weight(权重)
  • fair(按响应时长,三方插件)
  • url_hash(url的hash值)ip_hash(ip的hash值least_conn(最少连接数)
第一类最佳实现

weight(权重)

random(随机)

最佳实践,其实就是最常见、最普通的默认配置,当然也是在一定程度上最好用的配置。不知道用什么方式的时候,就可以选择用这一类型。

第二类性能优先

weight(权重)

fair(按响应时长,三方插件)

least_conn(最少连接数)

让业务节点中性能更强的机器得到更多请求,这也是一个比较好的分配策略。

什么是性能更好的机器?这个问题也有很多的维度去考量。

从经验或硬件上分为高权重、低权重的机器。

按照节点请求的响应时长来决定是多分配请求,还是少分配请求。

按照保持的连接数。一般来说保持的连接数越多说明处理的任务越多,也是最繁忙的,可以将请求分配给其他机器处理。

第三类保持稳定

ip_hash

url_hash

很多请求都是有状态的,上一次请求到哪个业务节点,这次还要请求到哪台机器。比如常见的session就是这样一种有状态的业务。

这里Nginx提供了按照客户端ip的hash来作为用户的标示分配、url的hash作为分配标示的规则。本质上还是要找到用户的请求中不变的要素,抽离出来,这样就可以进行分配了。

HAProXy

HAProxy是法国开发者威利塔罗(Wily Tareau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。

官网地址:https://www.haproxy.org/

haproxy支持哪些负载均衡策略?

1,roundrobin

2, leastconn

3,source

由Websoft9提供的HAProxy镜像环境,预装了HAProxy 2.4,可在云服务器上一键部署。HAProxy提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,适用于负载特大的web站点。

  • 开源,为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理
  • HAProxy基于TCP和HTTP两种模式,支持丰富的负载均衡算法
  • 支持SSL,可解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
  • 支持HTTP重写与重定向
  • 提供基于Web的信息统计,方便查看健康状态和流量数据
  • Websoft9已经安装好了HAProxy,无任何安装即开即用

是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理

准备环节

在云控制台获取您的服务器公网IP地址

在云控制台安全组中,确保Inbound(入)规则下的TCP:1080端口已经开启

在服务器中查看HAProxy的默认账号和密码

若想用域名访问HAProxy,务必先完成域名五步设置过程

使用手册地址:https://support.websoft9.com/docs/haproxy

LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内存2.6中,它已经成为内核的一部分。

源代码地址:https://github.com/alibaba/LVS

Lvs实现负载均衡(以NAT模式为例)
Lvs支持哪些负载均衡策略?

1、rr轮询 2、wrr加权轮询 3、lc最小连接

客户请发送向负载均衡服务器发送请求。负载均衡器接受客户的请求,然后先是根据LVS的调度算法(8种)来决定要将这个请求发送给哪个节点服务器。然后依据自己的工作模式(3种)来看应该如何把这些客户的请求如何发送给节点服务器,节点服务器又应该如何来把响应数据包发回给客户端。

LVS的八种调度算法

LVS的调度算法决定了如何在集群节点之间分布工作负荷。

1)固定调度算法:rr,wrr,dh,sh

2)动态调度算法:wlc,Ic,Iblc,Iblcr

rr:轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况

Wrr:加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

wlc:加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS

dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS

sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS

lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.

lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

相关推荐
:1212 小时前
java面试基础
java·开发语言
代码羊羊2 小时前
Rust泛型编程:从零成本抽象到极致性能
开发语言·windows·rust
小樱花的樱花2 小时前
Linux Shell命令入门
linux·服务器·开发语言
weixin_6682 小时前
云计算与大模型私有化部署详解
人工智能·云计算
沫璃染墨2 小时前
C++ std::list 深度解析:迭代器、splice 核心接口与排序效率全解
开发语言·c++
没有天赋那就反复2 小时前
C++里面引用参数和实参的区别
开发语言·c++·算法
MinterFusion2 小时前
如何使用Qt5在窗口中显示矩形(v0.1.3)(下)
开发语言·qt·编程·明德融创·窗口中绘制矩形
Mr.E52 小时前
odoo18 关闭搜索框点击自动弹出下拉框
开发语言·前端·javascript·odoo·owl·odoo18
xyq20242 小时前
MongoDB GridFS
开发语言