Nginx配置负载均衡

一、Nginx介绍

Nginx是一个高性能的HTTP和反向代理服务器,在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。Nginx支持热部署,启动速度特别快,还可以在不间断服务的情况下对软件版本或配置进行升级,即使运行数月也无需重新启动。

二、为什么要用Nginx

当用户量变大的时候,单机压力变大,会造成Web服务器响应变慢,严重的会导致服务瘫痪,无法提供服务,单台Web服务并发量有限,而且有发生故障的情况,这时候我们就会将同一个系统部署到多台服务器实现高可用,那么请求可以分发到不同的服务器,从而提高性能,这里我们就可以用到Nginx了。下面我们讲一讲Nginx负载均衡策略以及策略的代码实现

三、Nginx负载均衡策略有哪几种?

1、轮循(默认策略  weight=1)

Nginx根据请求次数,将每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

    upstream backserver {
        server localhost:8080;
        server localhost:8081;
    }

    server {
        #需要监听的端口号
        listen       8082;
        server_name  localhost;
        location / {
            # backserver是upstream服务组,可自己命名
            proxy_pass http://backserver;
        }
    }

max_conns限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置
fail_timeout与max_fails结合使用(默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它)
max_fails允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_time服务器被认为停机的时长,默认10s(被认为停机的服务器尝试间隔?)
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。所以这台机器压力会最轻。
down标记服务器永久停机(表示单前的server暂时不参与负载)
resolve将server指令配置的域名,指定域名解析服务器。需要在http模块下配置resolver指令,指定域名解析服务
http {
    resolver 10.0.0.1;

    upstream u {
        zone ...;
        ...
        server example.com resolve;
    }
}

表示example.com域名,由10.0.0.1服务器来负责解析。upstream模块server指令的其它参数和详细配置说明

注意:1.down标记的服务器会自动剔除;2.缺省就是轮询;3.此策略适合服务器配置无状态且短平块的服务使用

2、权重

通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。   

 upstream backserver {
        server localhost:8080 weight=1 max_fails=3 fail_timeout=15;
        server localhost:8081 weight=3;

        server localhost:8080 down;
        server localhost:8081 Backup;
    }

注意:1.权重越高分配到的请求越多;2.此策略可以和least_conn策略、iphash策略结合使用;3.此策略比较适合服务器硬件配置差距较大的情况。

3、IP Hash
绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理。

upstream backserver {

        ip_hash;
        server localhost:8080;
        server localhost:8081;
    }

注意:1.nginx1.3.1之前的版本不能在ip_hash中使用权重(weight);2..ip_hash不能与backup同时使用;3.此策略适合有状态服务的程序,比如session;4.当有服务器需要剔除,必须手动down掉。

4、least_conn

最少连接方式,把请求发给链接数最少的后端服务器。轮询是把请求平均分配给各个后端,使它们的负载大致相同。但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream模块配置模板如下:

upstream backserver {

        least_conn;
        server localhost:8080 weight=1;
        server localhost:8081;
    }

   注意:此策略适合请求处理时间长短不一造成的服务器过载情况。7)

第三方负载策略

1> fair

根据服务器的响应时间来分配请求,响应时间短的优先分配,即负载压力小的优先会分配。

由于fair模块是第三方提供的,所以在编译nginx源码的时候,需要将fair添加到nginx模块中。

假设我的nginx是通过源码安装的,安装在/opt/nginx目录下,而且安装时没有添加fair模块

1> 下载fair模块源码
下载地址:https://github.com/xyang0917/nginx-upstream-fair

cd /opt
wget https://github.com/xyang0917/nginx-upstream-fair/archive/master.zip
unzip master.zip

解压后的目录名为:nginx-upstream-fair-master

2> 重新编译nginx,将fair模块添加到编译参数
我的nginx源码目录在/opt/nginx-1.10.0

cd /opt/nginx-nginx-1.10.0
./configure --prefix=/opt/nginx --add-module=/opt/nginx-upstream-fair-master
make

注意:不要执行make install,这样会覆盖之前nginx的配置
3> 将新编译的nginx可执行程序拷贝到/opt/nginx/sbin/目录下,覆盖之前安装的nginx
编译后的nginx执行程序,放在nginx源码的objs目录下

ps -aux | grep nginx
kill -9 nginx进程ID  # 停止nginx服务
cp /opt/nginx-1.10.0/objs/nginx /opt/nginx/sbin/  # 覆盖旧的nginx
nginx # 启动服务

配置使用fair负载策略模块:

upstream tomcats {
    fair;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    server 192.168.0.102:8080;
}

由于采用fair负载策略,配置weigth参数改变负载权重将无效。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值