Nginx负载均衡

上一篇我们介绍了nginx的反向代理,本文主要介绍在反向代理基础上的负载均衡。
背景:
随着服务器访问量的不断增大,导致单台机器服务延时不断增大,对服务器的压力也越来越大,为了解决这一问题,我们可以部署多个服务节点,然后使用某种算法是的访问分散到各个节点,大大降低的服务器的压力。
实践:
本文主要介绍nginx的负载均衡及各种算法,不会对代理配置有过多的讲解,不熟悉的可以阅读上一篇文章Nginx反向代理配置解释
本文架构图如下,一台nginx代理服务,被代理服务部署了两个节点(这里是在一个机器上部署的两个服务,端口不同)。
下面我们开始修改nginx的配置文件,如下

http {   
  upstream back {      
   server 192.168.121.139:8080;   
   server 192.168.121.139:8081;
   }   
   server {  
     listen       8088;
     server_name  localhost,192.168.121.140;    
      location /back {        
      proxy_pass http://back/back;     
      }
 }
 }

上面的配置就是在反向代理的基础上,修改了proxy_pass的ip和端口为别名代替,该别名所表示的真实ip是和upstream配置一一对应的。我们可以看到上述配置的updatream back有两个服务地址。当我们访问http://192.168.121.140:8088/back/app/getData时,nginx首先匹配到location的back,然后根据proxy_pass的back到upstream搜索服务地址。但是upstream存在多个服务时,nginx默认采用轮训的负载算法,即访问服务器顺序为ABABAB…。
下面我们介绍下nginx的负载均衡算法:
(1)轮训,默认算法,访问顺序是ABABAB…

 upstream back {         
 server 192.168.121.139:8080;         
 server 192.168.121.139:8081;        
 }

(2)加权轮训,我们可以设置某个服务的权重,这样 nginx就会访问该服务的次数更多.

 upstream back {         
 server 192.168.121.139:8080  weight=1;         
 server 192.168.121.139:8081 weight=4;       
  }

(3)热备,即当某个服务挂了后,有后备服务接着提供服务。当A服务没有挂,所有的请求都是访问A服务,不会请求到B服务。当A服务挂了后,所有的请求都是到B服务。

upstream back {        
   server 192.168.121.139:8080  ;         
   server 192.168.121.139:8081 backup;        
   }

(4)ip_hash,nginx将相同客户端ip的请求一直访问到相同的服务。如果第一次访问到A服务,那么以后该客户端都是访问到A服务。

  upstream back {        
    ip_hash;         
    server 192.168.121.139:8080  ;         
    server 192.168.121.139:8081;       
     }

(5)下线,即不参与负载均衡。配置down之后,等价于A服务挂了,所有的请求都是到B服务。

 upstream back {         
 server 192.168.121.139:8080  down ;         
 server 192.168.121.139:8081 ;        
 }

针对上面的配置,如果A服务配置了down,B服务配置了backup,那么所有的请求是到B服务的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值