一、概要
负载均衡的主要作用是为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器
负载均衡通过upstream模块类配置,目前Nginx服务器upstream模块支持7种载均衡策略
序号 均衡策略 说明 1 轮询 默认方式 2 weight 权重方式 3 ip_hash 依据ip分配方式 4 least_conn 最少连接方式 5 fair(第三方) 响应时间方式 6 url_hash(第三方) 依据URL分配方式 7 sticky(第三方) 压力均衡
二、轮询
1、说明
upstream模块默认的负载均衡默认策略,每个请求按照时间顺序逐一分配。如果server挂掉,能自动剔除。
2、参数列表
参数 | 说明 |
---|---|
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
ail_timeout | 与max_fails结合使用。 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
down | 标记某台应用服务器暂时不参与负载均衡 |
3、特点
- 此策略适合服务器配置相当,无状态且短平快的服务使用。
4、示例代码
-
gunicorn配置
本案例采用的伪集群方式,主要修改配置文件的bind的端口,实战开发中可以将项目部署在不同的服务器上,
- nginx中upstream配置
# 动态服务器组 upstream http-default { server localhost:8000; server localhost:8001; server localhost:8002; # 备用服务器 server localhost:8003 backup; }
- 在server模块中
# 其它配置都不需要变 只需要修改 proxy_pass的值 server { location / { # 设置成upstream模块的名字即可 proxy_pass http://https-default; }
三、权重方式(weight)
1、说明
权重方式,在轮询策略的基础上指定轮询的几率
2、参数列表
参数 | 说明 |
---|---|
weight | weight参数用于指定轮询几率,weight的默认值为1 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
ail_timeout | 与max_fails结合使用。 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
down | 标记某台应用服务器暂时不参与负载均衡 |
3、特点
- 权重越高分配到需要处理的请求越多。
- 此策略可以与least_conn和ip_hash结合使用。
- 此策略比较适合服务器的硬件配置差别比较大的情况。
4、示例代码
- nginx
# 负载均衡 upstream http-weight { server localhost:8000 weight=2; server localhost:8001 weight=2; server localhost:8002 backup; server localhost:8003 max_fails=3 fail_timeout=15s; }
- 在server模块中
# 其它配置都不需要变 只需要修改 proxy_pass server { location / { # 设置成upstream模块的名字即可 proxy_pass http://https-weight; }
四、ip_hash
1、说明
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,session共享
2、参数列表
参数 | 说明 |
---|---|
ip_hash | 使用ip_hash策略 |
weight | weight参数用于指定轮询几率,weight的默认值为1 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
ail_timeout | 与max_fails结合使用。 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
down | 标记某台应用服务器暂时不参与负载均衡 |
3、特点
- 在nginx版本必须大于1.3.1。
- 此策略适合开发中常用于解决session共享的问题
- ip_hash不能与backup同时使用。
- 当有服务器需要剔除,必须手动down掉。
4、示例代码
- upstream配置
upstream http-ip-hash { ip_hash; #保证每个访客固定访问一个后端服务器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
- server模块
# 其它配置都不需要变 只需要修改 proxy_pass server { location / { # 设置成upstream模块的名字即可 proxy_pass http://http-ip-hash; }
五、least_conn
1、说明
最少连接可以控制单独的一台服务器负载太高的问题,而是会根据其负载动态的分配请求。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
当然如果每台服务还配置了权重,那么这时会取连接数和权重比值最小的那台服务,如果连接数和权重的比值都相同的话就会采取轮询的方式进行分发
3、参数列表
参数 | 说明 |
---|---|
least_conn | 最少连接策略 |
weight | weight参数用于指定轮询几率,weight的默认值为1 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
ail_timeout | 与max_fails结合使用。 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
fail_time | 服务器会被认为停机的时间长度,默认为10s。 |
down | 标记某台应用服务器暂时不参与负载均衡 |
4、示例代码
- upstream配置
upstream http-least-conn { least_conn; #保证每个访客固定访问一个后端服务器 server localhost:8080 weight=2; server localhost:8081 weight=2; server localhost:8082 weight=3; server localhost:8083 max_fails=3 fail_timeout=20s; }
- server模块
# 其它配置都不需要变 只需要修改 proxy_pass server { location / { # 设置成upstream模块的名字即可 proxy_pass http-least-conn; }