Nginx负载均衡与故障转移实践

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
无影云电脑企业版,8核16GB 120小时 1个月
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
简介: Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。

利用 proxy_pass 可以将请求代理到后端服务器。之前的示例主要针对单台服务器进行配置,然而在实际应用中,我们经常需要将请求分发到多台服务器上来实现负载均衡和故障转移。Nginx 提供了 ngx_http_upstream_module 模块,能够为反向代理提供重要功能,如负载均衡和故障转移。

代理多台服务器

以下是一个简单的配置示例:

http {
    upstream backend {
        server 192.168.0.14;
        server 192.168.0.15;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

指令详解

  • upstream:定义一组 HTTP 服务器,这些服务器可以监听不同的端口,也可以是 TCP 和 UNIX 套接字。可以混合使用不同的端口、 TCP 和 UNIX 套接字。
upstream name {...}
  • server:配置后端服务器,参数可以是不同的 IP 地址、端口号,甚至域名。其参数包括 IP 地址、端口号等。
server address [parameters];

故障转移

当某些后端服务器无法正常响应时,Nginx 提供了一些指令进行故障转移,如 proxy_next_upstream。

  • proxy_next_upstream:定义转发条件,当请求返回 Nginx 时,如果 HTTP 状态满足 proxy_next_upstream 设置的条件,会将请求重新转发到下一台后端服务器。
proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;
  • proxy_next_upstream_tries:定义尝试请求的次数,达到次数上限后停止转发。
proxy_next_upstream_tries number;
  • proxy_next_upstream_timeout:限制尝试请求的超时时间,若设置为 0 表示无超时时间。
proxy_next_upstream_timeout time;

负载均衡

Nginx 不仅支持代理多台后端服务器,还支持各种负载均衡模式,如轮询、权重、IP 哈希等。

  • 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器:

upstream backend {
    server 192.168.0.14;
    server 192.168.0.15;
}
  • weight

指定轮询几率,权重越大,负载的权重就越大:

upstream backend {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
}
  • ip_hash

按访问 IP 的 hash 结果分配,每个访客固定访问一个后端服务器:

upstream backend {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}
  • fair(第三方模块)

按后端服务器的响应时间分配请求,响应时间短的优先分配:

upstream backend {
    server server1.example.com;
    server server2.example.com;
    fair;
}
  • least_conn(第三方模块)

请求分配给连接数较少的后端:

upstream backend {
    server server1.example.com;
    server server2.example.com;
    least_conn;
}
  • url_hash(第三方模块)

按访问 URL 的 hash 结果分配请求,使每个 URL 定向到同一个后端服务器:

upstream backend {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

示例配置

# 定义负载均衡的设备及状态
upstream backend {
    ip_hash;
    server 127.0.0.1:9090 down;
    server 127.0.0.1:8080 weight=2;
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup;
}

# 使用负载均衡的 server 配置
server {
    listen 80;

    location / {
        proxy_pass http://backend;
    }
}

负载均衡设备状态设置

  • down:该服务器暂时不参与负载均衡。
  • weight:权重,默认为1,权重越大,负载的权重就越大。
  • max_fails:允许请求失败的次数,超过最大次数时返回 proxy_next_upstream 模块定义的错误。
  • fail_timeout:max_fails 次失败后暂停的时间。
  • backup:其它所有非 backup 机器 down 或忙时,请求 backup 机器。

通过上述配置和指令,Nginx 可以在多台服务器之间高效地实现负载均衡和故障转移,从而提升系统的可靠性和性能。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
2月前
|
负载均衡 NoSQL Redis
不增加 GPU,首 Token 延迟下降50%|LLM 服务负载均衡的新实践
针对LLM服务的特点,Higress AI网关以插件形式提供了面向LLM服务的负载均衡算法,包括全局最小请求数负载均衡、前缀匹配负载均衡以及GPU感知负载均衡,能够在不增加硬件成本的前提下,提升系统的吞吐能力、降低响应延迟,并实现更公平、高效的任务调度。
|
6月前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
529 76
|
8月前
|
存储 负载均衡 监控
硬件负载均衡设备的常见故障有哪些?
硬件负载均衡设备的常见故障有哪些?
630 142
|
5月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
167 21
|
5月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
151 14
|
5月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
190 11
|
7月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
446 5
|
7月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
302 4
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
下一篇
oss教程