运维开发网

Nginx实现负载均衡的工程实践

运维开发网 https://www.qedev.com 2022-06-23 19:38 出处:网络
在我们实际生产中,一台服务器的处理能力、存储空间是有限的,这时候就需要负载均衡,本文详细的介绍了Nginx实现负载均衡的项目实践,具有一定的参考价值,感兴趣的可以了解一下

在我们实际生产中,一台服务器的处理能力、存储空间是有限的,这时候就需要负载均衡,本文详细的介绍了Nginx实现负载均衡的项目实践,具有一定的参考价值,感兴趣的可以了解一下


一、Nginx介绍

Nginx是一个高性能的Http和反向代理服务器,也是一个IMAP/POP3/SMTP服务器(电子邮件代理)。开发这个产品最早的目的之一就是作为邮件代理服务器。由于其稳定性、丰富的特性集、示例配置文件、低系统资源消耗和高并发性,被广泛应用于各种生产部署中。此外,nginx是基于事件驱动模型(epoll)的I/O多路复用,以异步和非阻塞的方式处理请求。在高连接并发的情况下,Nginx是Apache server的一个很好的替代方案。还有为什么要选择Nginx?


二、Nginx特点高并发、高性能;高可靠(可以7*24小时不间断运行);可扩展性强(高度模块化设计,添加模块平稳);作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接;作为负载均衡服务器:可以进行自定义配置,支持虚拟主机、支持URL重定向、支持网络监控等。Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs少;处理静态文件,索引文件以及自动索引;反向代理加速(无缓存),简单的负载均衡和容错;支持热部署(可在不停止服务器的情况下升级nginx)。

这也是选择Nginx的原因。而且Nginx的功能特点并不仅限于这些。以上只是简单列举了一些常用的功能。


三、Nginx负载均衡

在我们的实际生产中,一台服务器的处理能力和存储空都是有限的,不要试图换一台更强大的服务器。对于大型网站来说,服务器再强大,也无法满足网站不断增长的业务需求。在这种情况下,增加一个服务器来分担原有服务器的访问和存储压力是比较合适的。其实这就是我们所说的负载均衡。Nginx作为一个负载均衡服务器,使用反向代理在后端对多个服务器进行负载均衡。先说Nginx负载均衡策略和负载均衡算法。


3.1 认识 upstream 模块

上游模块是写一组代理服务器地址(即从定义的后端服务器列表中选择一个服务器接受用户的请求),然后配置负载均衡算法。看看负载平衡最基本的例子:

upstream test { server 10.20.151.114:80; server 10.20.151.115:80;}server { .... location / { proxy_pass http://test; --请求转向 test 定义的服务器列表 }


3.2 Nginx负载均衡策略

(1)投票

最基本的配置方式,上面的例子是轮询,这是上游模块默认的负载均衡策略。每个请求将按时间顺序一个接一个地分配给不同的后端服务器。

upstream test { server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2;}

(2)ip哈希

每个请求根据IP访问的哈希结果进行分配,同一个IP客户端访问一个后端服务器。可以保证来自同一个ip的请求发送到固定的机器上,会话问题可以解决。

upstream test { ip_hash; --同一个IP客户端固定访问一个后端服务器 server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2;}

(3)网址散列

根据访问url的散列结果分发请求,以便将每个url定向到同一个后端服务器。一旦资源被缓存,并且请求在这里被接收,就可以从缓存中读取它。

upstream test { hash $request_uri; --实现每个url定向到同一个后端服务器 server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2;}

(4)最小连接

将请求转发到连接较少的后端服务器。轮询算法将请求平均转发给所有后端,使它们的负载大致相同;但是,有些请求需要很长时间,这会导致很高的后端负载。在这种情况下,least_conn可以达到更好的负载均衡效果。

upstream test { least_conn; --把请求转发给连接数较少的后端服务器 server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2;}

(5)重量

权重方法,它根据轮询策略指定轮询的概率。

upstream test { server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2; --轮询的几率相对上一条要大}

(6)公平

该算法可以根据页面大小和加载时间智能均衡负载,即根据后端服务器的响应时间分配请求,优先考虑响应时间短的请求。

upstream test { server 10.20.151.114:80; weight=1; server 10.20.151.115:80; weight=2; fair; --实现响应时间短的优先分配}

Nginx负载平衡配置状态参数

down:表示当前的server暂时不参与负载均衡。backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。fail_timeout:在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。

Nginx可以分为两层、三层、四层、七层进行负载均衡。所谓两层是基于MAC地址的负载均衡,三层是基于IP地址的负载均衡,四层是基于IP+端口的负载均衡,七层是基于URL等应用层信息的负载均衡。由于篇幅较长,这里就不做具体介绍了。有兴趣的可以自己去百度。以七层负载均衡为例。


3.3 Nginx负载均衡实例

准备:准备三台Nginx服务器,一台作为负载均衡服务器,另外两台作为后端服务器。

10.20.151.240代理服务器(负载平衡服务器)

10 . 20 . 151 . 112-服务器1(后端服务器1)

10 . 20 . 151 . 113-服务器2(后端服务器2)

(1)负载均衡服务器配置

vim /etc/nginx/nginx.conf --配置主配置文件vim /etc/nginx/conf.d/test.conf --配置子配置文件



(2)后端服务器配置

vim /usr/local/nginx/conf/nginx.conf --修改配置文件vim /usr/local/nginx/html/index.html --添加测试数据



(3)负载均衡测试

在浏览器端访问http://10.20.151.240/。在实际生产中,这两个页面返回的结果是相同的。这里返回不同的内容来测试效果。为什么刷新后返回不同的结果?那是因为负载均衡的默认均衡策略(或算法)是轮询,所以每次刷新都会从不同的后端服务器返回不同的请求结果,这样会减少单个后端服务器的访问,提高客户端的访问效率,从而达到负载均衡的效果。



当我增加一个重量时


请访问http://10.20.151.240/



加体重和不加体重有什么区别?在实际生产中,我们通常会将配置较高的服务器的权重设置得较高,也就是说当客户端访问时,权重较高的服务器会被多次请求,这样可以减少配置较低的服务器的请求,从而达到更好的负载均衡。

当我添加备份状态参数时


请访问http://10.20.151.240/


此时,我故意停止了第一个后端服务器,继续访问http://10.20.151.240/


当我向这个后端服务器113添加备份时,它将被用作热备用服务器。添加的主要目的是当我的所有其他后端服务器都关闭时,我的热备用服务器可以继续提供相同的服务(注意:在其他后端服务器关闭之前,这个热备用服务器不会工作)。因此,负载均衡不仅可以实现各后端服务器的负载均衡,还可以通过配置相关的过渡参数,保证客户端请求时服务器不会宕机,从而保证后端服务器的稳定性。这里就不演示其他状态参数了(因为都是一样配置的)。


总结

通过以上简单的案例,不难看出负载均衡的重要性。无论大中小企业都会使用负载均衡,尤其是一些大型购物网站。如果不做负载均衡,估计刚上线几分钟,端服务器就被客户端的请求搞瘫痪了。因此,Nginx负载均衡实现了后端服务器平均分担客户端的访问压力。同时借助Nginx的高并发、高性能、高可靠性,为我们的实际生产提供最大化的服务和性能保障。

至此,本文对Nginx负载均衡的项目实践已经介绍到这里。更多Nginx负载均衡的相关内容,请搜索源搜网之前的文章或者继续浏览下面的相关文章。

0

上一篇:

没有了:下一篇

精彩评论

暂无评论...
验证码 换一张
取 消