利用 nginx 实现负载均衡

1、安装 nginx 和 tomcat

我 这 里 是 使 用 docker 安 装 的 。 安 装 流 程 可 参 照

http://www.cnblogs.com/andyfengzp/p/6424150.html

这里安装了两个 tomcat,端口分别是 42000 和 42001。第二个 tomcat 的首页随便加了些代

码区分

2、nginx 配置

#这里的域名要和下面 proxy_pass 的一样

```upstream fengzp.com {

server 192.168.99.100:42000 weight=1;

server 192.168.99.100:42001 weight=2;

}

server {

  listen 80;

  server_name 192.168.99.100;

  location / {

  proxy_pass http://fengzp.com;

  proxy_redirect default;

 }

 error_page 500 502 503 504 /50x.html;

 location = /50x.html {

 root html;

  }

}

```

3、测试

刷新页面发现页面会发生变化,证明负载配置成功。因为我配的权重第二个是第一个的两倍,

所以第二个出现的概率会是第一个的两倍。4、后续问题

如果关了 tomcat1,再多次刷新页面,接下来出现的就会都是 tomcat2 的页面,但是时而快

时而慢。这其中原因是当如果 nginx 将请求转发到 tomcat2 时,服务器会马上跳转成功,但

是如果是转到 tomcat1,因为 tomcat1 已经关闭了,所以会出现一段等待响应过程的过程,

要等它失败后才会转到 tomcat2。

而这个等待响应的时间我们是可以配置的。

这个时间由以下 3 个参数控制:

proxy_connect_timeout:与服务器连接的超时时间,默认 60s

fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认 10s

max_fails:允许连接失败次数,默认为 1

等待时间 = proxy_connect_timeout + fail_timeout * max_fails

如果我这样配置的话,只需等待 6 秒就可以了。

5、负载均衡策略

1、轮询

这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动

剔除。

upstream fengzp.com {

server 192.168.99.100:42000;

server 192.168.99.100:42001;

}

1

2

3

4

2、最少连接

把请求分配到连接数最少的 server

upstream fengzp.com {

least_conn;

server 192.168.99.100:42000;

server 192.168.99.100:42001;

}

1

2

3

45

3、权重

使用 weight 来指定 server 访问比率,weight 默认是 1。以下配置会是 server2 访问的比例是

server1 的两倍。

upstream fengzp.com {

server 192.168.99.100:42000 weight=1;

server 192.168.99.100:42001 weight=2;

}

4、ip_hash

每个请求会按照访问 ip 的 hash 值分配,这样同一客户端连续的 Web 请求都会被分发到同一

server 进行处理,可以解决 session 的问题。如果 server 挂掉,能自动剔除。

upstream fengzp.com {

ip_hash;

server 192.168.99.100:42000;

server 192.168.99.100:42001;

}

ip_hash 可以和 weight 结合使用。

你可能感兴趣的:(利用 nginx 实现负载均衡)