Nginx使用nginx_upstream_check_modu

2018-05-18  本文已影响140人  always_in

nginx自带的针对后端节点健康检查的功能比较简单,通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。
举例

upstream name 
{
  server 192.168.57.110:8080 max_fails=1  fail_timeout=10s;
  server 192.168.57.101:8080 max_fails=1  fail_timeout=10s;
}

参数说明:
max_fails=number # 设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。 你可以通过指令proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream来配置什么是失败的尝试。 默认配置时,http_404状态不被认为是失败的尝试。

fail_timeout=time # 设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒。

这种情况Nginx无法主动识别后端节点状态,后端即使有不健康节点, 负载均衡器依然会先把该请求转发给该不健康节点,然后再转发给别的节点,这样就会浪费一次转发,而且自带模块无法做到预警。So 此时使用第三方模块 nginx_upstream_check_module模块

nginx_upstream_check_module模块由淘宝团队开发 淘宝自己的 tengine 上是自带了该模块的,大家可以访问淘宝tengine的官网来获取该版本的nginx,官方地址:http://tengine.taobao.org/。我们使用的是原生Nginx,采用添加模块的方式

部署流程

   1、下载nginx_upstream_check_module模块
     #进入nginx安装目录
     cd /usr/lcoal/nginx
     #下载nginx_upstream_check_module模块
     wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
     #解压
    unzip master
iage.png
2、为nginx打补丁
cd nginx-1.11.5  # 进入nginx的源码目录
# -p0,是“当前路径”  -p1,是“上一级路径”
patch -p0 < ../nginx_upstream_check_module-master/check_1.11.5+.patch
#nginx -V 可以查看原有配置 输出 ./configure --prefix=/usr/local/nginx
#增加upstream_check模块
./configure --prefix=/usr/local/nginx  --add-module=../nginx_upstream_check_module-master
make
/usr/local/nginx/sbin/nginx -t  # 检查下是否有问题

注意 check版本和Nginx版本要求有限制 1.12以上版本的nginx,补丁为check_1.11.5+.patch 具体参考github https://github.com/yaoweibin/nginx_upstream_check_module

image.png

3.修改配置文件,让nginx_upstream_check_module模块生效

upstream name 
{
      server 192.168.57.207:8090;
      server 192.168.57.85:80;
      check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}

参数解释 
1.  #添加了nginx_upstream_check_module模块之后,该项生效  
2.  #用于检测后方realserver的健康状态,如果后端服务器不可用,则请求不转发到这台服务器。  
3.  #interval:每隔3s检测一次  
4.  #rise:检测次数,如果连续检测2次都成功,那就证明该后端节点正常
5.  #fall:检测次数,如果连续检测5次都失败,那就证明该后端节点不健康  
6.  #timeout:超时时间为1s  
image.png
启动或者重载nginx

输入 /nstatus

image.png

从上图可以看出 现在有两个节点 我们人为把其中57.85节点API关闭,此时状态为down 节点正常时会恢复为正常状态

上一篇下一篇

猜你喜欢

热点阅读