利用nginx实现负载均衡是nginx的一个主要用途。今天来学习一下nginx的负载均衡。
首先修改配置文件
upstream myTomcat{
server 127.0.0.1:901 weight=5;
server 127.0.0.1:907 weight=10;
}
server
{
listen 90;
server_name localhost;
location / {
proxy_pass http://myTomcat;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
需要注意的是:proxy_pass后面的名字开始随便写,我一开始以为这个是一个可以访问的地址呢。
upstream后面的名字必须和proxy_pass后面的额保持一致。
这样已经实现了负载均衡的配置。
重点:负载均衡的策略
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 依据ip分配方式 |
least_conn | 最少连接方式 |
fair(第三方) | 响应时间方式 |
url_hash(第三方) | 依据URL分配方式 |
- 轮询
最基本的配置方法,它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。
在轮询中,如果服务器down掉了,会自动剔除该服务器。fail_timeout 与max_fails结合使用。 max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, fail_time 服务器会被认为停机的时间长度,默认为10s。 backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 down 标记服务器永久停机了。 如果配置server localhost:8083 max_fails=3 fail_timeout=20s; 表示:在20s内如果3次访问失败,则将次服务器down
如果配置server localhost:8082 backup; 表示将服务器为备用服务器 -
weight
- 权重方式,在轮询策略的基础上指定轮询的几率。本文上面的例子就是这种方式。值越大则被访问的几率越大。
-
ip_hash
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。注意的是如果出现服务器挂了,则需要手动剔除这个服务器。 -
least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。