以上有几点需要解释:
- 失败次数中的失败是怎么定义的?
官网解释是指由proxy_next_upstream,fastcgi_next_upstream,uwsgi_next_upstream,scgi_next_upstream,memcached_next_upstream和grpc_next_upstream指令定义,也是前面说的error、time、http_xxx状态码等 。 - 如果mail_fail为0,此时健康检查无效 。因此此时整个nginx,只会由proxy_next_upstream判断,进行相关故障转移 。
- fail_time内的失败检测,超时时间以系统设置为主,效率低,等待超时影响性能;
- 后端一旦有问题,除后端禁用的fail_time时间段,其他时间nginx会把请求转发给不健康节点的,然后再转发给别的服务器,这样以来就浪费了一次转发 。
nginx_upstream_check_module模块借助淘宝技术团队开发的nginx模块nginx_upstream_check_module来检测后方realserver的健康状态,如果后端服务器不可用,则会将其踢出upstream,所有的请求不转发到这台服务器 。当其恢复正常时,将其加入upstream 。
在淘宝自己的tengine上是自带了该模块的,大家可以访问淘宝Tengine官网来获取该版本的nginx,也可以到Gitbub上找到 。如果没有使用淘宝的tengine的话,可以通过补丁的方式来添加该模块到我们自己的nginx 。
- 安装
#打补丁#注意不同版本对应的补丁cd nginx-1.6.0patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.6 --sbin-path=/usr/local/nginx1.6 --conf-path=/usr/local/nginx1.6/nginx.conf --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_sub_module --with-pcre=/usr/local/src/nginx/pcre-8.36 --with-zlib=/usr/local/src/nginx/zlib-1.2.8 --add-module=/usr/local/src/nginx/ngx_cache_purge-2.1 --add-module=/usr/local/src/nginx/headers-more-nginx-module-master --add-module=/usr/local/src/nginx/nginx_upstream_check_module-mastermake#不要执行make install命令cd /usr/local/nginx1.6#备份命令cp nginx nginx.baknginx -s stopcp -r /usr/local/src/nginx/nginx-1.6.0/objs/nginx .- 配置
http {upstream cluster {# simple round-robinserver 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.0rnrn";#check_http_expect_alive http_2xx http_3xx;}server {listen 80;location / {proxy_pass http://cluster;}location /status {check_status;access_logoff;allow SOME.IP.ADD.RESS;deny all;}}}配置详解:【Nginx健康检查模块,生产还能这样配置】
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=tcpContext: upstream 该指令可以打开后端服务器的健康检查功能 。指令后面的参数意义是: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提供真实服务的端口一样 。该选项出现于Tengine-1.4.0 。Syntax: check_keepalive_requests request_numDefault: 1Context: upstream该指令可以配置一个连接发送的请求数,其默认值为1,表示Tengine完成1次请求后即关闭连接 。Syntax: check_http_send http_packetDefault: "GET / HTTP/1.0rnrn"Context: upstream该指令可以配置http健康检查包发送的请求内容 。为了减少传输数据量,推荐采用"HEAD"方法 。当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:"HEAD / HTTP/1.1rnConnection: keep-alivernrn" 。同时,在采用"GET"方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常 。Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]Default: http_2xx | http_3xxContext: upstream该指令指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的 。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4款瘦身食谱+6款减肥茶
- 孕妇眼前发黑快晕倒了
- 昌宁茶品牌持续飘香,南明黔茶飘香品茗健康茶文化活动圆满落幕
- 家庭存茶有诀窍:牢记5大存茶法则,存出健康醇香的好茶
- 如何挑选健康的鸽子
- 天鹏健康医疗大数据及人工智能应用创新平台项目落户重庆|钛快讯
- nginx中加入opentracing能力
- nginx 这一篇就够了
- 普洱茶健康资料盘点,普洱茶健康的好伴侣
- 五六十岁的人,去医院体检时,哪些项目最应该检查?
