Nginx负载均衡是通过upstream模块来实现的。Nginx负载均衡内置实现了三种负载策略:
1、 轮循(默认)Nginx根据请求次数,将每个请求均匀分配到每台服务器。
2、最少连接,将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。
3、IP Hash,绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理。
Nginx的负载均衡配置非常简单,在反向代理的基础上,只要在upstream中添加几个server配置即可。
命令形式:
1
|
server ip:port 参数1 参数2 参数3 ...; |
两个参数之间使用空格分开。
示例:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080; server 127.0.0.1:8090; } |
将请求发给现台tomcat处理,其中一台挂了,还可以正常访问。
server后的其它参数说明:
weight 处理请求次数,默认为0,默认是平均分配请求给各server,如要指定,使用=来指定,如weight=2;如下所示:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080 weight=2; server 127.0.0.1:8090 weight=1; } |
如果有6次请求,808端口的将处理2/6次,8090端口的将处理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暂时不可用,不会将请求分配给它。
示例:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080 max_fails=3 fail_timeout=15; server 127.0.0.1:8090 ; } |
backup 备份机,所有服务器挂了之后才会生效。
示例:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080 ; server 127.0.0.1:8090 backup; } |
max_conns 限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。
示例:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080 ; server 127.0.0.1:8090 max_conns=1000; } |
down 标识某一台server不可用。
示例:
1
2
3
4
|
upstream my_server { server 127.0.0.1:8080 ; server 127.0.0.1:8090 down; } |