Nginx负载均衡配置

介绍

        早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

        根据上图,将会使用Nginx来实现负载均衡,而Nginx的负载均衡是基于反向代理的,只不过此时所代理的服务器不是一台,而是多台。

接下来跟大家分享一下关于Nginx负载均衡的配置

轮询

Nginx将所有请求均匀的分给集群中的每台服务器。

upstream web_app {
server 192.168.10.2:7001;
server 192.168.10.3:7001;
}

server {
listen 80;
server_name localhost;

location / {
 proxy_pass http://web_app/;
}
}

upstream:定义一个服务集群。upstream定义服务集群时,配置的服务地址只能是 域名+端口 或者 ip+端口,不能带有协议和路径,否则nginx会报 invalid host in upstream这个错误信息。

proxy_pass: 将匹配的请求代理转发到proxy_pass后面配置的服务上,这里因为需要配置负载均衡,所以这里http://后面必须要跟上upstream定义的服务集群。

权重(weight)

upstream test {
server 192.168.10.2:7001 weight=2;
server 192.168.10.3:7001 weight=1;
}

前面两次请求都会转发到192.168.10.2:7001,后面一次请求会转发到192.168.10.3:7001

如果继续请求,依然是前面两次转发到192.168.10.2:7001,后面一次转发到192.168.10.3:7001

ip_hash

根据用户的ip,计算出一个hash值,如果负载均衡缓存中有这个hash对应的服务器,则直接转发到对应的服务器上。

upstream test {
ip_hash;
server 192.168.10.2:7001;
server 192.168.10.3:7001;
}

使用ip_hash策略后,只要用户的电脑ip不发生变化,就会始终请求同一台服务器。

hash

根据请求的uri计算出一个hash值,然后将该请求转发到一台服务器上面,后续请求通过hash计算后,如果有相同的hash,那么就会将该请求转发到该hash对应的服务器上面。

可以进行hash计算的有remote_addr(客户端ip)、request_uri(请求uri)、args(请求参数)。

upstream test {
hash $request_uri;
server 192.168.10.2:7001;
server 192.168.10.3:7001;
}

另外:

如果 request1 命中了 192.168.10.2 服务器,如果 192.168.10.2 服务器宕机,之前通过 request1 计算出来的哈希值与 192.168.10.2 服务器的对应关系会失效,并且 request1 会重新分发给 192.168.10.3 服务器。后续 192.168.10.2 服务器恢复正常后,request1 还是会分配给 192.168.10.3 服务器。

 least_conn

把请求转发给连接数较少的服务器。轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。此负载均衡适合请求处理时间长短不一造成服务器过载的情况。

upstream test {
least_conn;
server 192.168.10.2:7001;
server 192.168.10.3:7001;
}

max_fails

允许服务处理请求时服务出错的次数,默认为1。当服务处理请求发生错误的次数超过max_fails时,后面的请求暂时不会转发到这台发生错误的服务器。

upstream test {
server 192.168.10.2:7001 max_fail=100;
server 192.168.10.3:7001;
}

此时,如果192.168.10.2这台服务器在处理请求时,出现了100次错误,那么后续所有的请求都会被转发到192.168.10.3这台服务器上面。

fail_timeout

如果某个服务处理请求时发生错误的次数超过 max_fails,nginx 将暂时禁止将请求转发到该服务。当达到fail_timeout设置的时间后,nginx会尝试将请求转发到刚才被禁止的服务,如果服务正常,那么后续的请求可以继续转发到这台服务,如果服务错误,那么继续等待fail_timeout时间后再来检测。fail_timeout默认时间是10s。

upstream test {
server 192.168.10.2:7001 max_fail=100 fail_timeout=30s;
server 192.168.10.3:7001;
}

此时,如果192.168.10.2这台服务器在处理请求时,出现了100次错误,那么后续所有的请求都会被转发到192.168.10.3这台服务器上面,当30秒以后,会重新将请求转发到192.168.10.2这台服务器上面,如果192.168.10.2这台服务器处理请求时依然达到了100次错误,将继续被禁止30秒。

down

标识down的服务器暂时不支持被请求。

upstream test {
server 192.168.10.2:7001 down;
server 192.168.10.3:7001;
}

此时,所有请求都会被转发到192.168.10.3这台服务器上面。

backup

备用服务器,当所有非backup服务发生错误被停用或者设置为down时,nginx会启用标识为backup的服务器。

upstream test {
server 192.168.10.2:7001 backup;
server 192.168.10.3:7001;
}

max_conns

单一服务器同时处理请求的个数。

upstream test {
server 192.168.10.2:7001 max_conns=50000;
server 192.168.10.3:7001;
}

  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒秋丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值