nginx实现负载均衡方案

本文介绍如何使用Nginx实现负载均衡,包括轮询、加权轮询、ip_hash及第三方模块等方式,并提供了详细的配置示例。

负载均衡

Nginx 不仅可以作为一个 Web 服务器或反向代理服务器,还可以按照权重、轮询、 ip hash、 URL hash 等多种方式实现对后端服务器的负载均衡。本节将对负载均衡实现的原理以及具体配置进行详细讲解。

什么是负载均衡

负载均衡( load balance )就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。下图演示了负载均衡服务器的工作方式 。其中,客户端用户 A和B 同时请求负载均衡服务器,负载均衡服务器 (192. 168. 78. )会根据具体配置进行不同的分配。这里假设用户 A的请求被分配到 Web 服务器 1(192. 168. 78. 128 )中处理,用户 B的请求被分配到另一个闲置的 Web 服务器 2(192. 168. 78. 200 )中处理 。通过负载均衡,可以将一台服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力!

在这里插入图片描述

通过 Nginx 中的 upstream 指令可以实现负载均衡,在该指令中能够配置负载服务器组,目前负载均衡有 4 种典型的配置方式,分别为轮询方式权重方式ip _hash 方式,以及
利用第三 方模块的方式。关于每种配置方式的特点,详见下表
在这里插入图片描述
在upstream 指定的服务器组中,若每个服务器的权重都设置为 1(默认值)时,表示当
前的负载均衡是一般轮询方式。
另外, Nginx 本身不包含第 三方模块的实现方式,如 fair 或者 url_hash 等,在使用前必须
下载对应的 upstream_ fair 模块或安装 hash 软件包,才可以实现第 三方模块提供的负载均
衡配置。

1. 一般轮询负载均衡
外两台用作后端 Web 服务器, IP 分别为 92 168. 78. 128 和 192. 168. 78. 200
在这里插入图片描述
在上述配置中,第 6 行用于指定代理的 URL ,第 10~13 行用于设置负载均衡服务器组。其中, upstream 指令后的 web_server 表示代理的服务器主机名,用于第 6 行的 proxy_pass 指令执行反向代理时使用;第 11~12 行利用 server 指令在 upstream 块中配置了后端web 服务器,这些服务器可以有一个或多个,从而形成负载均衡服务器组。

在浏览器中访问 http//test .ng. test ,第一次访问的结果如第一次访问效果 图所示;刷新一次后,访问结果如第二次访问效果图所示。接着尝试不断刷新,如果测试结果在下面 第一次效果图 和第二次效果图 之间交替,说明负载均衡服务器根据每个请求按照时间顺序逐一分配到 192 168. 78. 128 、192. 168. 78. 200 两台 web 服务器中执行
在这里插入图片描述
上图第一次访问效果
在这里插入图片描述
上图第二次访问效果

2. 加权轮询负载均衡
如果负载均衡服务器组中的服务器硬件配置强弱不 一,则可以通过 weight 数设置权重大小。对于配置较好的服务器 ,可以为其设置成比较高的权值,对于配置较差的服务器,可以为其分配较小的权值。
接下来,为上 小节中配置的服务器组设置权重,实现加权轮询,具体如下
在这里插入图片描述
在上述配置中, weight 参数表示权值,权值越高则被分配到的概率越大 。除此之外,还可以设定每台 Web 服务器在负载均衡调度中的状态,常用的参数说明如下表
在这里插入图片描述
如下图中,设置为 backup 的服务器,只有当其他所有的非 backup 机器出现故障或者忙碌的情况下,才会请求 backup 服务器,因此这台服务器的压力最小,配置情况如下图:
在这里插入图片描述
在上述配置中,第 2~3 行设置了允许请求的最大失败次数和请求失败后暂停服务的时间;第4行设置了 一台备份机器,用于在前面两台 Web 服务器出现故障的情况下,为用户继续提供服务。

3. ip hash 负载均衡
ip_hash 方式的负载均衡,是将每个请求按照访问 IP hash 结果分配,这样就可以便来自同 IP 的客户端用户固定访问一台 Web 服务器,有效地解决了动态网页存在的Session 共享问题 下面将上述负载均衡服务器组的设置修改成如下形式:
在这里插入图片描述
在上述配置中, upstream 模块中的 ip_hash 指令用于标识当前负载均衡的处理方式。其中,对于一个暂时性者机的服务器,可以使用 down 参数标识出来,这样在负载均衡时,就会忽略该服务器的分配,需要注意的是,在使用 ip hash 方式处理负载均衡时, web 服务器在负载均衡列表中的状态不能使用 weight 和 backup 设置。
接着,使用浏览器访问 http: // test.ng. test 进行测试,同时要保证当前 Web 服务器全部正常开启 经过多次刷新后,可发现处理该用户的服务器一 直是 192 168. 78. 128。

值得一提的是,由于 ip_hash 方式为每个用户 IP 绑定 Web 服务器处理,将会导致某些 Web 服务器接收的请求多,某些 Web 服务器接到的请求少,无法保证 Web 服务器的负载均衡 因此,建议只在必要的情况下使用这种方式
  1. 利用第三方模块
    第三方提供的方式有多种,下面以 fair 方式为例,按照 Web 服务器的响应时间实现负载均衡,响应时间短的优先分配 。具体实现步骤如下
    1)备份已安装的 Nginx
    由于使用第三方模块需要重新编译 Nginx ,所以在此之前,需要关闭已经开启的 Nginx进程,对已经安装好的 Nginx 进行备份,便于恢复!
[root@ localhost ~]# cp - r /usr/l cal/nginx /usr/local/nginx_old

2)重新编译安装 Nginx
在开源软件平台 Github 中可以获取 fair 模块 下载 nginx upstream-fair master. zip
模块文件到 root 目录下,然后将其解压并重命名为 nginx-upstream-fair ,具体命令如下。
在这里插入图片描述
接着,进入 Nginx 文件的解压目录,在编译选项中添加对 nginx upstream fair 模块的支
持,具体命令如下。
在这里插入图片描述
上述命令执行后,即可完成 Nginx 和第 方模块 fair 的编译和安装
3)配置 fair 方式的负载均衡
打开新安装的 Nginx 配置文件,在 http 块下实现 fair 方式的负载均衡 具体配置
如下
在这里插入图片描述
在上述配置中,若要负载均衡采用 fair 方式执行,只需在 upstream 服务器列表中添加fair 指令即可

4) 验证测试
为了验证 fair 模块是否能够根据后端服务器的响应时间负载均衡,可以通过 PHP 延长服务器的响应时间。在 Web 服务器 192 168. 78. 128 中配置 PHP 后,按照如下步骤进行
操作。
(1 )在 Web 服务器 192 168. 78 . 128 中,编写 index. php 文件,内容如下

在这里插入图片描述

上述代码中, sleep(10)用于使服务器延迟 10s
(2 )在 Web 服务器 192 168. 78 . 200 中,编写 index php 文件,内容如下

在这里插入图片描述

接下来访问域名为 http: // test. ng. test 的网站 通过反复测试可以看出,按上述配置两次请求为 个循环,在每次循环过程中,响应快的服务器 192. 168. 78. 200 都会优先分配,接着才会分配到响应速度较慢的服务器 192 168. 78. 128 这里为了方便测试仅设置了两组负载服务器,我们可测试多个负载服务器组,即可以看出此负载均衡方式的优点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值