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
淘宝的间隔时是毫秒级,比原生的敏感度更高。