nginx后端节点的健康检查、故障转移

阅读数:148 评论数:0

跳转到新版页面

分类

应用软件

正文

一、nginx相关原生模块

通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点。

1、ngx_http_proxy_module

(1)作用:用于将请求传递到另一台服务。

(2)常用指令

proxy_pass
proxy_cache
proxy_connect_timeout
proxy_read_timeout
proxy_send_timeout
proxy_next_upstream

2、ngx_http_upstream_module

(1)作用:把后端服务器组成服务器组,然后调度。模块用于定义可由proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass指令引用的服务器组。

(2)常用指令

upstream
server
ip_hash

二、默认负载均衡配置

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

默认负载均衡是轮询,还有其他默认参数,如下:

http {
    upstream myapp1 {
        server srv1.example.com weight=1 max_fails=1 fail_timeout=10;
        server srv2.example.com weight=1 max_fails=1 fail_timeout=10;
        server srv3.example.com weight=1 max_fails=1 fail_timeout=10;
    }

    server {
        listen 80;
        proxy_send_timeout=60;
        proxy_connect_timeout=60;
        proxy_read_timeout=60;
        proxy_next_upstream=error timeout;

        location / {
            proxy_pass http://myapp1;
        }
    }
}

1、故障转移

(1)proxy_read_timeout

可以放在http、server、location下,默认是60s,定义从代理服务器读取响应的超时时长。

(2)proxy_connect_timeout

可以放在http、server、location下,默认是60s,定义与代理服务哭喊建立连接的超时。

(3)proxy_send_timeout

可以放在http、server、location下,默认是60s,设置将请求传输到代理服务器的超时。

(4)proxy_next_upstream error | timeout | invalid_header | http_500

可以放在http、server、location下,指定在何种情况下,一个失败的请求应该被发送到下一台后端服务器。

error      和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误
timeout    和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时
invalid_header  后端服务器返回空响应或者非法响应头
http_500   后端服务器返回的响应状态码为500
http_502   后端服务器返回的响应状态码为502
http_503   后端服务器返回的响应状态码为503
http_504   后端服务器返回的响应状态码为504
http_404   后端服务器返回的响应状态码为404
off        停止将请求发送给下一台后端服务器

2、健康检查

(1)语法

server address [参数]

需要写在upstream下

(2)主要参数

max_fails=number, 设定nginx与服务器通信的尝试失败的次数,如果失败的次数达到了此值,nginx就认为服务器不可用。

fail_timeout=time, 在这段时间内,服务器达到指定的尝试次数,服务器就被认为不可用。

三、其它解决方案-Tengine

除了nginx自带的模块外,淘宝技术团队还开源了一个nginx_upstream_check_module。http://tengine.taobao.org/

https://gitcode.net/mirrors/yaoweibin/nginx_upstream_check_module?utm_source=csdn_github_accelerator

淘宝的间隔时是毫秒级,比原生的敏感度更高。

 

 




相关推荐