点赞
评论
收藏
分享
举报
使用 NGINX 和 NGINX Plus 实现负载均衡(第 1 部分)
发表于2024-11-05 15:37

浏览 5k

原文作者: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;
        }
    }

    upstream backend {
        server web-server1:80;
        server web-server2:80;
    }
}

通过这一简单配置,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 Plus,请点击此处立即下载 30 天免费试用版。

   


 

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

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

已修改于2024-11-12 11:12
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
335
文章
21
问答
201
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 26.1k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 19.3k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 21.9k