Nginx负载均衡实现4层和7层健康检查

上篇中提到对nginx7层(http和https)进行健康检查,使用的是淘宝的模块进行编译https://github.com/yaoweibin/nginx_upstream_check_module
但是此模块只支持nginx7层的健康检查,不支持4层UDP和TCP的健康检查。如果我们需要既支持4层又支持7层的健康检查模块,需要使用由另一位大神修改后的模块https://github.com/zhouchangxun/ngx_healthcheck_module

下面对配置文件中的配置进行解析

user nginx;
events {
  worker_connections 1024;
}
http {
#下边server固定放在nginx配置文件中,主要用来做健康检查
#指定监听的ip   指定健康检查的访问路径和数据的展示格式为json,
#访问curl  127.0.0.1:9997/status   则所有健康检查的数据均能显示。获取数据代码解析json获取所需数据即可
   server {
      listen 127.0.0.1:9997;
      location /status {
     	 healthcheck_status json;
      }
   }
 #正常监听器开始添加
  server {
    listen 192.168.11.2:800;
    server_name test1;
    location /{
      proxy_pass http://test1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }
  upstream test1 {
     server 10.110.29.22:8080 weight=20;
	 server 10.110.28.33:80 weight=20;
	  #interval健康检查检查间隔时间   rise检查成功几次认为后端server状态为up   fall检查失败几次认为后端server状态为down   
	  #timeout超时时间  type检查协议类型(tcp或者http) 
	  #port健康检查的端口,取值从1开始,不配置默认检测后端server本身端口(29.22就检查8080端口,28.33就检查80端口),
	  #规定后所有后端server检查规定的端口(port=8080:29.22和28.33都检查8080端口)
	 check interval=3000 rise=1 fall=3 timeout=4000 type=http port=8080;
	  #此条检查http转发,需要配置的有两个地方
	  #一是转发路径  如果不加配置默认"/"访问根目录下默认的tomcat页面,配置健康检查路径后,按配置路径去访问后端节点是否可用
      #举例说明 登录10.110.29.22节点,在tomcat目录webapps目录下新建目录aa并且放入文件bb.html。这样健康检查时11.110.29.22:8080的状态为up
      #而10.110.28.33:8080的状态就为down,因为无法找到此节点。
      #另一方面是域名的配置,这个对健康检查的结果目前并无影响(具体情况以后补充)。
      #一般这两个方面没有特殊要求默认不做配置即可(check_http_send "HEAD / HTTP/1.0\r\n\r\n";) 
	 check_http_send "HEAD /aa/bb.html HTTP/1.0\r\n\r\nHost:www.baidu.com\r\n\r\n";
	 check_http_expect_alive http_2xx http_3xx;
  }
}
stream{
 server {
    listen 192.168.23.13:88;
    proxy_pass http://test2; 
  }
  upstream test2 {
     server 10.110.29.12:8080 weight=20;
	 server 10.110.28.13:8080 weight=20;
	 check interval=3000 rise=1 fall=3 timeout=4000 type=tcp port=8080;
  }
}

检测后端server‘状态 不指定port默认显示为0
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liucy007/article/details/89188246