【实战】Nginx反向代理带你玩转负载均衡!

  概念说明

  什么是负载均衡

  负载均衡(Load Balance):这里的含义是指通过一定的算法将请求进行分发到不同的应用服务器上,以减少单台服务器的压力。

  为什么要使用负载均衡

  Nginx可以使用反向代理服务器,将请求代理到目标服务端,目标服务端仅仅是单台服务器,该服务器独自默默承受了所有的压力。

  反向代理如图所示:

  Description

  随着业务的不断发展,单台服务器势必无法支持业务带来的负载,单台服务器水平扩展为多台服务器集群。因此,Nginx在反向代理的基础上,添加了 模块,在反向代理的同时,能够根据一定的负载均衡算法就请求分发到集群中的不同服务器。

  负载均衡如图所示:

  Description

  功能介绍

  Nginx负载均衡的详细介绍: 轮询(Round Robin)算法:这是Nginx默认的负载均衡算法。它按照后端服务器定义的顺序逐一分发请求,每个请求都会依次发送到不同的后端服务器上。这种算法适用于后端服务器具有相同的处理能力和状态时。 IP哈希(IP Hash)算法:根据客户端的IP地址进行哈希计算,并将相同IP的请求发送到同一个后端服务器。这可以确保同一个客户端的所有请求都被发送到相同的后端服务器,适用于需要保持会话一致性的场景。 最少连接数(Least Connections)算法:该算法会优先将请求发送到当前连接数最少的后端服务器上。这样可以实现动态负载均衡,将请求分发给负载较小的服务器,从而提高整体性能和响应速度。 加权轮询(Weighted Round Robin)算法:通过为每个后端服务器设置不同的权重值,来实现按比例分配负载的效果。具有较高权重值的服务器将接收到更多的请求。 加权最少连接数(Weighted Least Connections)算法:类似于最少连接数算法,但是根据后端服务器的权重值进行计算,在选择处理连接数最少的服务器时,会考虑各个服务器的权重。

  配置Nginx实现负载均衡的关键在于使用 块定义后端服务器,并使用 指令将请求转发到后端服务器。以下是一个示例配置:

  上述配置中, 块定义了三个后端服务器, 块中使用 指令将请求转发到名为 的后端服务器组。Nginx会根据所选的负载均衡算法将请求分发到后端服务器。

  通过使用Nginx的负载均衡功能,可以提高系统的性能、吞吐量和可靠性,同时实现请求的分发和故障容错。配置和调整负载均衡算法可以根据实际需求和场景来选择,以达到最佳的负载均衡效果。

  下面我们使用轮询算法来实验具体实现

  以下实验是在云端源想IT一站式智能学习+工具服务平台上进行,点击查看实验具体操作,进行练习

  拖建环境

  从左侧设备列表左键按住拖建两台后端服务器、一台反向代理服务器和一台客户端

  Description

  环境系统为 系统

  下面开始介绍部署的具体实现步骤

  后端服务器

  因为后端服务器1和2作为访问时测试使用,区别只在于展示时文本信息不同,其配置文档两个都是相同的

  搭建一个 nginx静态web服务器 作为后端服务器

  1.启动服务器并进入终端操作

  右键点击服务器-选择启动服务

  Description

  启动后,右键点击服务器-选择打开终端,进入服务器的控制终端

  Description

  终端界面,可点击全屏展示

  2.安装Nginx

  终端内(可全屏操作)

  更新本地软件包列表

  使用命令安装Nginx

  出现需确认才可继续执行时 输入 Y 继续执行

  使用查看命令查看Nginx是否安装成功

  出现Nginx的版本 说明安装成功

  3.配置Nginx

  我们选择将自己的配置文件放在 路径下,进入 路径目录,并创建配置文件

  我们需要的 配置内容为下面代码块内容:

  配置文件内容,我们需要首先获取知道自己的IP地址,将其用作 获取服务器IP地址

  Description

  该命令会输出容器内默认网卡 网卡的信息。 我们在 后找到IP地址。

  或者查看设备名称下已显示IP地址找到IP地址后,查看并编辑配置文件

  正确输入上述 块内内容,并确保 对应地址正确

  Description

  保存并关闭注意事项:由于Nginx版本的问题,有时候客户端通过负载均衡服务器访问后端服务器时无法找到配置的 root 根目录,此时我们需要修改Nginx 默认文件内的 root 根目录路径与上述配置文件内 root 根目录路径一致,具体操作如下

  进入 目录,然后修改 默认配置文件中的 root 根目录

  Description

  Description

  4.创建指定Nginx服务器根目录

  创建根目录

  进入 目录,并在其下用 创建我们的根目录,可使用 命令查看是否正确创建

  在根目录下,创建一个静态web文件

  Description

  编辑文件

  文件内容为:

  保存并退出,可使用 查看内容是否正确保存

  在 内修改 内容为 至此,我们做好了nginx静态web服务器的配置文件,下面来启动Nginx服务并校验配置是否正确生效

  5.启动Nginx

  启动Nginx服务后再查看Nginx服务状态是否正常启动并正在运行

  image

  Nginx服务已经正常启动了

  至此 后端Nginx服务器及其配置已全部完成,下面我们来安装配置 Nginx 反向代理服务器作为负载均衡服务器

  反向代理服务器

  安装并配置 Nginx 反向代理服务器作为负载均衡服务器

  1.启动服务器2并进入终端操作

  右键点击反向代理服务器-选择启动服务 启动后,右键点击反向代理服务器-选择打开终端,进入服务器的控制终端 终端界面,可点击全屏展示

  2.安装Nginx

  终端内(可全屏操作)

  更新本地软件包列表

  使用命令安装Nginx

  出现需确认才可继续执行时 输入 Y 继续执行

  使用查看命令查看Nginx是否安装成功

  出现Nginx的版本 说明安装成功

  3.配置Nginx

  我们选择将负载均衡的配置文件放在 路径下,进入 路径目录,并创建配置文件

  我们需要的 配置内容为下面代码块内容:

  配置文件内容,我们需要首先获取知道自己的IP地址,将其用作

  将其配置为 块 名为 ,保持 后名称统一,以做负载均衡访问转发

  块内为 两组后端服务器的IP和端口号获取服务器IP地址及查看后端服务器IP

  Description

  该命令会输出容器内默认网卡 网卡的信息。 我们在 后找到IP地址。

  或者查看设备名称下已显示IP地址找到IP地址后,查看并编辑配置文件

  正确输入上述 块内内容,并确保 对应地址正确,以及正确填写了后端服务器IP及其端口号

  Description

  保存并关闭

  4.启动Nginx

  启动Nginx服务后再查看Nginx服务状态是否正常启动并正在运行

  image

  Nginx服务已经正常启动了

  至此 后端Nginx 负载均衡服务器及其配置已全部完成,下面我们来使用客户端测试其访问是否正常

  客户端:验证访问

  验证客户端上访问负载均衡服务器时的转发情况

  1.启动客户端服务并构建客户端到负载均衡服务器以及负载均衡服务器到后端服务器的访问权限

  右键点击客户端-启动服务,启动客户端服务器 连线:连接一条客户端指向反向代理服务器(负载均衡服务器)的连线以及负载均衡服务器分别到两个后端服务器的连线,以创建访问权限 Description

  2.客户端通过负载均衡服务器IP访问后端服务器上静态文件

  客户端进入终端

  右键点击客户端-打开操作终端使用命令 命令访问服务器上的静态页面

  先安装 命令

  通过负载均衡服务器访问后端服务器内 文件

  Description

  可以看到,我们通过直接访问负载均衡服务器时会按规则转发到后端服务器,因为默认负载均衡规则为轮询,访问时会轮着访问两台后端服务器,返回内容也是两台服务器内容交替显示

  至此,反向代理的轮询访问实验结束

  拓展:负载均衡 upstream 块内 server 指令定义被代理服务器的地址和其他的一些参数

  以上我们测试了负载均衡默认的轮询请求规则,下面来了解其他的一些参数及其具体配置方法:

  所有示例按照上述负载均衡服务器配置来展示没有设置参数,默认为轮询

  weight

  设置被代理服务器的权重,默认值为1。权重值越大,被访问的次数就越多。我们可以根据服务器的处理能力来设置权重值。

  普通轮询

  加权轮询

  max_conns

  限制被代理服务器的最大连接数,默认值为0,也就意味着没有限制。

  max_fails

  设置与被代理服务器通信失败后的最大重试次数,并与 进行配合,认定服务器在该段时间内不可用。默认值为1,如果设置为0,则禁用重试。fail_timeout

  当被代理服务器被认定为不可用时,设置其不可用时间。默认值为10s。

  backup

  将被代理服务器标记为备用服务器。当主服务器不可以用时,备用服务器才会上场。

  该参数不可与hash、ip_hash以及random负载均衡算法一起使用。

  down

  将指定的被代理服务器标记为不可用,不参与负载均衡过程。

  可以使用上述参数在实验里验证。

  跟多负载均衡策略算法等可自行了解后在实验内验证。