美文网首页Python/Go开发PythonPython
Django + Nginx负载均衡(内置策略)

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

作者: 唯老 | 来源:发表于2019-03-10 21:29 被阅读204次

    一、概要

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

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

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

    二、轮询

    1、说明

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

    2、参数列表

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

    3、特点

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

    4、示例代码

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


      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负载均衡(内置策略)

        本文链接:https://www.haomeiwen.com/subject/sqoppqtx.html