美文网首页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;
        }
    

相关文章

  • 五、负载均衡与配置详解

    负载均衡概述 nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为:轮询、加权轮询、ip hash。...

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

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

  • Nginx负载均衡小知识

    Nginx 负载均衡配置Nginx 重试次数限制Nginx 超时重试 Nginx 负载均衡 负载均衡策略 roun...

  • Nginx负载均衡配置

    基于轮询(Round Robin)的负载均衡配置 Nginx的负载均衡策略默认就是轮询。 Nginx负载均衡策略支...

  • nginx负载均衡

    下面将介绍nginx开源版内置的4种负载均衡策略和2种三方负载均衡策略,他们分别是: 轮询 最少连接数 ip_ha...

  • nginx 负载均衡策略

    Nginx 反向代理的负载均衡中,内置了 轮询、IP分配、URL hash、最小连接、响应时间等几种策略算法 负载...

  • 【问答】中间件

    nginx的请求转发算法,如何配置根据权重转发 负载均衡策略:内置策略:轮询(默认)、加权轮询(处理1次连接则权重...

  • Nginx负载均衡_轮训策略与加权轮询

    章节目录 Nginx 负载均衡调度策略 加权轮询演示 ip_hash url_hash Nginx 负载均衡调度策...

  • Nginx负载均衡、ssl原理、生产ssl密钥对、Nginx配置

    Nginx负载均衡 1、Nginx的负载分发策略Nginx 的 upstream目前支持的分配算法:1)、轮询 —...

  • Nginx负载均衡策略

    title: Nginx负载均衡策略date: 2018-11-01 10:47:35tags: Nginx 负载...

网友评论

    本文标题:Django + Nginx负载均衡(内置策略)

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