使用 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 服务器之间以轮询方式转发这些请求:
通过这一简单配置,NGINX 会将在 80 端口收到的每个请求依次转发至 web-server1 和 web-server2,并分别建立新的 HTTP 连接。
设置负载均衡方法
默认情况下,NGINX 采用轮询方法在服务器之间均匀地分配流量,并基于分配给每台服务器的可选“权重”来表示其相对容量。
IP 哈希方法根据源 IP 地址的哈希值分配流量。来自同一客户端 IP 地址的请求始终发送到同一上游服务器。这是一种粗略的会话保持方法,每当服务器出现故障或恢复时,或者每当上游组被修改时,它都会被重新计算。对于需要会话保持的场景,NGINX Plus 提供了更好的解决方案。
最少连接方法将每个请求路由到活动连接最少的上游服务器,适用于处理快速且复杂的请求。
所有负载均衡方法均可使用 server 指令中的可选 weight 参数进行调整。当服务器的处理能力不同时,这一调整很有必要。在下面的示例中,NGINX 定向到 web-server2 的请求数是定向到 web-server1 的请求数的四倍:
在 NGINX 中,权重由每个 worker 进程独立管理。NGINX Plus 使用共享内存分段处理上游数据(通过 zone 指令进行配置),因此 worker 之间可以共享权重,而且流量分配也更精确。
故障检测
如果 NGINX 在尝试连接服务器、向服务器发送请求或读取响应头时出现错误或超时,NGINX 便会向另一台服务器重试连接请求。(您可将 proxy_next_upstream 指令添加到配置中,以定义重试请求的其他条件。) 此外,NGINX 还可以将故障服务器从潜在服务器组中移除,并不定期尝试对其发出请求以检测它是否已恢复。server 指令的 max_fails 和 fail_timeout 参数控制这一行为。
NGINX Plus 不仅添加了一组带外健康检查,可对每台上游服务器执行复杂的 HTTP 测试,以确定其是否处于活动状态,而且还采用了一种慢启动机制,能够逐步将恢复的服务器重新引入负载均衡组:
常见问题 — 修复 Host 请求头
通常,上游服务器使用请求中的 Host 请求头来确定要提供的内容。如果服务器意外返回 404 错误或其他任何提示服务器提供错误内容的信息,那么首先要检查该请求头。然后,将 proxy_set_header 指令添加到配置中,为请求头设置相应的值:
使用 NGINX Plus 实现高级负载均衡
NGINX Plus 具有一系列高级功能,是部署在上游服务器群之前的理想负载均衡器:
负载均衡和会话保持 — 对 worker 进程进行更合理的负载均衡并采用会话保持方法,以识别并支持应用会话
HTTP 健康检查和服务器慢启动 — 通过异步“综合事务”探测每台上游服务器的正常运行情况,并在服务器恢复时以优雅的“慢启动”方式重新引入服务器
实时活动监控 — 即时报告活动和性能
动态配置的上游服务器组 — 用于执行一些常见上游管理任务(例如安全地临时移除服务器)的工具
有关高级负载均衡和代理的详细信息,请关注本号并参阅本文的后续文章《使用 NGINX 和 NGINX Plus 实现负载均衡(第 2 部分)》。
NGINX 唯一中文官方社区 ,尽在 nginx.org.cn
版权声明: 本文为 InfoQ 作者【NGINX开源社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/fa9da2079de7f0c888704b216】。文章转载请联系作者。
评论