Django + Nginx负载均衡(内置策略)

一、概要

负载均衡的主要作用是为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器

负载均衡通过upstream模块类配置,目前Nginx服务器upstream模块支持7种载均衡策略

序号 均衡策略 说明
1 轮询 默认方式
2 weight 权重方式
3 ip_hash 依据ip分配方式
4 least_conn 最少连接方式
5 fair(第三方) 响应时间方式
6 url_hash(第三方) 依据URL分配方式
7 sticky(第三方) 压力均衡
Django + Nginx负载均衡(内置策略)_第1张图片
image

二、轮询

1、说明

upstream模块默认的负载均衡默认策略,每个请求按照时间顺序逐一分配。如果server挂掉,能自动剔除。

2、参数列表

参数 说明
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
ail_timeout 与max_fails结合使用。
max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
fail_time 服务器会被认为停机的时间长度,默认为10s。
down 标记某台应用服务器暂时不参与负载均衡

3、特点

  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

4、示例代码

  1. gunicorn配置
    本案例采用的伪集群方式,主要修改配置文件的bind的端口,实战开发中可以将项目部署在不同的服务器上,


    Django + Nginx负载均衡(内置策略)_第2张图片
    image
  2. nginx中upstream配置
    # 动态服务器组
    upstream http-default {
        server localhost:8000;  
        server localhost:8001;
        server localhost:8002; 
        # 备用服务器
        server localhost:8003 backup; 
    }
    
  3. 在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、示例代码

  1. 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; 
    }
    
  2. 在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、示例代码

  1. 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;
    }
    
  2. 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、示例代码

  1. 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;
    }
    
  2. server模块
    # 其它配置都不需要变 只需要修改 proxy_pass
    server {
        location / {
            # 设置成upstream模块的名字即可
            proxy_pass http-least-conn;
        }
    

你可能感兴趣的:(Django + Nginx负载均衡(内置策略))