Nginx基础-4:负载均衡

负载均衡是为减轻单个服务器负担,将请求按照某种策略分发给多个服务器。

官方文档参考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream

以2台Tomcat集群为例

Tomcat配置

Tomcat下载地址:https://tomcat.apache.org/download-80.cgi

1568258710917

解压后修改\tomcat\conf\目录下的server.xml

修改所有的端口号,避免冲突

1
2
3
4
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>

本例中,Tomcat A部署在http://localhost:8080,Tomcat B部署在http://localhost:8082

分别在两个Tomcat下部署tomcat\webapps\demo\load-balance.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>

<body>
<h1 style="color: pink">8080</h1>
</body>

</html>

用颜色和文字区分两个Tomcat

Nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
upstream tomcat {
server localhost:8080;
server localhost:8082;
}

server {
listen 8088;
server_name localhost;

charset utf-8;

location / {
proxy_pass http://tomcat;
proxy_redirect default;

include proxy_params;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

进入浏览器,用http://localhost:8088/demo/load-balance.html进行访问

F5刷新页面,会依次地访问到8080和8082上的Tomcat

分发策略

1.轮询(默认)

1
2
3
4
upstream tomcat {
server localhost:8080;
server localhost:8082;
}

按时间顺序,依次分发

2.加权轮询

1
2
3
4
upstream tomcat {
server localhost:8080 weight=1;
server localhost:8082 weight=10;
}

weight值与访问几率成正比

3.ip_hash

1
2
3
4
5
upstream tomcat {
ip_hash;
server localhost:8080;
server localhost:8082;
}

考虑缓存的情况,保持会话

来自同一ip的请求会固定到一个server

4.最小连接

1
2
3
4
5
upstream tomcat {
least_conn;
server localhost:8080;
server localhost:8082;
}

根据连接数来分发,起到均分的作用

5.url_hash

1
2
3
4
5
upstream tomcat {
hash $request_url;
server localhost:8080;
server localhost:8082;
}

来自同一url的请求会固定到一个server

状态参数

1.down

1
2
3
4
upstream tomcat {
server localhost:8080 down;
server localhost:8082;
}

当前server不参与负载均衡

2.backup

1
2
3
4
upstream tomcat {
server localhost:8080 down;
server localhost:8082;
}

预留的server,当有其他的server挂掉或者忙的时候,才会参与负载

3.max_fails和fail_timeout

1
2
3
4
upstream tomcat {
server localhost:8080;
server localhost:8082 max_fails=3 fail_timeout=30s;
}

最大连接错误次数3次,每次失败后,间隔30s再重新发起连接

4.max_conns

1
2
3
4
upstream tomcat {
server localhost:8080;
server localhost:8082 max_conns=500;
}

超过最大连接数后,就不参与负载