Nginx实战|Nginx健康检查
来自:NingG 个人博客
链接:https://ningg.top/nginx-series-health-check/
0. 背景
服务治理的一个重要任务是感知服务节点变更,完成服务自动注册及异常节点的自动摘除。这就需要服务治理平台能够:及时、准确的感知service节点的健康状况。
1、方案概述
Nginx 提供了三种HTTP服务健康检查方案供用户选择:
1、TCP层默认检查方案:
定时与后端服务建立一条tcp连接,链接建立成功则认为服务节点是健康的。
2、HTTP层默认检查方案:
TCP层检查有一定的局限性:
很多HTTP服务是带状态的,端口处于listen状态并不能代表服务已经完成预热;
不能真实反映服务内部处理逻辑是否产生拥堵。
这时可以选择http层健康检查,会向服务发送一个http请求GET / HTTP/1.0\r\n\r\n,返回状态是2xx或3xx时认为后端服务正常。
自定义方案:
可根据下文描述自定义检查方案。
2、配置参数详解
一个常用的健康检查配置如下:
check fall=3 interval=3000 rise=2 timeout=2000 type=http;
check_http_expect_alive http_2xx http_3xx ;
check_http_send "GET /checkAlive HTTP/1.0\r\n\r\n" ;
下面针对每个配置参数,进行详细介绍。
2.1 check:
check 字段参数如下:
Syntax: check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]
Default: 如果没有配置参数,默认值是:interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp
check 字段各个参数含义如下:
- interval:
向后端发送的健康检查包的间隔。 - fall(fall_count): 如果连续失败次数达到fall_count,服务器就被认为是down。
- rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。
- timeout: 后端健康请求的超时时间。
- default_down: 设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。
默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。 - type: 健康检查包的类型,现在支持以下多种类型
tcp:
简单的tcp连接,如果连接成功,就说明后端正常。
ssl_hello:
发送一个初始的SSL hello包并接受服务器的SSL hello包。
http:
发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
ajp:
向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
port: 指定后端服务器的检查端口。
可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。
默认是0,表示跟后端server提供真实服务的端口一样。
2.2 check_http_expect_alive:
check_http_expect_alive 指定主动健康检查时HTTP回复的成功状态:
Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]
Default: http_2xx | http_3xx
2.3 check_http_send:
check_http_send 配置http健康检查包发送的请求内容
为了减少传输数据量,推荐采用”HEAD”方法。当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:”HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”。同时,在采用”GET”方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常。
Syntax: check_http_send http_packet
Default: "GET / HTTP/1.0\r\n\r\n"
3、完整示例
完整示例,如下:
http {upstream cluster1 {# simple round-robin
server 192.168.0.1:80;
server 192.168.0.2:80;
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;
}
upstream cluster2 {# simple round-robin
server 192.168.0.3:80;
server 192.168.0.4:80;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_keepalive_requests 100;
check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {listen 80;
location /1 {proxy_pass http://cluster1;
}
location /2 {proxy_pass http://cluster2;
}
location /status {check_status;
access_log off;
allow SOME.IP.ADD.RESS;
deny all;
}
}
}
参考连接
Nginx实战|Nginx健康检查 :https://mp.weixin.qq.com/s/gTxHDk0UaFJTthYX4iYP-Q
Nginx实战|Nginx健康检查相关推荐
- nginx限流健康检查
Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块 serve ...
- Nginx的UDP健康检查
Nginx的UDP健康检查 本章介绍如何为负载平衡的上游服务器组中的UDP服务器配置不同类型的运行状况检查. 先决条件 被动UDP健康检查 主动UDP运行状况检查 微调UDP运行状况检查 " ...
- nginx后端节点健康检查
一.nginx健康检查的三种方式 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)官网地址:http://nginx.org/en/d ...
- consul集群搭建,配合nginx完成服务动态发现和健康检查
1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...
- Nginx的TCP运行时健康检查
Nginx的TCP运行时健康检查 本章介绍如何配置TCP的运行状况检查. 介绍 先决条件 被动TCP运行状况检查 服务器缓慢启动 活动TCP运行状况检查 微调TCP运行状况检查 "匹配&qu ...
- nginx负载均衡之健康检查
严格来说,nginx到目前为止没有针对负载均衡后端节点的健康检测的模块,但是可以通过upstream负载均衡组中的max_fails=number和fail_timeout=time来间接实现,但还是 ...
- apisix健康检查测试
健康检查简介 健康检查的目的是动态地将上游服务器标记为健康或不健康的状态.开启健康检查功能后,当后端某台上游服务器健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的上游服务器上:而当 ...
- 开发shell脚本检查Nginx实战分享
开发shell脚本检查Nginx实战分享 点这里查看视频讲解 一.本脚本实现功能: 1.自动检查Nginx下面的代理节点是否正常 2.通过页面显示状态,有问题的节点给出页面报警及声音报警. 3.增加新 ...
- Nginx的HTTP运行时健康检查
Nginx的HTTP运行时健康检查 本文介绍如何在NGINX Plus和NGINX Open Source中配置和使用HTTP运行状况检查. 介绍 先决条件 被动健康检查 服务器缓慢启动 主动健康检查 ...
最新文章
- 近万个Python开源项目中精选Top34!
- jsp 页面中El表达式失效处理
- xadmin2 django 搭建学生系统 model层
- Zabbix 安装部署
- GPS UTC与北京时间的转换函数
- 慢速HTTP拒绝服务攻击
- C语言试题五十一之已知学生的记录是由学号和学习成绩构成,n名学生的数据已存入s结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。
- Spring Boot开发框架优点诠释
- 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)
- setsockopt()改善程序的健壮性
- Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】...
- jquery10发送ajax,使用jquery发送一个ajax请求
- 网课题库收录API接口以及免费网课查询API接口
- python(模块)xlsxwriter
- ASP.net的简单认识
- 联通混改BATJ悉数入局,拿出数百亿的百度们有什么阳谋?
- 专题7:动态规划 记忆化搜索
- 人人都是产品经理之用Axure制作微信主页原型图
- 基于autojs7的亚丁号点淘辅助
- 新媒体运营:2019年微信改版,裂变增长如何做? 黎想
热门文章
- kafka数据 落盘_终于知道Kafka为什么这么快了!
- 热流体动压润滑matlab_设备润滑知识点(下午见)
- 折线图笔记 -python
- tableau选择计算_举个栗子!Tableau 技巧(100):吸睛又直观的 四瓣花图 怎么实现?...
- Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina 最新安装教程
- Intel的X86芯片段式管理历史起源(CS、DS、ES、SS)——避免产品公司的小九九
- 11gR2 Grid Infrastructure Installation prerequisites On Windows
- kali安装步骤失败 选择并安装软件_7Zip v19.00 软件安装步骤
- 装饰器Decorator(函数的装饰)
- CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本