zenith-docs 1.0.0 Help

负载均衡

单台服务器经常会发生性能瓶颈,这时候我们可以利用 Nginx 提供的负载均衡能力对服务器进行横向扩展,然后将流量按照负载算法划分到不同的服务器上去。这篇文档详细描述了如何在 Nginx 中配置负载均衡。

七层负载均衡和四层负载均衡

7 层负载均衡指的是工作在应用层,应用层的负载均衡其实现功能更多,但是相对于4层负载均衡其性能会更弱。四层负载均衡使用 TCP/UDP 协议工作的,在传输层,通过 IP 加上端口的形式实现的。

OSI 模型层级

TCP/IP 模型层级

名称

说明

第七层

应用层

应用层

与用户行为交互

第六层

表示层

定义数据格式以及数据加密

第五层

会话层

创建、管理以及销毁会话

第四层

传输层

传输层

创建、管理请求端到响应端的链接

第三层

网络层

网络层

请求端的 IP 地址

第二层

链路层

数据链路层

提供介质访问与链路管理

第一层

物理层

传输介质和物理媒介

常见的四层负载均衡,有硬件的 F5,软件的 LVS,还有 Haroxy 支持 4 层和 7 层。而新版本(V1.9 以后,之前只支持 HTTP 协议的负载均衡)的 Nginx 也是支持 4 层和 7层负载均衡的。而 Apache 只支持 7 层负载均衡。

另外,也可以根据 DNS 地域负载均衡。它可以根据你的地域来访问就近的服务器。它的优点是将负载均衡的工作交给了 DNS 服务器,根据地域来划分,提升访问访问速度。

配置七层负载均衡

在 Nginx 中配置七层负载均衡并不复杂,首先需要配置 upsteam ,示例配置如下:

upstream <name> { server ip1:port [param=value]; server ip2:port [param=value]; ...... keepalive 32; # 设置保持长连接时间,显著提升吞吐量 }

upstream的一些配置参数如下表所示:

参数

说明

max_conns

设置最大连接数,默认为 0,不设限,限流作用

slow_start

缓慢开始,在设置时间内,将权重从0到指定权重

down

表示该服务器下线

backup

表示该服务器是备份使用,其他服务器宕机才启用

max_fails

最大错误次数,达到后该服务器下线

fail_timeout

设置请求失败后多少秒不再访问该服务器,默认为10秒

weight

设置服务器权重

然后在 server 下的 location 中配置转发:

server { listen 80; server_name localhost; location / { proxy_pass http://<upsteam_name>; proxy_http_version: 1.1; proxy_set_header Connection ""; } }

轮询策略

Nginx 提供了轮询、加权轮询、IP Hash、一致性 Hash、URL Hash、Random 等轮询策略,配置如下:

upstream <name> { # ip_hash; # hash $request_uri; # url hash server ip:port; }

IP hash 是根据hash(ip) % node_count = index 算法来实现的。另外,使用 hash 策略的时候,如果要下线某台服务器,只能标记为 down 不能直接删除。

因为采用 IP Hash 的方式,如果某台服务器下线,会导致所有的取模发生变化,会话和缓存全部丢失。所以可以采用一致性 HASH 算法,减少因为服务器下线或者增加的影响。

4 层负载均衡

Nginx 的开源版本并不直接支持 4 层负载均衡,它主要专注于第 7 层(应用层)的负载均衡,如 HTTP、HTTPS 协议。

但是,通过 Nginx 的 stream 模块,可以实现对 TCP/UDP 等四层协议的代理和简单的负载均衡功能,不过其功能相对有限。

而 Nginx Plus 是 Nginx 官方提供的商业版本,相比开源版本在功能上更加丰富和强大。Nginx Plus 在 4 层负载均衡方面提供了更全面且高级的功能, 比如会话持久化、动态重新配置、主动健康检查等,非常适合对 4 层负载均衡有较高要求的场景。

所以,这里就不详细描述这块内容了。后面会讲解通过 LVS 来实现 4 层负载均衡。

总结

本文详细介绍了使用 Nginx 实现负载均衡的方法。首先指出单台服务器可能面临的性能瓶颈问题,并提出通过 Nginx 的负载均衡功能进行横向扩展的解决方案。 文章分析了七层(应用层)和四层(传输层)负载均衡的差异,指出七层负载均衡功能更全面,但性能略弱于四层负载均衡。文中列举了不同层级的 OSI 模型和 TCP/IP 模型,以及常见的四层负载均衡产品。

接着,文章深入讲解了在 Nginx 中配置七层负载均衡的方法,包括 upstream 配置及其参数的详细说明。需要注意 slow_startbackup 参数在某些 情况下的使用限制。然后,介绍了 server 下的 location 设置,以实现流量转发。

文章还介绍了 Nginx 支持的多种轮询策略,如加权轮询、IP Hash、一致性 Hash、URL Hash 等,并解释了 IP Hash 策略在服务器下线时的处理要求。

最后,文档说明了 Nginx 开源版本不直接支持四层负载均衡,主要聚焦于七层协议,但可以通过 stream 模块实现有限的四层协议负载均衡。 而 Nginx Plus 作为商业版本,提供更加丰富和强大的四层负载均衡功能,适用于更高要求的场景。

Last modified: 06 August 2024