六、nginx负载均衡

负载均衡:将四层或者七层的请求分配到多台后端的服务器上。

从而分担整个业务的负载。提高系统的稳定性,也可以提高高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务).

负载均衡的算法

round robin 轮询 rr

负载均衡的默认算法,请求轮流分配给后端服务器。

轮询算法适合用于后端处理器能力相近的情况,默认的算法,可以不加。

默认

加权轮询-weight round robin

轮询的升级版,给每个后端服务器赋予不同的权重。

处理能力更强的服务器设置更高的权重,处理能力低的设置低权重。

高峰时间可以通过这个方法进行流量的优化,适用于服务器处理能力差异比较大的情况。

weight=number

ip_Hash

当我们访问后端服务器,根据客户端的IP地址,使用hash算法计算出IP地址的hash值,然后再根据请求发送到相应的后端服务器。

如果客户端访问的ip地址相同,通过hash算法,再一次的请求会分配到上一次访问的服务器,保证会话的稳定。

负载均衡的会话保持------>ip_Hash

会话保持到期之后,会话中断,重新请求会重新计算hash值。

ip_hash;

最小连接数

配合加权轮询一起使用,最小连接数的算法可以将请求发送到当前连接比较少的后端服务器。

这种算法适用后端服务器处理任务耗时不同的情况,可以有效的避免所有的请求集中在处理能力更强的后端服务器上。

least_conn;

weight=number

URL_Hash

根据请求当中url地址来计算hash值,如果客户端请求的url地址相同,客户端的请求会被分配到同一个服务器。

后台服务器的数量发生变化,会影响结果。(这个讨论无意义)

hash_$request_uri consistest;

负载均衡的特点

1、根据算法把请求分配到不同的服务器

2、客户端访问的是代理地址,响应也是代理服务器响应。

3、客户端并不了解后端服务器的情况

4、可以提高安全性,后端服务器是隐藏的。

5、负载均衡是有缓存的,可以直接访问缓存,提高响应的速度。

负载均衡的架构

我们做个实验,三台主机,具体配置如下:

zw4:192.168.254.14(代理服务器)

zw5:192.168.254.15(后端)

zw6:192.168.254.16(后端)

客户端:浏览器

配置流量分发,主要是依靠服务器完成的,主要配置在代理服务器完成配置算法。

七层代理

upstream:模块仅支持http协议,用来处理http的请求和响应。

upstream只能写在http模块当中,不能在server也不能在全局。

基于IP的七层

轮询

配置完之后,我们访问主机(192.168.254.14)的nginx,会发现轮流访问的是设定的2台服务器的nginx,并且状态码为200,表示没有缓存。

加权轮询

这时候权重高的服务器被访问的次数多一点,状态码依然为200,没有缓存。

ip_hash

这时候第一次会根据hash算法匹配到一台服务器,之后再访问都是他了,并且状态码为304,表示访问缓存,这是根据IP地址的hash缓存,也是会话保持。

最小连接数配合轮询

这时候和轮询没什么区别,这是因为不好演示最小连接数,状态码依然为200。

URL_hash

这时候第一次会根据算法匹配到一台服务器,之后再访问都是他了,并且状态码为304表示缓存。注意:这里的缓存是url缓存,url地址不变才导致的访问服务器不变,并不是真正的会话保持。

最后我们停掉192.168.254.15的nginx后,会发现负载均衡依然再正常运行,并且只能访问192.168.254.16的nginx,证明了高可用。

基于域名的七层

基于域名的七层代理

首先配置代理服务器zw4的nginx主配置文件

注意:1、如果使用域名才做七层,需要把客户端访问的真实IP地址传递给服务端

2、如果经过代理,所有经过的代理地址也要传递给服务端

接着三台主机都配置域名解析,记得也要修改另外两台后端(zw5和zw6)的nginx上的localhost。

这时候我们发现负载均衡已正常工作,当然也是默认的轮询算法。

四层代理

stream:模块不支持http协议,仅支持tcp和udp,处理数据包流量分发。

四层代理只能写在全局模块当中。

根据上面的实验我们依然在代理服务器zw4上配置nginx的主配置文件,注意server中的端口号不能和下面http模块中server的端口号一样,所有这里我们随便定了个81。

重启nginx后,我们发现负载均衡的算法依然是轮询。

注意:

四层算法默认是轮询,也支持加权轮询和最小连接数支持。

ip_hash和uri_hash,不能在四层算法中使用,因为四层不能处理响应。

相关推荐
DachuiLi2 小时前
What is load balancing? 什么是负载均衡?
负载均衡
学海无涯码代码3 小时前
2024年最新 Docker 安装 Nginx 容器 (完整详细版) 2025年最新
java·nginx·docker
ladymorgana6 小时前
【日常笔记】nginx端口转发到其他ip:端口
笔记·tcp/ip·nginx
2401_871213307 小时前
负载均衡和tomcat
服务器·前端·nginx
π大星星️9 小时前
nginx编译安装
linux·运维·笔记·nginx
m0_7482571818 小时前
海康威视摄像头RTSP使用nginx推流到服务器直播教程
运维·服务器·nginx
智慧源点1 天前
阿里云负载均衡SLB实践
服务器·阿里云·负载均衡
寰梦1 天前
Docker(Nginx) 部署 uniapp
nginx·docker·uni-app
前端康师傅1 天前
前端开发使用nginx做web服务
nginx