nginx的nginx_upstream_check_module模块实现反向代理的健康检查

nginx_upstream_check_module

淘宝技术团队开发的 nginx 模块 nginx_upstream_check_module,通过它可以用来检测后端realserver 的健康状态。如果后端realserver 不可用,则所以的请求就不会转发到该节点上。在淘宝自己的 tengine 上是自带了该模块的,大家可以访问淘宝tengine的官网来获取该版本的nginx,官方地址:http://tengine.taobao.org/。
如果我们没有使用淘宝的 tengine 的话,可以通过补丁的方式来添加该模块到我们自己的 nginx 中。我们业务线上就是采用该方式进行添加的。

下面是部署流程!
下载nginx_upstream_check_module模块
1.	[root@localhost ~]# cd /usr/local/src
2.	wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
3.	unzip master
4.	[root@localhost /usr/local/src]# ll -d nginx_upstream_check_module-master
5.	drwxr-xr-x. 6 root root 4096 Dec  1 02:28 nginx_upstream_check_module-master

1.	./configure --user=nginx --group=nginx --prefix=/usr/local/nginx-1.6.0 --with-http_ssl_module --with-openssl=/usr/local/src/openssl-0.9.8q --with-pcre=/usr/local/src/pcre-8.32 --add-module=/usr/local/src/nginx_concat_module/ --add-module=../nginx_upstream_check_module-master/
​

配置说明

 nginx.conf  #配置段
    http {
        upstream cluster {
            # simple round-robin
            server 192.168.0.1:80;
            server 192.168.0.2:80;

            check interval=5000 rise=1 fall=3 timeout=4000;
            #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
            #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
            #check_http_send "HEAD / HTTP/1.0\r\n\r\n";
            #check_http_expect_alive http_2xx http_3xx;
        }

配置中参数的单位说明

syntax: check interval=milliseconds [fall=count] [rise=count]
[timeout=milliseconds] [default_down=true|false]
[type=tcp|http|ssl_hello|mysql|ajp|fastcgi]

默认配置:interval=3000 fall=5 rise=2 timeout=1000 default_down=true type=tcp*
• interval: 检测间隔3秒
• fall: 连续检测失败次数5次时,认定relaserver is down
• rise: 连续检测成功2次时,认定relaserver is up
• timeout: 超时1秒
• default_down: 初始状态为down,只有检测通过后才为up
• type: 检测类型方式 tcp

  1. tcp :tcp 套接字,不建议使用,后端业务未100%启动完成,前端已经放开访问的情况
  2. ssl_hello: 发送hello报文并接收relaserver 返回的hello报文
  3. http: 自定义发送一个请求,判断上游relaserver 接收并处理
  4. mysql: 连接到mysql服务器,判断上游relaserver是否还存在
  5. ajp: 发送AJP Cping数据包,接收并解析AJP Cpong响应以诊断上游relaserver是否还存活(AJP tomcat内置的一种协议)
  6. fastcgi: php程序是否存活
    check_http_send “HEAD / HTTP/1.0\r\n\r\n”;
    check_http_expect_alive http_2xx http_3xx ;
    如果将检查类型设置为http,则可以通过请求指定资源来判断后端relaserver是否error。同时判断后端返回的状态码是否为2xx和3xx,是表示检查通过,否则表示失败。
    示例
    upstream cluster {
    server 192.168.20.12:80;
    server 192.168.20.3:80; #未启动web服务,默认为down

check interval=3000 rise=2 fall=3 timeout=1000 type=http;
check_http_send “GET /index.html HTTP/1.0\r\n\r\n”; #获取后端资源,资源变动后,经历三次检查周期后立即将状态改为down
check_http_expect_alive http_2xx http_3xx ; #check_http_send 返回状态码,2xx和3xx为默认值。

开启nginx_status

server {
        listen 80;
        location / {
            proxy_pass http://cluster;
        }
        location = /status {
            check_status;
            #allow xxx;
            #deny all;
       }
}

你可能感兴趣的:(nginx)