nginx利用第三方模块nginx_upstream_check_module来检查后端服务器的健康情况,


大家都知道,前段nginx做反代,如果后端服务器宕掉的话,nginx是不能把这台realserver提出upstream的,所以还会有请求转发到后端的这台realserver上面去,虽然nginx可以在localtion中启用proxy_next_upstream来解决返回给用户的错误页面,方法在:http://www.linuxyan.com/web-server/67.html,大家可以参考一下,但这个还是会把请求转发给这台服务器的,然后再转发给别的服务器,这样就浪费了一次转发,这次借助与淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后方realserver的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器。

下面是nginx打上模块补丁的安装

1、下载 nginx_upstream_check_module模块

cd /usr/local/src
wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
unzip master
ll -d nginx_upstream_check_module-master

2、为nginx打补丁

cd nginx-1.6.0 # 进入nginx的源码目录
patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=/usr/local/src/nginx_upstream_check_module-master/
注意--user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module这一部分是我nginx原来安装好的模块,可以通过./nginx -V查看你自己的ngin安装情况,,复制过来就行了。
--add-module是此次新增的模块
make
注意:make就可以了,不要执行make install
接下来备份一下nginx命令
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-xxx.bak
接下来就是把新编译的nginx命令替换过来,如果nginx服务正在运行,需要先停服务
./nginx -s stop
cp ./objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -t  # 检查下是否有问题
./nginx  #启动nginx

3、在nginx.conf配置文件里面的upstream加入健康检查,如下:

upstream name{
       server 192.168.0.21:80;
       server 192.168.0.22:80;
       check interval=3000 rise=2 fall=5 timeout=1000;
}

上面 配置的意思是,对name这个负载均衡条目中的所有节点,每个3秒检测一次,请求2次正常则标记 realserver状态为up,如果检测 5 次都失败,则标记 realserver的状态为down,超时时间为1秒。

这里列出 nginx_upstream_check_module 模块所支持的指令意思:

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
Context: upstream

在server段里面可以加入查看realserver状态的页面
location /nstatus {
check_status;
access_log off;
#allow SOME.IP.ADD.RESS;
#deny all;
}


这个时候打开nstatus这个页面就可以看到当前realserver的状态了,
如下图:

1.2台realserver都正常的情况下


2.一台realserver故障的情况下



相关内容

    暂无相关文章