0%

nginx的负载均衡配置

在使用 node 作为服务器时通常会遇到 gzip 编码,静态文件,HTTP 缓存,SSL 处理,负载平衡和反向代理等问题、 虽然 node 都有它的解决方案,但是性能相较于 ngnix 还是要差一点。并且可以通过 nginx 强大的缓存来节省您网站的流量从而提高网站的加载速度。

本文主要是关于 ngnix 在负载均衡方面的记录,方便以后的查阅。

负载均衡

负载均衡有多重方案,可以按照实际情况选择。

轮询(默认)

按照配置的顺序,将客户端的请求依次分发到各个服务器中去。配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
upstream server_pool {
server 127.0.0.1:8000;
server 127.0.0.2:8000;
}
...
server{
listen 80;
...
location / {
...
proxy_pass http://server_pool;
}
}
...

最少连接

请求会被分发到连接数少的服务器中去,配置如下:

1
2
3
4
5
upstream server_pool {
least_conn; //只是多了这一项配置,其他和轮询一致
server 127.0.0.1:8000;
server 127.0.0.2:8000;
}

基于权重

可以根据服务器的性能给服务器设置权重,权重越高,被分配的请求数也越多。配置如下:

1
2
3
4
upstream server_pool {
server 127.0.0.1:8000 weight=2;
server 127.0.0.2:8000;
}

设置weight=2后,每 3 个请求,第一个服务器会收到两个,第二个服务器会收到一个。

基于 IP

前几种方法中,同一客户端的请求可能会被到不同的服务器中去,对于某些需要涉及到 session 的情况会变得复杂,可采取基于 IP 的解决方案,同一 IP 的请求会被分配到同一个服务器中去。配置如下:

1
2
3
4
5
upstream server_pool {
ip_hash; //只是多了这一项配置,其他和轮询一致
server 127.0.0.1:8000;
server 127.0.0.2:8000;
}

说明一点,基于权重的负载均衡和基于 IP 的负载均衡可以组合在一起使用。

fair(第三方模块:nginx-upstream-fair)

按服务器的响应时间来分配请求,响应时间短的优先分配。配置如下:

1
2
3
4
5
upstream server_pool {
server 127.0.0.1:8000;
server 127.0.0.2:8000;
fair; //只是多了这一项配置,其他和轮询一致
}

url_hash(第三方模块:nginx-module-url)

按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个服务器,服务器为缓存时比较有效。配置如下:

1
2
3
4
5
6
upstream server_pool {
server 127.0.0.1:8000;
server 127.0.0.2:8000;
hash $request_uri;
hash_method crc32;
}

单个设备状态设置

1
2
3
4
5
6
7
upstream server_pool {
server server1;
server server2 backup; // 当其他服务器挂掉或者忙的的时候才会访问该服务器
server server2 down; // 该节点不参与负载均衡
max_fails: 1;// 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout: 100ms;// max_fails次失败后,暂停的时间。
}