Nginx健康检查的安装配置过程

1.介绍

Nginx的健康检查是用于确保Nginx后端服务器(upstream servers)保持正常状态的一种机制。在Nginx的配置中,可以定义一组后端服务器,并通过健康检查来确定哪些服务器是可用的,哪些是不可用的。

Nginx 支持两种主要的健康检查模式:主动检查和被动检查。以下是这两种检查模式的详细解释:

  1. 被动检查(Passive Health Checks)

    • 在被动检查模式下,Nginx 并不主动向后端服务器发送检查请求。相反,它通过观察代理请求的实际响应来判断后端服务器的健康状况。
    • 当 Nginx 代理一个请求到后端服务器并收到一个错误响应(如 5xx 错误)或请求超时时,Nginx 会将该后端服务器标记为不健康。
    • Nginx 会继续监控这个后端服务器的响应,如果在一段时间内(由 fail_timeout 指令配置)该服务器持续返回错误或超时,Nginx 将停止向该服务器发送新的请求。
    • 一旦后端服务器恢复健康(即开始返回成功的响应),Nginx 将重新将其纳入负载均衡的考虑范围。
    • 被动检查模式适用于对应用程序流量进行监控,特别是当应用程序已经能够处理基本的错误处理和重试逻辑时。
  2. 主动检查(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博客

  • 33
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值