一看就会,使用 nginx 作为 HTTP 负载均衡器
Posted 软件测试呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一看就会,使用 nginx 作为 HTTP 负载均衡器相关的知识,希望对你有一定的参考价值。
1、使用 nginx 作为 HTTP 负载均衡器
一、简介
跨多个应用程序实例的负载均衡是一种常用的技术,用于优化资源利用、最大化吞吐量、减少延迟和确保容错配置。
我们可以使用 nginx 作为一个非常高效的 HTTP 负载均衡器,将流量分配到多个应用服务器上,并通过 nginx 提高 Web 应用程序的性能、可伸缩性和可靠性。
二、负载均衡方法
nginx 支持以下负载均衡机制(或方法):
轮询:对应用服务器的请求以循环方式分发
最少连接:下一个请求被分配给活动连接数最少的服务器
ip 哈希:通过一个哈希函数用于确定下一个请求应该选择哪个服务器(基于客户端的 IP 地址)。
三、缺省负载均衡配置
nginx 最简单的负载平衡配置如下:
http
upstream myapp1
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
server
listen 80;
location /
proxy_pass http://myapp1;
在上面的示例中,同一个应用程序有 3 个实例运行在 srv1-srv3 上。如果没有专门配置负载均衡方式,则默认为轮循方式。所有的请求都被代理到服务器组 myapp1, nginx 应用 HTTP 负载均衡来分配请求。
nginx 中的反向代理实现包括 HTTP、HTTPS、FastCGI、uwsgi、SCGI、Memcached 和 gRPC 的负载均衡。
要为 HTTPS 而不是 HTTP 配置负载平衡,只需使用“https”作为协议。
当为 FastCGI、uwsgi、SCGI、Memcached 或 gRPC 设置负载均衡时,分别使用 fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 和 grpc_pass 指令。
四、最小连接负载均衡
另一个负载平衡原则是连接最少的。在某些请求需要较长时间才能完成的情况下,最小连接允许更公平地控制应用程序实例上的负载。
使用最少连接的负载平衡,nginx 将尝试不让一个繁忙的应用服务器因过多的请求而超载,而是将新的请求分配到一个不那么繁忙的服务器上。
在服务器组配置中加上 least_conn 指令时,nginx 中的最小连接负载均衡被激活:
upstream myapp1
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
五、会话保持
请注意,使用轮循或最少连接的负载平衡,每个后续客户机的请求都可能被分发到不同的服务器。不能保证相同的客户端总是指向相同的服务器。
如果需要将客户机绑定到特定的应用服务器——换句话说,使客户端会话“保持”或“持久”,即始终尝试选择特定的服务器——可以使用 ip-hash 负载均衡机制。
使用 IP -hash,客户端的 IP 地址被用作哈希键,以确定服务器组中应该为客户端的请求选择哪个服务器。此方法可确保来自同一客户机的请求总是被定向到同一服务器,除非该服务器不可用时。
要配置 ip-hash 负载均衡,只需将 ip_hash 指令添加到服务器组配置中:
upstream myapp1
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
六、加权负载均衡
也可以通过使用服务器权重来进一步影响 nginx 的负载均衡算法。
在上面的示例中,没有配置服务器权重,这意味着所有指定的服务器都被视为具有特定负载平衡方法的同等资格。
特别是对于轮询,它还意味着请求在各个服务器上的分布差不多是均等的——前提是有足够的请求,并且请求以统一的方式处理并且足够快地完成。
当为服务器指定了权重参数时,权重将作为负载均衡决策的一部分。
upstream myapp1
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
使用此配置,每 5 个新请求将按如下方式分布到应用程序实例中:3 个请求被定向到 srv1,一个请求被定向到 srv2,另一个请求被定向到 srv3。
在 nginx 的最新版本中,同样可以使用最小连接和 ip 哈希负载平衡的权重。
七、健康检查
nginx 中的反向代理实现包括带内(或被动)服务器健康检查。如果来自特定服务器的响应出现错误,Nginx 会将此服务器标记为失败,在一段时间内,将尽量避免为后续的入站请求选择此服务器。
max_fails 指令设置 在 fail_timeout 期间应该发生的与服务器通信的连续不成功尝试次数 。缺省情况下,max_fails 设置为 1。将其设置为 0 时,将禁用此服务器的健康检查。fail_timeout 参数还定义服务器将被标记为失败的时间。在服务器失败后的 fail_timeout 间隔后,Nginx 将开始优雅地使用客户端请求探测服务器。如果探测成功,服务器将被标记为活动的服务器。
八、延伸阅读
此外,在 nginx 中还有更多的指令和参数来控制服务器的负载平衡,例如proxy_next_upstream、backup、down 和 keepalive。更多信息请查看我们的参考文档。
最后,应用程序负载平衡,应用程序健康检查,活动监控和服务器组的动态重新配置都可以作为我们付费的 NGINX Plus 订阅的一部分。
房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!这是我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。
领取关 w/x/g/z/h:软件测试小dao
自学推荐B站视频:
零基础转行:38天!自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!【自动化测试、性能测试、测试开发】
自动化进阶:2022B站首推超详细python自动化软件测试实战教程,备战金三银四跳槽季,进阶学完暴涨20K
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
以上是关于一看就会,使用 nginx 作为 HTTP 负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章