• Nginx负载均衡之upstream模块详解


     upstream模块介绍

    Nginx的负载均衡功能来自于其模块ngx_http_upstream_module模块,该模块支持的代理方式有:

      1. uwsgi_pass

      2. fastcgi_pass

      3. proxy_pass

      4. memcached_pass

    ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器,使用时可以通过proxy_pass代理方式,把用户请求发送到事先定于好的upstream组中。具体写法就是

    upstream www_pools {
    server x.x.x.x;
    server x.x.x.x;
    }
    
    proxy_pass http://www_pools;
    

      

    完整的upstream配置案例

    upstream www_pools {
    server 192.168.178.121;
    server 192.168.178.122:80 weight=1 max_fails=1 fail_timeout=10s;
    server 192.168.178.123:80 weight=10 max_fails=2 fail_timeout=20s backup;
    server 192.168.178.124:80 wetight=10 max_fails=2 fail_timeout=20s backup;
    }
    

      

    使用域名及socket的upstream配置

    upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;
    server backend3.example.com:8080 backup;
    }
    

      

    upstream参数

    # 参数解释
    server是固定关键字,后面跟着服务器ip或是域名,默认是80端口,也可以指定端口
    weight表示节点的权重,数字越大,分配的请求越多,注意nginx结尾的分号
    max_fails Nginx尝试连接后端节点失败的次数,根据企业情况调整,默认是1
    backup 其它所有的非backup机器down或者忙的时候,请求backup机器,实现热备效果。
    fail_timeout 在max_fails定义的次数失败后,距离下次检查的间隔时间,默认10s
    down 表示当前主机暂停,不参与负载均衡
    
    upstream模块的内容应放于nginx.conf配置中的 http{}标签内
    其默认调度算法是wrr(权重轮询,weighted round-robin)
    

      

    upstream模块调度算法

    【rr轮询调度算法】

    【wrr权重轮询】

    upstream backend {
    server 192.168.178.122 weight=1;
    server 192.168.178.121 weight=2;
    }
    

      

    【ip_hash】

    upstream chaoge_backend {
    ip_hash;
    server 192.168.178.121;
    server 192.168.178.122;
    
    }
    

      

    【fail】

    该算法根据后端服务器节点的响应时间来分配,响应时间短的优先分配。nginx本身不支持fail形式,如果要支持该算法,必须下载nginx的upstream模块。

    upstream chaoge_backend {
    fair;
    server 192.168.178.121;
    server 192.168.178.122;
    }
    

      

    【least_conn】

    该算法根据后端节点的连接数决定分配请求,哪个机器连接数少,就发给谁。

    【url_hash】

    需要单独安装hash模块

    upstream chaoge_backend {
    server squid1:3128;
    server squid:3128;
    hash $request_uri;
    hash_method crc32;
    }
    

      

    proxy_pass指令

    案例1

    在nginx.conf配置文件中定义
    
    location /name/ {
    proxy_pass http://127.0.0.1/remote/;
    }
    
    例如当请求URL是: http://192.168.178.121/name  ,会进入该locaiton的作用域,通过参数proxy_pass请求转发给了http://127.0.0.1/remote/
    

      

    案例2

      location ~ .*.php$ {
            proxy_pass http://www.example.cn$request_uri;
            proxy_set_header Host $proxy_host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    
    所有请求以.php结尾的URL,进行转发
    

      

      

    proxy_pass参数

    参数 作用解释
    proxy_set_header 设置反向代理向后端发送的http请求头信息,如添加host主机头部字段,让后端服务器能够获取到真是客户端的IP信息等。
    client_body_buffer_size 指定客户端请求主体缓冲区大小
    proxy_connect_timeout 反向代理和后端节点连接的超时时间,也是建立握手后等待响应的时间
    proxy_send_timeout 表示代理后端服务器的数据回传时间,在规定时间内后端若数据未传完,nginx会断开连接
    proxy_read_timeout 设置nginx从代理服务器获取数据的超时时间
    proxy_buffer 设置缓冲区的数量大小
  • 相关阅读:
    第七周作业
    第六周作业
    第五周作业
    第四周作业
    第三周作业
    第二周作业
    求最大值及下标
    查找整数
    抓老鼠
    第五周作业
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14219302.html
Copyright © 2020-2023  润新知