Nginx 主动检查 被动检查

被动检查

proxy_next_upstream

bash 复制代码
http {
	upstrean httpget {
	//max_fail=5,失败5词,直接下线 down,
	//fail_timeout=10s, 10s之后  重新上线 up
	//fail_timeout=10s,  max_fail=5,5次失败在10s内,下线,
   		server IP:80 max_fails=5 fail_timeout=10s;
   		server IP:90;
   }
	server {
		listen 80;
		server_name:xxxx;
		localion / {
			proxy_next_upstream error timeout;
			proxy_next_upstream_timeout 15s;
			proxy_next_upstream_tries 5;
			proxy_pass http://httpget;
			root html;
		}
	}
}

nginx被动健康检查的缺陷

(1)Nginx只有当有访问时后,才发起对后端节点探测。

(2)如果本次请求中,节点正好出现故障,Nginx依然将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率,因为多了一次转发。

(3)自带模块无法做到预警。

主动检查

下载地址 https://github.com/yaoweibin/nginx_upstream_check_module

raw之后,复制里面的内容,

在nginx中 vim path

在nginx的解压文件的目录下,执行path

path -p1 > /xxx 上面的path路径

./configure --prefixe=/usr/local/nginx --add-module=/xx nginx_upstream_check_module 解压文件

make

make install

指定配置文件启动(如果不用默认的配置文件)

nginx -c /path/to/nginx.conf

nginx主动健康检查

(1)区别于nginx自带的非主动式的心跳检测,淘宝开发的tengine自带了一个提供主动式后端服务器心跳检测模块,若健康检查包类型为http,在开启健康检查功能后,nginx会根据设置的间隔向指定的后端服务器端口发送健康检查包,并根据期望的HTTP回复状态码来判断服务是否健康。

(2)后端真实节点不可用,则请求不会转发到故障节点

(3)故障节点恢复后,请求正常转发

bash 复制代码
  http {
        upstream cluster {
            # simple round-robin
            server 192.168.0.1:80;
            server 192.168.0.2:80;
            check interval=5000 rise=1 fall=3 timeout=4000;
            #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
            #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
            #check_http_send "HEAD / HTTP/1.0\r\n\r\n";
            #check_http_expect_alive http_2xx http_3xx;
        }
        server {
            listen 80;
            location / {
                proxy_pass http://cluster;
            }

            location /status {
                check_status;
                access_log   off;
                #allow SOME.IP.ADD.RESS;
                #deny all;
           }
        }
    }

check功能

interval: 向后端发送的健康检查包的间隔,单位为毫秒

rsie: 如果连续成功次数达到rise_count,服务器就被认为是up

fall: 如果连续失败次数达到fall_count,服务器就被认为是down

timeout: 后端健康请求的超时时间,单位为毫秒

type: 健康检查包的类型,支持tcp、ssl_hello、http、mysql、ajp

用法: check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]

默认值: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp

位置:upstream块

#port: 指定后端服务器的检查端口。你可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一样。

check_http_send 功能

用法:check_http_send "HEAD /ierp/ HTTP/1.0\r\n\r\n"

默认值: "GET / HTTP/1.0\r\n\r\n"

位置:upstream块

说明:http://IP:8080/做健康检测,但有问题的是,我们的服务不一定都是/结尾,有时需要加后缀才能访问到资源。比如,如果不在后端tomcat配置上下文路径那么(test.war)正常访问路径就是http://IP:8080/test,对于非根访问上述配置健康检查就一定都是error状态。

check_http_send字段 HEAD后面的 / 就是路径的配置,与其对应的正确能被识别到的地址为"HEAD /ierp/checkk8shealth HTTP/1.0\r\n\r\n",/后面可以为项目中的某个url只要能请求到就可以

check_http_expect_alive功能:

用法: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]

默认值: http_2xx | http_3xx

位置:upstream块

说明:这些状态码表示上游服务器的http响应是正常的,后端是活的。

check_keepalive_requests功能:

用法: check_keepalive_requests num

默认值: check_keepalive_requests 1

位置:upstream块

说明:该指令指定在一个连接上发送的请求数,默认值1表示nginx在收到请求后肯定会关闭连接。

check_fastcgi_param功能:

用法:check_fastcgi_params parameter value ,如,默认指令是这样的:

check_fastcgi_param "REQUEST_METHOD" "GET";

check_fastcgi_param "REQUEST_URI" "/";

check_fastcgi_param "SCRIPT_FILENAME" "index.php";

位置:upstream块

说明:如果设置检查类型为fastcgi,则检查函数将发送这个fastcgi报头来检查上游服务器。

相关推荐
Chengbei118 分钟前
Redis 图形化综合检测工具:redis_tools_GUI,一键探测 + 利用
数据库·redis·web安全·网络安全·缓存·系统安全
hutengyi19 分钟前
PostgreSQL的备份方式
数据库·postgresql
mldlds1 小时前
MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解
android·数据库·mysql
能不能别报错1 小时前
openclaw-linux部署教程+mimo-v2-pro
linux·运维·服务器
Chengbei111 小时前
若依全漏洞复现:从 SQL 注入到 RCE 一站式实战 复现、利用与防御
数据库·sql·安全·web安全·网络安全·系统安全·安全架构
小江的记录本2 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
小虎卫远程打卡app2 小时前
光通信与视频编码前沿技术综述:从超大容量传输到实时神经网络编码
运维·网络·信息与通信·视频编解码
数据皮皮侠2 小时前
中国城市间地理距离矩阵(2024)
大数据·数据库·人工智能·算法·制造
lars_lhuan2 小时前
从键值数据库到Redis
数据库·redis·缓存