nginx下后端realserver健康检测模块ngx_http_upstream_check_module

想用Nginx或者Tengine替代LVS,即能做七层的负载均衡,又能做监控状态检测,一旦发现后面的realserver挂了就自动剔除,恢复后自动加入服务池里,可以用Tengine的ngx_http_upstream_check_module模块。本文主要介绍在工作中,搭建遇到问题及处理方法,便以后查询。

首先,我们大多数站点都是nginx+tomcat这个比较常见模式,其实nginx本身也有自己的健康检测模块,本人觉得不好用,故使用ngx_http_upstream_check_module。

nginx版本:1.8.0

tomcat: 1.6

因之前已经安装了nginx,所以要增加此模块,需要给nginx打补丁:

1、下载模块

#cd /usr/local/src

#wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz

#tar zxvf v0.3.0.tar.gz

#mv nginx_upstream_check_module-0.3.0 nginx_upstream_check_module

2、为nginx打补丁

#cd /opt/software/nginx-1.8.0

#patch -p1 < /opt/software/nginx_upstream_check_module/check_1.7.2+.patch

#./configure --user=www --group=www --add-module=/opt/software/ngx_devel_kit --add-module=/opt/software/lua-nginx-module --prefix=/opt/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-pcre=/opt/software/pcre-8.36 --with-zlib=/opt/software/zlib-1.2.8 --with-openssl=/opt/software/openssl-1.0.1p --with-google_perftools_module --add-module=/usr/local/src/ModSecurity/nginx/modsecurity/ --add-module=/opt/software/nginx_upstream_check_module/

#make (备注:此编译要和之前一样)

#mv /opt/nginx/sbin/nginx /opt/nginx/sbin/nginx.old

#cp ./objs/nginx /opt/nginx/sbin/

#/opt/nginx/sbin/nginx -t(检查是否有问题)

#kill -USR2 `cat /var/run/nginx.pid`

3、在nginx.conf配置文件里upstream中加入健康检测

upstream www {

server 10.1.1.22:38080;

server 10.1.1.22:38081;

check interval=3000 rise=2 fall=5 timeout=1000 type=http;

check_http_send "GET / HTTP/1.1\r\nHost: www.baidu.cn\r\n\r\n";

check interval 指令可以打开后端服务器的健康检查功能。

指令后面的参数意义是:

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: 指定后端服务器的检查端口。

check_http_send 指令

该指令可以让负载均衡器模拟向后端realserver发送,监控检测的http包,模拟LVS的检测。

check_http_expect_alive 指令

check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]

返回指定HTTP code,符合预期就算检测成功

realserver配置

location = /status.html {

proxy_pass http://www;

access_log logs/access.log main;

}

后端realserver配置,只需要保证 curl http://realserver/status.html 能访问到即可。

测试

移除realserver的status.html即可模拟服务不可用,负载均衡器会在N次检测后发现realserver不服务,error_log里会打印。移回status.html即立马恢复服务。

时间: 2024-12-10 14:53:49

nginx下后端realserver健康检测模块ngx_http_upstream_check_module的相关文章

nginx下后端节点realserverweb健康检测模块ngx_http_upstream_check_module

本文章收录做资料使用,非本人原创,特此说明. 公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx

nginx实现反向代理+健康检测

说明 tengine官方说明文档 nginx 对于后端RS的检查机制不完善所有用Tengine进行反向代理12 一.反向代理 1.定义后端real-server(在http段) upstream static_server { server 192.168.17.175:80 weight=5; server 192.168.17.176:80 weight=3; } upstream basic_server { server 192.168.17.175:80 weight=2; serve

分析shell实现nginx反向代理后端realserver健康检查

今天阅读老男孩教育博客http://oldboy.blog.51cto.com/ 中一篇关于shell实现nginx反向代理后端realserver健康检查的文章,根据其中一个学员朋友的思路自己写了一个脚本. 一.nginx.conf部分内容如下:     upstream rs_pools {     server 10.0.0.8:80 weight=5;     server 10.0.0.9:80 weight=5;     server 10.0.0.10:80 weight=5;  

[nginx] nginx源码分析--健康检查模块锁分析

健康检查模块 见前文:[nginx] nginx源码分析--健康检查模块 其中有一张框架图, 接下来的内容,将会利用到这个图中的内容. [classic_tong @ https:////www.cnblogs.com/hugetong/p/12274125.html ]  描述 我们知道nginx是多进程的,每个进程都保存了相同的配置.但是实际上, 并不需要每一个进程对每一个后端服务器进行. 于是健康检查模块在这里需要一个进程间同步机制,用来协商哪一个进程对 哪一个后端服务器进行检查. 接下来

【转】nginx 主动式后端服务器健康检查

原文链接  http://tengine.taobao.org/document_cn/http_upstream_check_cn.html ngx_http_upstream_check_module 该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_upstream_check_module Examples http { upstream

利用ldirectord实现lvs后端realserver健康状态检查

ldirectord用来实现LVS负载均衡资源在主.备节点间的故障转移.在首次启动时,ldirectord可以自动创建IPVS表.此外,它还可以监控各RealServer的运行状态,一旦发现某RealServer运行异常时,还可以将其从IPVS表中移除. ldirectord进程通过向RealServer的RIP发送资源访问请求并通过由RealServer返回的响应信息来确定RealServer的运行状态.在Director上,每一个VIP需要一个单独的ldirectord进程.如果RealSe

nginx负载均衡第三方健康监测模块

1.查看nginx当前版本 [[email protected] nginx]# nginx -v nginx version: nginx/1.16.1 安装依赖: [[email protected] nginx]# yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel pcre-devel patch 下载第三方健康监测模块 [[email protected] ~]# wget http://nginx.org/downloa

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)     官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx_upstream_check_mod

Nginx实战系列之功能篇----后端节点健康检查(转)

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址:http://nginx.org/cn/docs/http/ng ... proxy_next_upstream2.nginx_upstream_check_module模块    官网网址:https: