Nginx负载均衡介绍

负载均衡的意识是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度这再根据每个服务器的负载情况,将请求分配给对应的服务器去处理。

在这个过程中,调度这如何合理分配任务,保证所有服务器将性能充分发挥,从而保证服务器集群的整体性能最优,这就是负载均衡要解决的问题了。

Nginx负载均衡的方式

轮询

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动删除,如下配置后轮询10001服务和10002服务

1
2
3
4
upstream dalaoyang-server {
server localhaost:10001;
server localhaost:10002;
}

权重

指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务器的访问比率会是10001服务的二倍。

1
2
3
4
upstream dalaoyang-server {
server localhaost:10001 weight=1;
server localhaost:10002 weight=2;
}

iphash

每个请求都根据访问的ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)

1
2
3
4
5
upstream dalaoyang-server {
ip_hash;
server localhaost:10001 weight=1;
server localhaost:10002 weight=2;
}

最少连接

将请求分配到连接数最少的服务上。

1
2
3
4
5
upstream dalaoyang-server {
least_conn;
server localhaost:10001 weight=1;
server localhaost:10002 weight=2;
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

1
2
3
4
5
upstream dalaoyang-server {
server localhaost:10001 weight=1;
server localhaost:10002 weight=2;
fair;
}

负载均衡实现

和代理实战的模式一样,一个Nginx,三个Tomcat,以轮询为例,nginx.conf简易配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
worker_processes  1;

events {
use epoll;
worker_connections 1024;
}

http {
# 新增服务组
upstream test {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;

location / {
proxy_pass http://test;
proxy_redirect default;
}
}
}