Nginx作为一个负责均衡和方向代理的服务器,已经被广大的互联网从业者们所使用。如图所示:
nginx作为接入层使用nginx的好处是它自带有健康检查模块:ngx_http_upstream_module,可以做到基本的健康检查,配置如下:
upstream backend{
server 127.0.0.1:8020 max_fails=1 fail_timeout=40s;
server 127.0.0.1:8021 max_fails=1 fail_timeout=40s;
}
server {
listen 80;
server_name wz.jxiaolan.com;
location / {
proxy_pass http://backend;
}
}
其中max_fails=1
的意思是设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。
而fail_timeout=40s
是设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒。
所以说nginx的ngx_http_upstream_module实现了一个基础的健康检查功能。这样有一个缺点是,nginx是被动地进行健康检查,也就是当有请求过来时,且请求打到A服务上时才能得知A服务的状态,如果A服务异常还要转发一次,效率受到影响。所以我们要进行主动地健康检查,nignx定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。淘宝有一个开源的实现(https://github.com/yaoweibin/nginx_upstream_check_module)
网友评论