Nginx - 负载均衡(上)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Nginx - 负载均衡(上)

一、前言

前文简单介绍了如何安装Nginx,方法非常简单,操作也非常方便。上文中提到了Nginx可以做http服务器、虚拟主机、负载均衡。在这篇博客中小编就向大家介绍一下如何用Nginx做负载均衡。

二、负载均衡

首先我们得知道什么是负载均衡。

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

负载均衡的核心是:将负载进行平衡。

负载均衡,一般包含两方面的含义。一方面是,将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅提高网络系统的处理能力;第二个方面的含义是,将大量的前端并发访问或数据流量分担到多个后端网络节点上分别处理,这样可以有效减少前端用户等待响应的时间。Web服务器、FTP服务器、企业关键应用服务器等网络应用方面谈到的负载均衡问题,基本隶属于后一方面的含义。因此,Nginx服务器的负载均衡主要是对大量前端访问和流量进行分流,以保证前端用户访问效率。可以说,在绝大多数的Nginx应用中,都会或多或少涉及它的负载均衡服务。

Nginx服务器的负载均衡策略可以划分为两大类:即内置策略和扩展策略。内置策略主要包含轮询、加权轮询和IP hash三种;扩展策略主要通过第三方模块实现,种类比较丰富,常见的有url hash、fair等。

在默认情况下,内置策略会被编译进Nginx内核,使用时只需要在Nginx服务器配置中设置相关参数即可,我们在专门的章节中会详细阐述;扩展策略不会编译进Nginx内核,需要手动将第三方模块编译到Nginx内核。第三方模块的编译技术也留在后文专门讲解。下面简单介绍一下几种负载均衡策略的实现原理。

轮询策略比较简单,就是将每个前端请求按顺序(时间顺序或者排列次序)逐一分配到不同的后端节点上,对于出现问题的后端节点自动排除。加权轮询策略,顾名思义,就是在基本的轮询策略上考虑各后端节点接受请求的权重,指定各后端节点被轮询到的几率。加权轮询策略主要用于后端节点性能不均的情况。根据后端节点性能的实际情况,我们可以在Nginx服务器的配置文件中调整权值,使得整个网络对前端请求达到最佳的响应能力。

IP hash策略,是将前端的访问IP进行hash操作,然后根据hash结果将请求分配给不同的后端节点。事实上,这种策略可以看作是一种特殊的轮询策略。通过Nginx的实现,每个前端访问IP会固定访问一个后端节点。这样做的好处是避免考虑前端用户的session在后端多个节点上共享的问题。

扩展策略中的url hash在形式上和IP hash相近,不同之处在于,IP hash策略是对前端访问IP进行了hash操作,而url hash策略是对前端请求的url进行了hash操作。url hash策略的优点在于,如果后端有缓存服务器,它能够提高缓存效率,同时也解决了session的问题;但其缺点是,如果后端节点出现异常,它不能自动排除该节点。在实际使用过程中笔者发现,后端节点出现异常会导致Nginx服务器返回503错误。

扩展的第三方模块fair则是从另一个角度来实现Nginx服务器负载均衡策略的。该模块将前端请求转发到一个最近负载最小的后台节点。那么,负载最小怎么判断呢?Nginx通过后端节点对请求的响应时间来判断负载情况。响应时间短的节点负载相对就轻。得出判断结果后,Nginx就将前端请求转发到选中的负载最轻的节点。

三、Nginx 负载均衡

对于Nginx来说,他可以把提交的请求进行转发。架构如下:

image.png架构图解释:在这个图中,用户提交请求先到Nginx服务器,然后由Nginx进行对这些请求的转发,转发到各个tomcat服务器上,然后tomcat进行逻辑处理。

而Nginx是如何做的呢?首先Nginx中写入了各个tomcat的服务器的地址,架构师可以根据tomcat的性能,增加对其使用的程度。Nginx只需在nginx.conf中进行配置:

只需要在upostream的server后面添加一个weight,即可代表权重。权重越大,分配请求的数量就越多。不写的时候默认是1。

四、配置流程

1. Nginx的配置

在nginx中配置一个server:使用域名的方式来进行反向代理,这里使用的域名是tomcat.taotao.com,用户可以访问这个域名,先提交到Nginx中。

image.png2. tomcat配置

开启两台tomcat,端口如下:

image.png

Nginx根据proxy_pass来访问的路径来确定访问的server,根据权重自动分配选择的哪一个。权重大的处理的概率高。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
9月前
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
251 4
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
355 59
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
203 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
191 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
256 11
|
8月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
496 5
|
8月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
1857 56
|
12月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
11月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
753 9