Nginx学习——负载均衡

本文介绍了Nginx的两种内置负载均衡策略:加权轮询和IP哈希。加权轮询依据权重选择服务器,权重高的服务器优先被选中,低权重服务器也有机会通过权重增长被选中。IP哈希策略基于客户端IP进行哈希,确保相同IP的请求始终路由到同一台服务器,适用于需要会话持久化的场景。在选择失败时,Nginx会退化为加权轮询策略。
摘要由CSDN通过智能技术生成

负载均衡

Nginx提供了较多的负载均衡策略,包括加权轮询、IP哈希、fair、一致哈希等。前两个是Nginx官方源码内置的策略,而后面几个都是第三方模块,所以下面我们重点来看前两个内置策略。


Nginx默认采用round_robin加权算法,如果要采用IP哈希策略,那么必须在Nginx的配置文件里通过配置指令ip_hash明确指定。


当整个http配置块被Nginx解析完毕之后,会调用各个http模块对应的初始函数。对于模块ngx_http_upstream_module而言,对应的main配置初始函数是ngx_http_upstream_init_main_conf(),在这个函数中有这样一段代码:

for (i = 0; i < umcf->upstreams.nelts; i++) {

        init = uscfp[i]->peer.init_upstream ? uscfp[i]->peer.init_upstream:
                                            ngx_http_upstream_init_round_robin;

        if (init(cf, uscfp[i]) != NGX_OK) {
            return NGX_CONF_ERROR;
        }
}


默认采用加权轮询策略的原因就是在于上述代码中的init赋值一行。如果用户没有做任何策略选择,那么执行的策略初始函数为ngx_http_upstream_init_round_robin,也就是加权轮询策略。否则的话执行的是uscfp[i]->peer.init_upstream指针函数,如果有配置执行ip_hash ,那么就是ngx_http_upstream_init_ip_hash()。

加权轮询

加权轮询,直观上理解就是计算各个后端服务器的当前权值,然后选择得分最高的服务器处理当前请求,Nginx的处理大致如此,但是在具体实现时考虑很多其他细节,比如服务器可能具有不同的权值,某个服务器多次连接失败或处理出错后则在一定时间内不再参与被选择等。

准备工作

使用加权轮询时,upstream上下文内server配置可带的参数中,我们关心的有如下几个:
1.weight:权值,默认值为1,与加权轮询策略配合使用
2. fail_timeout和fail_timeout:他们配合使用,默认值分别为1和10s。具体含义是指,如果某台后段服务器在fail_timeout时间内发生了fail_timeout次连接失败,那么该后端服务器在这fail_timeout时间内就不在参与被选择,知道fail_timeout时间后才重新加入而有机会被选择,其直白意思也就是请先休息一会,然后再来。
3.backup:备机,平常不被选择,只有当其他所有非备机全部不可用时才被使用。值得宕略里,因为他会扰乱哈希的结果而违背ip_hash的初衷。

4.down:即主动表示其未宕机状态,不参与被选择。


需要注意的是,配置文件中出现的参数只能和某些策略配合使用,所以如果发现某参数没有生效,则应该检查这一点。在配置解析的过程中,这些选项设置都被转换为Nginx内对于的变量值,对应的结构体ngx_http_upstream_server_t如下(ngx_http_upstream.h):
typedef str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值