Nginx负载均衡(配置文件实现,非实时动态)

Nginx 负载均衡(配置文件实现,非实时动态)

1,概览

负载均衡,就是单个服务无法承受访问压力的时候,通过一个入口把请求分发到不同的实际
处理业务的服务上。

后端业务中,可以用nginx实现上游服务器负载均衡,把请求分发给不同的服务器。也可以实
现下游数据库负载
均衡,比如多台mysql负载均衡,多台redis负载均衡。

总之,负载均衡,就是通过相应的算法把要处理的业务分给某个服务去处理。要点就是一个入
口,多个服务。

nginx已经提供了负载均衡配置项,下面简单总结下

2,实现

在 http 指令下配置 upstream

语法:
    upstream name { ... } 
    默认值: — 
    上下文: http

语法: 
    server address [parameters]; 
    默认值: — 
    上下文: upstream

        parameters详解:
            weight=num        配置权重
            max_fails=number  定Nginx与服务器通信的尝试失败的次数,默认为1
            fail_timeout=time 统计失败尝试次数的时间段,结合max_fails使用,默认10s  
            backup            标记为备用服务器,只有其他服务器出故障,使用此服务器
            down              标记服务器永久不可用

反向代理:
    proxy_pass url/upstreamName;
    上下文:location

    例如:
    server{
        location / {
            proxy_pass http://loadbalanceTest;
        }
    }

    例如:
        http{
            #配置负载均衡服务 weight为权重,不加权重每个服务的权重默认为1
            #8.8.8.x:9001是http服务
            upstream loadbalanceTest {    
                server  8.8.8.3:9001 weight=5;    
                server  8.8.8.4:9001;    
            }

            server{
                #反向代理
                location / {
                    #代理到loadbalanceTest配置中
                    proxy_pass http://loadbalanceTest;
                }
            }
        }

3,nginx负载均衡机制

1,轮询

默认轮询方式,当接收到请求后,轮流分给内部服务器

此种负载均衡算法适合服务器组内部的服务器都具有相同的配置并且平均服务请求 相对均衡的情况

2,加权轮询

需要配置weight参数,然后按照权重轮询

此种负载均衡算法适合给不同性能的服务配置,性能高的服务器可相应权重高一些

3,IP Hash

需要在 upstream 当中配置 ip_hash  

这种方式通过生成请求源IP的哈希值,并通过这个哈希值来找到正确的真实服务器,
不需要考虑session共享

注意:也可以不用ip,用其他变量来做hash映射。需要配置hash $value。其中$value可以
     为请求的某个参数。比如用户id,商品id等等

4,最少连接数

需要在 upstream 当中配置 least_conn 实现最少连接数

不同请求的处理时间肯定不同,如果A服务器有较多连接,而B服务器没有连接的话,
新进来的请求并不是按照轮询分配,而是A达到最大连接数的时候将请求分给B。

4,失败重试

根据上文提到的max_fails=number和fail_timeout=time配合,可以进行失败重试。
假如:max_fails=2,fail_timeout=60 表示失败2次之后,60s内不再重试,标记它为不可用服务器.
过了60s再进行重试。

失败重试详情配置:
    proxy_next_upstream 

    语法: proxy_next_upstream type1|type2……;
        #type:
            error               建立连接,发送请求,接受请求出现错误则重试
            timeout             超时则重试
            invalid_header      header非法则重试
            http_500            返回对应的状态码则重试
            http_502
            http_503 
            http_504 
            http_404 
             off ...;           停止发送请求

    默认值: proxy_next_upstream error timeout; //默认出错或者超时则重试
    上下文: http, server, location


    重试其他相关配置:

        proxy_next_upstream_tries  number
            #设置重试次数,默认0表示不限制,注意此重试次数指的是所有请求次数
            (包括第一次和之后的重试次数之和)。
        proxy_next_upstream_timeout time
            # 设置重试最大超时时间,默认0表示不限制。即在 
                proxy_next_upstream_timeout 时间内允许 
                proxy_next_upstream_tries 次重试。如果超过了其中一个设置,
                则 Nginx 也会结束重试并返回客户 端响应(可能是错误码)         

        proxy_send_timeout         发送给代理的超时时间
        proxy_read_timeout         和代理服务器连接成功,后端服务器响应超时时间
        proxy_connect_timeout      nginx连接后端服务器超时时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值