Nginx负载均衡

一、负载均衡

1.1 NGINX -内置负载策略

轮循(默认)

Nginx根据请求次数,将每个请求均匀分配到每台服务器

最少连接 least_conn

将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少

IP Hash

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

weight

根据配置的权重来分配请求的处理服务器.

1)轮询

http {
    # ... 省略其它配置
    upstream tomcats {
        server 192.168.0.100:8080;
        server 192.168.0.101:8080;
        server example.com:8080;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://tomcats;
        }
    }
    # ... 省略其它配置
}

2)最少连接 least_conn


http {
    # ... 省略其它配置
    upstream tomcats {
        server 192.168.0.100:8080;
        server 192.168.0.101:8080;
        server example.com:8080;
    }
upstream tomcats {
        least_conn;    #把请求转发给连接数较少的后端服务器
    }

 

3)IP Hash


http {
    # ... 省略其它配置
    upstream tomcats {
        server 192.168.0.100:8080;
        server 192.168.0.101:8080;
        server example.com:8080;
    }
upstream tomcats {
        ip_hash;    #保证每个访客固定访问一个后端服务器
    }

 

4)weight 权重方式

#weight
默认为1,将请求平均分配给每台server
upstream tomcats {
    server 192.168.0.100:8080 weight=2;  # 2/6次
    server 192.168.0.101:8080 weight=3;  # 3/6次
    server 192.168.0.102:8080 weight=1;  # 1/6次
}
#max_fails
默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令来处理这次错误的请求。
#fail_timeout 
默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它
upstream tomcats {
    server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
    server 192.168.0.101:8080 weight=3;
    server 192.168.0.102:8080 weight=1;
}
192.168.0.100这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。
#backup
备份机,所有服务器挂了之后才会生效
upstream tomcats {
    server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
    server 192.168.0.101:8080 weight=3;
    server 192.168.0.102:8080 backup;
}
在100和101都挂了之前,102为不可用状态,不会将请求分配给它。只有当100和101都挂了,102才会被启用。
#down
标识某一台server不可用。可能能通过某些参数动态的激活它吧,要不真没啥用。
upstream tomcats {
    server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
    server 192.168.0.101:8080 down;
    server 192.168.0.102:8080 backup;
}
表示101这台Server为无效状态,不会将请求分配给它。
#max_conns
限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置
upstream tomcats {
    server 192.168.0.100:8080 max_conns=1000;
}
表示最多给100这台Server分配1000个请求,如果这台Server正在处理1000个请求,nginx将不会分配新的请求给到它。假如有一个请求处理完了,还剩下999个请求在处理,这时nginx也会将新的请求分配给它。
#resolve
将server指令配置的域名,指定域名解析服务器。需要在http模块下配置resolver指令,指定域名解析服务
http {
    resolver 10.0.0.1;
    upstream u {
        zone ...;
        ...
        server example.com resolve;
    }
}
1.2 第三方负载策略

1)fair  

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

#需先安装fair模块
upstream tomcats {
    fair;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    server 192.168.0.102:8080;
}

2)url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取

upstream tomcats {
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    server 192.168.0.102:8080;
    hash $request_uri;
}

 

上一篇:git 提交流程(自己fork库到主库)


下一篇:nginx的upstream后端名称居然变成了请求的host了?