【实战】Nginx反向代理带你玩转负载均衡! 您所在的位置:网站首页 反向代理实例有哪些 【实战】Nginx反向代理带你玩转负载均衡!

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

2024-04-18 07:25| 来源: 网络整理| 查看: 265

概念说明什么是负载均衡

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

为什么要使用负载均衡

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

反向代理如图所示:

Description

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

负载均衡如图所示:

Description

功能介绍

Nginx负载均衡的详细介绍:

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

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

http { upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } }

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

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

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

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

拖建环境

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

Description

环境系统为 Ubuntu Linux 系统

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

后端服务器

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

搭建一个 nginx静态web服务器 作为后端服务器1.启动服务器并进入终端操作

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

Description

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

Description

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

2.安装Nginx

终端内(可全屏操作)

更新本地软件包列表

apt update

使用命令安装Nginx

apt install nginx

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

Need to get 4032 kB of archives. After this operation, 12.7 MB of additional disk space will be used. Do you want to continue? [Y/n] Y

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

nginx -v

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

nginx version: nginx/1.18.0 (Ubuntu)3.配置Nginx我们选择将自己的配置文件放在 /etc/nginx/conf.d/ 路径下,进入 /etc/nginx/conf.d/ 路径目录,并创建配置文件 backend.confcd /etc/nginx/conf.d/ touch backend.conf我们需要的 server 配置内容为下面代码块内容:server { listen 80; server_name 172.17.0.20; location / { root /usr/local/share/myweb; allow all; } }

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

获取服务器IP地址ip addr show eth0

Description

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

或者查看设备名称下已显示IP地址

找到IP地址后,查看并编辑配置文件 backend.confvim backend.conf正确输入上述 server 块内内容,并确保 server_name 对应地址正确

Description

保存并关闭

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

进入 /etc/nginx/sites-available 目录,然后修改 default 默认配置文件中的 root 根目录

cd /etc/nginx/sites-available vim default

Description

Description

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

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

cd /usr/local/share/ mkdir myweb在根目录下,创建一个静态web文件 backend_server.htmlcd /usr/local/share/myweb/ touch backend_server.html

Description

编辑文件vim backend_server.html文件内容为: Welcome to the Backend Server one !

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

在 后端服务器2 内修改 h1标签 内容为 Welcome to the Backend Server two!

至此,我们做好了nginx静态web服务器的配置文件,下面来启动Nginx服务并校验配置是否正确生效5.启动Nginx启动Nginx服务后再查看Nginx服务状态是否正常启动并正在运行service nginx start service nginx status

image

Nginx服务已经正常启动了

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

反向代理服务器安装并配置 Nginx 反向代理服务器作为负载均衡服务器1.启动服务器2并进入终端操作 右键点击反向代理服务器-选择启动服务 启动后,右键点击反向代理服务器-选择打开终端,进入服务器的控制终端 终端界面,可点击全屏展示 2.安装Nginx

终端内(可全屏操作)

更新本地软件包列表

apt update

使用命令安装Nginx

apt install nginx

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

Need to get 4032 kB of archives. After this operation, 12.7 MB of additional disk space will be used. Do you want to continue? [Y/n] Y

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

nginx -v

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

nginx version: nginx/1.18.0 (Ubuntu)3.配置Nginx我们选择将负载均衡的配置文件放在 /etc/nginx/conf.d/ 路径下,进入 /etc/nginx/conf.d/ 路径目录,并创建配置文件 proxy.confcd /etc/nginx/conf.d/ touch proxy.conf我们需要的 server 配置内容为下面代码块内容:upstream backend { server 172.17.0.20:80; server 172.17.0.21:80; } server { listen 80; server_name 172.17.0.22; location / { proxy_pass http://backend/; } }

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

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

upstream backend 块内为 两组后端服务器的IP和端口号

获取服务器IP地址及查看后端服务器IPip addr show eth0

Description

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

或者查看设备名称下已显示IP地址

找到IP地址后,查看并编辑配置文件 proxy.confvim proxy.conf正确输入上述 server 块内内容,并确保 server_name 对应地址正确,以及正确填写了后端服务器IP及其端口号

Description

保存并关闭

4.启动Nginx启动Nginx服务后再查看Nginx服务状态是否正常启动并正在运行service nginx start service nginx status

image

Nginx服务已经正常启动了

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

客户端:验证访问验证客户端上访问负载均衡服务器时的转发情况1.启动客户端服务并构建客户端到负载均衡服务器以及负载均衡服务器到后端服务器的访问权限 右键点击客户端-启动服务,启动客户端服务器 连线:连接一条客户端指向反向代理服务器(负载均衡服务器)的连线以及负载均衡服务器分别到两个后端服务器的连线,以创建访问权限 Description2.客户端通过负载均衡服务器IP访问后端服务器上静态文件客户端进入终端

右键点击客户端-打开操作终端

使用命令 curl 命令访问服务器上的静态页面

先安装 curl 命令

apt update apt install curl通过负载均衡服务器访问后端服务器内 backend_server.html 文件curl http://172.17.0.22/backend_server.html

Description

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

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

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

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

所有示例按照上述负载均衡服务器配置来展示

没有设置参数,默认为轮询upstream backend { server 172.17.0.20:80; server 172.17.0.21:80; } server { listen 80; server_name 172.17.0.22; location / { proxy_pass http://backend/; } }weight

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

server 172.17.0.20:80 weight=1;

普通轮询

server 172.17.0.20:80 weight=1; server 172.17.0.21:80 weight=1;

加权轮询

server 172.17.0.20:80 weight=1; server 172.17.0.21:80 weight=5;max_conns

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

server 172.17.0.20:80 max_conns=0;max_fails

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

fail_timeout

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

server 172.17.0.20:80 max_fails=3 fail_timeout=10;backup

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

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

server 172.17.0.20:80; server 172.17.0.21:80 backup;down

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

server 172.17.0.20:80; server 172.17.0.21:80 down;

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有