发布网友 发布时间:2天前
共1个回答
热心网友 时间:2天前
前言
正常情况下,nginx 执行反向代理负载均衡任务时,若后端节点服务器宕机,nginx 默认不自动将该服务器移出负载集群,导致请求仍转发至该服务器,从而影响网站的正常运行。为了避免这一问题,可以采用健康检查机制。
请求转发
简单的解决办法是启用proxy_next_upstream特性,将错误页面返回给用户,但请求仍会被转发,造成额外的开销和性能损耗。
健康检查
为了防止上述问题,可以通过健康检查机制来监控后端节点服务器的状态。主要实现方式有三种,本文采用的是淘宝技术团队开发的nginx_upstream_check_module模块,该模块能够检测后方realserver的健康状态,若服务器不可用,则将其从负载集群中移除,避免请求转发。当服务器恢复正常时,可以重新加入负载集群。
安装Tengine
在CentOS 7.6系统下,通过以下步骤下载、解压、编译并安装Tengine,安装目录默认为/usr/local/nginx。若未集成健康检查模块,可参考淘宝Tengine或自行通过补丁方式添加该模块到nginx中。
配置后台
配置完成后,通过systemctl工具实现nginx的启动、关闭和开机自启。nginx配置文件位于/usr/local/nginx/conf/nginx.conf,配置节点健康检查如下:
配置了两个服务开发端口:server 172.25.234.148:9001 和 server 172.25.234.148:9002。
设置检查间隔、成功和失败阈值、超时时间和请求类型(HTTP)。
配置HTTP健康检查包发送的内容和期望的响应状态码,以减少数据传输量。
定义转发到Upstream的Location配置和访问健康状态页面的Location配置。
重启nginx以应用配置。
注意
在生产环境部署时,应注意以下两点:
1)正确定义type以确保健康检查的准确性。
2)合理设置check_http_send值,根据应用访问方式进行调整,例如使用长连接并添加host定义。
配置Actuator
使用示例仓库ReturnTmp/spring-actuator-demo进行配置,并添加接口以输出服务端口。在项目中集成actuator,通过/actuator/health接口查看健康状态。
打包项目(maven package),将生成的jar包上传至服务器,并在两个窗口分别运行服务(nohup后台运行)。
访问负载均衡集群节点的实时健康状态页面(ip/status)。
集成模块编译安装配置Nginx
完成健康检查与Actuator集成后,即可在生产环境中实现负载均衡功能,确保服务在宕机后自动被移出集群,恢复正常后自动重新加入集群。
本文内容由博客一文多发平台OpenWrite发布。