从零开发短视频电商 Nginx负载均衡配置总结

负载均衡

nginx默认支持四种调度算法

  • 轮询(rr)-默认策略:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器故障,故障系统自动清除,使用户访问不受影响。
  • 轮询权值(weight):weight值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况。
  • ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器,主要解决动态网站session共享的问题。
  • least_conn: 最少链接数,那个机器连接数少就分发。
  • url_hash-第三方:按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率,nginx本身不支持,如果想使用需要安装nginx的hash软件包。
  • fair-第三方:这个算法可以依据页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配,默认不支持,如果想使用需要安装upstream_fail模块。
upstream lakerService#自定义组名 {
    ip_hash; 
    server 192.168.0.1:8080 weight=1 max_fails=3 fail_timeout=15;
    server 192.168.0.1:8081 weight=1 max_fails=3 fail_timeout=15;
    server 192.168.0.1:8082 down;
    server 192.168.0.1:8032 backup;
    server x2.baidu.com;    #可以是域名   
                            #down         不参与负载均衡
                            #weight=5;    权重,越高分配越多,默认为1。  
                            #backup;      预留的备份服务器,其他所有的非backup机器挂了或者忙的时候,才会请求这个backup机器。
                            #max_fails    某台server请求允许失败的次数,默认为1。
										  超过设置次数后,在fail_timeout时间内,新请求不会分配给这机器。
                            #fail_timeout 超过失败次数后,服务暂停时间,默认为10秒。
										  某台server达到max_fails次数后,在fail_timeout时间内,nginx认为这台server不可用,不会转发请求给它。
                            #max_coons    限制分配给某台server最大的接受的连接数,超过设置数量,将不会分配给它新连接,默认为0表示不限制。
                            #根据服务器性能不同,配置适合的参数
    
    #server 106.xx.xx.xxx;        可以是ip
    #server 106.xx.xx.xxx:8080;   可以带端口号
    #server unix:/tmp/xxx;        支出socket方式
}
  • max_fails 允许请求失败的次数,默认是1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。0表示禁止失败尝试,企业场景:2-3次,京东1次,蓝汛10次,根据业务需求去配置。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。京东是3s,蓝汛是3s,根据业务需求配置。常规业务2-3秒合理。

例:如果max_fails是5,他就检测5次,如果五次都是502.那么,他就会根据fail_timeout 的值,等待10秒,再去检测。

整体示例

http {
    # 定义了一个负载均衡池 
    upstream lakerService {
        # 最大失败次数 3 次,超过 3 次失败后,20 秒内不检测。
        server 192.168.10.24:8080 max_fails=1 fail_timeout=5s;
        server 192.168.10.24:8081 max_fails=1 fail_timeout=5s;
    }
    server {
        listen  80;
        location / {
            # 故障转移策略,当后端服务器返回如下错误时,自动负载到后端其余机器
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
            proxy_pass http://lakerService;
        }
    }
}
上一篇:C#中级-Windows Service程序安装注意事项


下一篇:Java集合的快速失败机制 “fail-fast”?