因为使用nginx自带的健康检查模块是被动检查的,即请求到一台服务器上报错500之后,发现有问题再转发到其他服务器,这样就多了一次转发消耗,而且并不能对某个接口进行检查,有些接口是故意报500错误的,这样也转发到了另外一台服务器,所以不合逻辑

在这里,可以使用淘宝团队研发的nginx_upstream_check_module模块对服务器主动健康检查,定时检查某个接口,只要这个接口没有报500,就认为该服务器没有异常

至于安装这个模块,在这里就不多讲了,自行百度一下


接下来重点讲一下用法

upstream test {
# 以下是两个后端服务器节点
server 192.168.0.36:29000;
server 192.168.0.36:28000;
# interval的意思是间隔多久检查一次接口,这里的300000是5分钟,
# rise=3 fall=5的意思是成功3次则认为服务器是正常的,失败5次则认为服务器是有问题的
# timeout=3000 后端健康请求的超时时间
# type=http 健康检查包的类型,这里是http
# check_http_send  指定请求方式,这里是GET请求/server/doc/test/接口
# check_http_expect_alive,该指令指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的。
check interval=300000 rise=3 fall=5 timeout=3000 type=http;
check_http_send "GET /server/doc/test/ HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}


 server {
        listen 8080;
        charset utf-8;
        access_log  /root/log/release_projects_doc/nginx_a.log;
        error_log   /root/log/release_projects_doc/nginx_e.log;
        location / {
            proxy_pass http://test;
            keepalive_timeout 0;
        }
        # 监控模块
        location /status {
            check_status html;
            access_log   off;
            #allow 192.166.62.25;
            #deny all;
        }

}

配完之后重启,然后打开http://ip/status

我们可以看到节点的状态

nginx upstream配置backup nginx upsync module_服务器


附上官方指令用法

http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

下面讲一下双机热备的配置

其实只需要加一个参数backup,下面端口29000就是备用机,28000是主机

upstream test {
# 备机
server 192.168.0.36:29000 backup;
# 主机
server 192.168.0.36:28000;
check interval=300000 rise=3 fall=5 timeout=3000 type=http;
check_http_send "GET /server/doc/test/ HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}

需要注意的是,这里配置的是每5分钟检查一次,要检查3次成功(需要15分钟),nginx才算是服务器正常,失败则是需要25分钟,nginx才算是服务器有问题,在刚开始的时候,我配置了默认就是成功的,这个时候修改代码故意让主机报错,nginx需要25分钟检查之后,才会将服务器列为失败,也就是说这25分钟内,请求还是会到主机上去,需要等到nginx主动检查主机判为失败后,才会将请求转发到备用机上

nginx upstream配置backup nginx upsync module_HTTP_02


这里已经检查了主机有一次报错了

我们可以看到请求还是会被转发到主机上,因为这个时候nginx是认为主机能用的(前面配置了失败5次才算不能用),我们看到以下,请求还是会报错

nginx upstream配置backup nginx upsync module_服务器_03


好了,就说到这里,不需要那么长检查时间的小伙伴可以自行修改一下配置即可