美文网首页
nginx upstream模块

nginx upstream模块

作者: 麟之趾a | 来源:发表于2021-07-17 20:22 被阅读0次

    what

    upstream模块是对服务器的一个分组,在http里面,由proxy_pass 代理upstream的组名,
    这个为http的7层代理
    upsteam 可以对后台服务器做健康检查

    where

    做http的负载均衡使用

    when

    高并发场景用

    who

    运维人员

    how

    示例

    http {
        upstream web_test {
              server 10.0.0.1;
              server 10.0.0.2;
        }
        server {
            listen 80;
            location / {
                    proxy_pass http://web_test
                }
        }
    }
    

    upsteam调度算法加权轮询

     upstream web_test {
              server 10.0.0.1  weight=2;
              server 10.0.0.2;
        }
    

    upsteam ip_hash算法

    ip_hash默认使用 static hash取模运算,即取upstream服务器权重数进行取模,把源ip进行 hash运算对其权重数进行取模,然后分布。

    ip_hash 问题

    如果后台有一台服务器宕机,则基于权重数的取模就会出现问题。因为宕机了一台机器,其权重数就会发生变化。客户端请求过来的ip hash运算后,其取模的结果也就一样了。
    ip_hash解决了解决了session问题,使用stick session的手段。但取模的地址太过粗糙,且后面有一台机器宕机,则整个取模算法就会完全改变

     upstream web_test {
              ip_hash;
              server 10.0.0.1  weight=2;
              server 10.0.0.2;
        }
    

    upstream hash算法

    hash算法就可以使用客户端请求的任一请求头进行hash运算取模,且可以设置一致性hash,是基于取模的权重是不变的

    Syntax: hash key [consistent];
    Default:    —
    Context:    upstream
    This directive appeared in version 1.7.2.
    

    其中 consistent是设置一致性hash算法的参数

     upstream web_test {
              hash $remote_ip consistent;
              server 10.0.0.1  weight=2;
              server 10.0.0.2;
        }
    

    实现与ip_hash一样的效果,且使用的是一致性hash算法
    可以对其uri进行hash取模运算,如果后面使用的静态的缓存服务器,即提高缓存命中率

    upsteam least_conn 最小连接算法

     upstream web_test {
              least_conn;
              server 10.0.0.1  weight=2;
              server 10.0.0.2;
        }
    

    最小连接算法
    建议如果开启长连接就使用最小连接算法,如果是短链接就使用轮询算法

    keepalive

    对于upstream模块中的服务器保持长连接的数量
    在proxy_pass中应该把http版本设置为1.1,清楚原链接请求头中的Connection字段内容

    upstream http_backend {
        server 127.0.0.1:8080;
    
        keepalive 16;
    }
    
    server {
        ...
    
        location /http/ {
            proxy_pass http://http_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            ...
        }
    }
    

    upstream 中server的参数

    backup

    将server置于备用状态及所有server宕机,此server提供sorry页面

    down

    将此server置于down不在接受用户请求。
    一般在发布过程中,先用脚本将此server置为down,然后过一段时间,大概是一个长连接的周期。然后将server后面的服务器,进行版本更新。然后再把down去掉,提供服务。
    保持一段时间,目的是否后面服务器的连接自动断开,提升用户的体验

    weight

    根据server的配置,设置其权重

     upstream web_test {
              least_conn;
              server 10.0.0.1  weight=2;
              server 10.0.0.2;
        }
    

    max_conn

    设置server的最大连接数数

    max_fails

    设置server连接的最大失败次数,默认为1

    fail_timeout

    设置server的探测的超时时间,默认为10秒
    当客户端连接超过 fail_timeout * max_fails 秒后,此server被nginx标为不可用状态

    相关文章

      网友评论

          本文标题:nginx upstream模块

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