Nginx负载均衡配置一台服务器宕机或异常能正常访问其它服务器
在前端服务去访问后端服务的时候,可能后端访问有多台服务器在运行,前端需要根据当前的服务器情况去自动选择访问后端的其中一台服务器的服务。此时我们就需要使用到NGINX的负载均衡技术实现,众所周知upstream
主要是配置均衡池和调度方法,proxy_pass
主要是配置代理服务器ip或服务器组的名字。
下面我们看一下具体的配置:
主文件:
1 | server { |
upstream文件:
1 | upstream testService{ |
首先,upstream只配置了server1服务,test.com可以正常访问;然后server1服务关闭,再启动server2服务,且upstream只配置了server2,test.com可以正常访问。
最后给upstream配置了两个server(如上),server1服务关闭,server2服务启动,发现test.com访问失败。
解决方法:
在配置中增加proxy_connect_timeout
配置:
1 | server { |
proxy_connect_timeout
默认的超时时间是60s,所以在做负载均衡的时候,要合理设置这个值。
总结:nginx负载均衡的五种分配策略,避免后端服务器宕机造成网站不能访问
nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
1 | upstream backserver { |
2、指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
1 | upstream backserver { |
3、IP绑定ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
1 | upstream backserver { |
4、fair(第三方的插件:nginx-upstream-fair)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1 | upstream backserver { |
5、url_hash(第三方的插件:nginx_upstream_hash)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
1 | upstream backserver { |
在需要使用负载均衡的server中增加proxy_pass http://backserver/
1 | upstream backserver{ |
max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间