写点什么

使用 NGINX 和 NGINX Plus 实现负载均衡(第 1 部分)

  • 2024-11-13
    北京
  • 本文字数:2133 字

    阅读完需:约 7 分钟

使用 NGINX 和 NGINX Plus 实现负载均衡(第 1 部分)

原文作者:Owen Garrett- F5 产品管理高级总监

原文链接:使用 NGINX 和 NGINX Plus 实现负载均衡(第 1 部分)

转载来源:NGINX 中文官网


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn


NGINX 是功能强大的加速代理,适用于众多基于 HTTP 的应用。其缓存、HTTP 连接处理及卸载功能可显著提高应用性能,尤其是在高负载期间。


编者按——NGINX Plus Release 5 及更高版本还可以对基于 TCP 的应用进行负载均衡。Release 6 通过增添健康检查、动态重新配置、SSL 终止等功能,显著扩展了 TCP 负载均衡。在 NGINX Plus Release 7 及更高版本中,TCP 负载均衡器具备与 HTTP 负载均衡器一样的功能。Release 9 中引入了对 UDP 负载均衡的支持。

您可以在 stream 上下文(而非 http 上下文)中配置 TCP 和 UDP 负载均衡。由于 HTTP 和 TCP/UDP 之间的固有差异,可用指令和参数略有不同。


NGINX Plus 扩展了 NGINX 开源版的功能,增加了更多负载均衡的功能:健康检查、会话保持、实时活动监控及负载均衡服务器组的动态配置。


本文将指导您配置 NGINX 以将流量负载均衡到一组 Web 服务器,并重点介绍了 NGINX Plus 的一些其他功能。


欲了解更多相关信息,请关注本号并参阅《NGINX Plus 管理指南》以及本文的后续文章《使用 NGINX 和 NGINX Plus 实现负载均衡(第 2 部分)》。


使用 NGINX 代理流量

首先,我们将流量代理到一对上游 Web 服务器。以下 NGINX 配置可终止所有向 80 端口发出的 HTTP 请求,并在上游组的 Web 服务器之间以轮询方式转发这些请求:

http {
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
复制代码


​​​​​通过这一简单配置,NGINX 会将在 80 端口收到的每个请求依次转发至 web-server1 和 web-server2,并分别建立新的 HTTP 连接。


设置负载均衡方法

默认情况下,NGINX 采用轮询方法在服务器之间均匀地分配流量,并基于分配给每台服务器的可选“权重”来表示其相对容量。


IP 哈希方法根据源 IP 地址的哈希值分配流量。来自同一客户端 IP 地址的请求始终发送到同一上游服务器。这是一种粗略的会话保持方法,每当服务器出现故障或恢复时,或者每当上游组被修改时,它都会被重新计算。对于需要会话保持的场景,NGINX Plus 提供了更好的解决方案。


最少连接方法将每个请求路由到活动连接最少的上游服务器,适用于处理快速且复杂的请求。


所有负载均衡方法均可使用 server 指令中的可选 weight 参数进行调整。当服务器的处理能力不同时,这一调整很有必要。在下面的示例中,NGINX 定向到 web-server2 的请求数是定向到 web-server1 的请求数的四倍:

upstream backend {
    zone backend 64k;
    least_conn;
    server web-server1 weight=1;
    server web-server2 weight=4;
}
复制代码


在 NGINX 中,权重由每个 worker 进程独立管理。NGINX Plus 使用共享内存分段处理上游数据(通过 zone 指令进行配置),因此 worker 之间可以共享权重,而且流量分配也更精确。


故障检测

如果 NGINX 在尝试连接服务器、向服务器发送请求或读取响应头时出现错误或超时,NGINX 便会向另一台服务器重试连接请求。(您可将 proxy_next_upstream 指令添加到配置中,以定义重试请求的其他条件。) 此外,NGINX 还可以将故障服务器从潜在服务器组中移除,并不定期尝试对其发出请求以检测它是否已恢复。server 指令的 max_fails 和 fail_timeout 参数控制这一行为。


NGINX Plus 不仅添加了一组带外健康检查,可对每台上游服务器执行复杂的 HTTP 测试,以确定其是否处于活动状态,而且还采用了一种慢启动机制,能够逐步将恢复的服务器重新引入负载均衡组:

server web-server1 slow_start=30s;
复制代码


常见问题 — 修复 Host 请求头

通常,上游服务器使用请求中的 Host 请求头来确定要提供的内容。如果服务器意外返回 404 错误或其他任何提示服务器提供错误内容的信息,那么首先要检查该请求头。然后,将 proxy_set_header 指令添加到配置中,为请求头设置相应的值:

location / {
    proxy_pass http://backend;
    # Rewrite the 'Host' header to the value in the client request
    # or primary server name
    proxy_set_header Host $host;
    # Alternatively, put the value in the config:
    #proxy_set_header Host www.example.com;
}
复制代码


使用 NGINX Plus 实现高级负载均衡

NGINX Plus 具有一系列高级功能,是部署在上游服务器群之前的理想负载均衡器:

  • 负载均衡和会话保持 — 对 worker 进程进行更合理的负载均衡并采用会话保持方法,以识别并支持应用会话

  • HTTP 健康检查和服务器慢启动 — 通过异步“综合事务”探测每台上游服务器的正常运行情况,并在服务器恢复时以优雅的“慢启动”方式重新引入服务器

  • 实时活动监控 — 即时报告活动和性能

  • 动态配置的上游服务器组 — 用于执行一些常见上游管理任务(例如安全地临时移除服务器)的工具


有关高级负载均衡和代理的详细信息,请关注本号并参阅本文的后续文章《使用 NGINX 和 NGINX Plus 实现负载均衡(第 2 部分)》。


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

发布于: 刚刚阅读数: 5
用户头像

NGINX 唯一中文官方社区 2022-07-04 加入

NGINX 是全世界最流行的 Web 服务器,也可用于反向代理、负载均衡、API 网关等场景的开源软件,为全世界最繁忙的网站和应用提供支持。 微信:#NGINX开源社区

评论

发布
暂无评论
使用 NGINX 和 NGINX Plus 实现负载均衡(第 1 部分)_nginx_NGINX开源社区_InfoQ写作社区