1.介绍
Nginx的健康检查是用于确保Nginx后端服务器(upstream servers)保持正常状态的一种机制。在Nginx的配置中,可以定义一组后端服务器,并通过健康检查来确定哪些服务器是可用的,哪些是不可用的。
Nginx 支持两种主要的健康检查模式:主动检查和被动检查。以下是这两种检查模式的详细解释:
-
被动检查(Passive Health Checks):
- 在被动检查模式下,Nginx 并不主动向后端服务器发送检查请求。相反,它通过观察代理请求的实际响应来判断后端服务器的健康状况。
- 当 Nginx 代理一个请求到后端服务器并收到一个错误响应(如 5xx 错误)或请求超时时,Nginx 会将该后端服务器标记为不健康。
- Nginx 会继续监控这个后端服务器的响应,如果在一段时间内(由
fail_timeout
指令配置)该服务器持续返回错误或超时,Nginx 将停止向该服务器发送新的请求。 - 一旦后端服务器恢复健康(即开始返回成功的响应),Nginx 将重新将其纳入负载均衡的考虑范围。
- 被动检查模式适用于对应用程序流量进行监控,特别是当应用程序已经能够处理基本的错误处理和重试逻辑时。
-
主动检查(Active Health Checks):
- 在主动检查模式下,Nginx 会定期向后端服务器发送检查请求(通常称为“探针”或“心跳”),以验证其健康状况。
- 这些检查请求可以是简单的 HTTP GET 请求或其他类型的请求,具体取决于后端服务器的配置和 Nginx 的配置。
- 如果后端服务器在指定的时间内没有响应或返回错误响应,Nginx 将该服务器标记为不健康,并停止向其发送新的请求。
- 与被动检查模式类似,一旦后端服务器恢复健康,Nginx 将重新将其纳入负载均衡的考虑范围。
- 主动检查模式对于关键业务应用程序尤为重要,因为它可以及时发现并避免将请求发送到潜在的不健康服务器。
!!!!! 如果直接使用yum install nginx 的话,默认是没有nginx_upstream_check_module模块的存在的,所有需要我们下载安装包手动安装nginx
2.安装
介绍nginx_upstream_check_module模块针对nginx1.20+
一、nginx下载
nginx下载地址:https://nginx.org/en/download.html
我在这边下载的是稳定版本的 nginx-1.26.0 版本
解压文件夹
tar -zvxf nginx-1.26.0.tar.gz
二、nginx_upstream_check_module 模块下载
github地址: https://github.com/yaoweibin/nginx_upstream_check_module
可以直接通过以下连接下载该模块zip文件
https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
将该文件放入任意的文件中,然后解压
unzip master
在解压的过程中可以看到patch的不同版本,接下来安装 我们使用1.20.1+.patch
二、安装配置
# 以下步骤基于nginx停止或者未安装的情况下
# 安装patch
yum install patch -y
#执行 patch命令 (在上面解压的nginx的源目标下 -- 就是进行nginx的源码文件的第一层)
patch -p1 < /home/nginx_upstream_check_module-master/check_1.20.1+.patch
# /home/nginx_upstream_check_module-master/check_1.20.1+.patch 这个目录是你解压nginx_upstream_check_module模块文件的路径
#安装nginx和配置nginx_upstream_check_module模块
# 进入nginx的安装包目录下 执行
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-threads --with-file-aio --with-http_stub_status_module --add-module=../nginx_upstream_check_module-master/
#然后进行编译和下载
make && make install
–prefix: nginx主目录
–user: nginx启动用户
–group: nginx启动组
–add-module: 添加模块
–with-http_ssl_model: 启动ssl模块
安装完成后,nginx的应该被安装到了我们配置的目录 /usr/local/nginx下,
进入 sbin文件夹下 运行 ./nginx -V 能够看到该模块已经被添加进去了
3.配置
我有两台服务器 ip分别为 192.168.10.21 和192.168.10.23,两台服务器都部署了端口为8080的相同的服务器,分别有两个接口 一个为 /info接口,显示使用的服务的ip地址,另外一个接口是/healthy接口,是用来进行主动安全检查的接口
我在192.168.10.21服务器进行了nginx的配置.相关配置如下
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream approve {
server 192.168.10.21:8080;
server 192.168.10.23:8080;
ip_hash;
check interval=3000 rise=2 fall=5 timeout=5000 type=http;
# 这里面的接口 你可以根据自己的业务接口进行修改,我使用的是/healthy接口
check_http_send "GET /healthy HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
# Nginx会每隔3000毫秒(3秒)向每个服务器发送一个GET请求/healthy接口ip是对应的server后面的ip端口。如果服务器连续两次(rise=2)返回2xx或3xx状态码,那么Nginx就认为这个服务器是健康的。如果服务器连续五次(fall=5)没有响应或者返回非2xx或3xx的状态码,那么Nginx就认为这个服务器是不健康的,会自动将其剔除。
}
server {
listen 80;
server_name localhost;
location /{
proxy_pass http://approve;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
add_header X-Route-Ip $upstream_addr;
add_header X-Route-Status $upstream_status;
}
location /status {
check_status;
access_log off;
}
}
}
#第一次启动 nginx 进入 sbin文件夹下
sudo ./nginx
# 重新加载nginx
# 检查配置文件
sudo ./nginx -t
#重新加载
sudo ./nginx -s reload
如何此时将10.21里面的服务停了,则会使用10.23的服务
这时候的/status状态为:
如何将10.21的服务开启,主动检查到该服务器的服务正常后,就会正常使用该服务器中的服务
参考文档:
Nginx健康检查_22 http upstream check module can not find any che-CSDN博客
nginx安装第三方模块nginx_upstream_check_module_docker nginx checkmodel-CSDN博客